发布新日志

  • 性能测试群

    2012-09-07 15:19:34

    群号:70408367
     
    非专业不开服,诚交天下英杰!
  • Abnormal termination, caused by mdrv process termination.(转)

    2012-06-13 10:30:30

    1. Load generator跑了太多用户导致CPU和内存爆满,进程无法处理请求
    2. 确认自定义的代码是否释放内存
    3. 合理调整或增加思考时间
    4. 关闭extended log
    5. 尽量避免使用Load generator本身测试机做压力测试
    6. 增加迭代次数
    7. 打开loadrunner installation\config\wlrun7.ini 调整AgentMaxThreadsPerDriver=50 为 AgentMaxThreadsPerDriver=20或 10
    8. Runtime Settings > Miscellaneous > Multithreading > RunVuser as a process
    9. LR 安装目录dat\protocols下的CsNet.lrp文件中[Vugen]下面新加一条MaxThreadPerProcess=要设置的vuser数量
  • loadrunner中MD5加密实现

    2012-06-12 10:40:41

    globals.h引入如下:
    ifndef _GLOBALS_H
    #define _GLOBALS_H

    //--------------------------------------------------------------------
    // Include Files
    #include "lrun.h"
    #include "web_api.h"
    #include "lrw_custom_body.h"

    //--------------------------------------------------------------------
    // Global Variables

    #endif // _GLOBALS_H
    #ifndef MD5_H
    #define MD5_H
    #ifdef __alpha
    typedef unsigned int uint32;
    #else
    typedef unsigned long uint32;
    #endif
    struct MD5Context {
            uint32 buf[4];
            uint32 bits[2];
            unsigned char in[64];
    };
    extern void MD5Init();
    extern void MD5Update();
    extern void MD5Final();
    extern void MD5Transform();
    typedef struct MD5Context MD5_CTX;
    #endif
    #ifdef sgi
    #define HIGHFIRST
    #endif
    #ifdef sun
    #define HIGHFIRST
    #endif
    #ifndef HIGHFIRST
    #define byteReverse(buf, len)    /* Nothing */
    #else
    void byteReverse(buf, longs)unsigned char *buf; unsigned longs;
    {
        uint32 t;
        do {
        t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |((unsigned) buf[1] << 8 | buf[0]);

        *(uint32 *) buf = t;
        buf += 4;
        } while (--longs);
    }
    #endif
    void MD5Init(ctx)struct MD5Context *ctx;
    {
        ctx->buf[0] = 0x67452301;
        ctx->buf[1] = 0xefcdab89;
        ctx->buf[2] = 0x98badcfe;
        ctx->buf[3] = 0x10325476;
        ctx->bits[0] = 0;
        ctx->bits[1] = 0;
    }
    void MD5Update(ctx, buf, len) struct MD5Context *ctx; unsigned char *buf; unsigned len;
    {
        uint32 t;
        t = ctx->bits[0];
        if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
        ctx->bits[1]++;
        ctx->bits[1] += len >> 29;
        t = (t >> 3) & 0x3f;
        if (t) {
        unsigned char *p = (unsigned char *) ctx->in + t;
        t = 64 - t;
        if (len < t) {
            memcpy(p, buf, len);
            return;
        }
        memcpy(p, buf, t);
        byteReverse(ctx->in, 16);
        MD5Transform(ctx->buf, (uint32 *) ctx->in);
        buf += t;
        len -= t;
        }
        while (len >= 64) {
        memcpy(ctx->in, buf, 64);
        byteReverse(ctx->in, 16);
        MD5Transform(ctx->buf, (uint32 *) ctx->in);
        buf += 64;
        len -= 64;
        }
        memcpy(ctx->in, buf, len);
    }
    void MD5Final(digest, ctx)
        unsigned char digest[16]; struct MD5Context *ctx;
    {
        unsigned count;
        unsigned char *p;
        count = (ctx->bits[0] >> 3) & 0x3F;
        p = ctx->in + count;
        *p++ = 0x80;
        count = 64 - 1 - count;
        if (count < 8) {
        memset(p, 0, count);
        byteReverse(ctx->in, 16);
        MD5Transform(ctx->buf, (uint32 *) ctx->in);
        memset(ctx->in, 0, 56);
        } else {
        memset(p, 0, count - 8);
        }
        byteReverse(ctx->in, 14);
        ((uint32 *) ctx->in)[14] = ctx->bits[0];
        ((uint32 *) ctx->in)[15] = ctx->bits[1];
        MD5Transform(ctx->buf, (uint32 *) ctx->in);
        byteReverse((unsigned char *) ctx->buf, 4);
        memcpy(digest, ctx->buf, 16);
        memset(ctx, 0, sizeof(ctx));
    }
    #define F1(x, y, z) (z ^ (x & (y ^ z)))
    #define F2(x, y, z) F1(z, x, y)
    #define F3(x, y, z) (x ^ y ^ z)
    #define F4(x, y, z) (y ^ (x | ~z))
    #define MD5STEP(f, w, x, y, z, data, s) ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
    void MD5Transform(buf, in)
        uint32 buf[4]; uint32 in[16];
    {
        register uint32 a, b, c, d;
        a = buf[0];
        b = buf[1];
        c = buf[2];
        d = buf[3];
        MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
        MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
        MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
        MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
        MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
        MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
        MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
        MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
        MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
        MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
        MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
        MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
        MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
        MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
        MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
        MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
        MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
        MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
        MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
        MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
        MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
        MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
        MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
        MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
        MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
        MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
        MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
        MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
        MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
        MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
        MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
        MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
        MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
        MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
        MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
        MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
        MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
        MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
        MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
        MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
        MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
        MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
        MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
        MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
        MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
        MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
        MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
        MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
        MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
        MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
        MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
        MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
        MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
        MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
        MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
        MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
        MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
        MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
        MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
        MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
        MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
        MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
        MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
        MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
        buf[0] += a;
        buf[1] += b;
        buf[2] += c;
        buf[3] += d;
    }
    char* CMd5(const char* s)
    {
         struct MD5Context md5c;
         unsigned char ss[16];
         char subStr[3],resStr[33];
         int i;
         MD5Init( &md5c );
         MD5Update( &md5c, s, strlen(s) );
         MD5Final( ss, &md5c );
         strcpy(resStr,"");
         for( i=0; i<16; i++ )
         {
             sprintf(subStr, "%02x", ss[i] );
             itoa(ss[i],subStr,16);
             if (strlen(subStr)==1) {
                 strcat(resStr,"0");
             }
             strcat(resStr,subStr);
         }
         strcat(resStr,"\0");
         return resStr;
    }
    在Action测试调用一下
    Action:
    Action()
    {
       
        lr_output_message(CMd5("1234561"));

        return 0;
    }
  • EJB性能测试步骤整理

    2012-06-08 17:37:08

    1.       主要业务性能指标(从业务角度上分析,例如查询,修改,表单提交)

    2.       统计EJB访问量,根据28原则

    3.       性能负载级别,达到多少才算合理

    4.       系统稳定性

    5.       根据EJB实现对业务的分析

    6.       明确测试目的

    7.       测试用例整理

    8.       测试场景设置

    9.       测试指标及其标准

    10.   测试数据的准备

    11.   负载测试、稳定性测试

  • 处理引用了一个不可应用的位置

    2012-06-08 09:50:08

    在电脑中出现某文件夹引用了不可引用的位置,处理方法是直接将原文件夹删除,重现建一个同名的文件就可以处理此问题!
  • http协议

    2012-06-06 15:35:42

    HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:   
    OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。    
    HEAD
    向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。    
    GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。    
    POST
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。    
    PAT 向指定资源位置上传其最新内容。    
    DELETE
    请求服务器删除Request-URI所标识的资源。    
    TRACE 回显服务器收到的请求,主要用于测试或诊断。    
    CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • LoadRunner常见测试结果分析(转)

    2012-06-06 10:59:36

    在测试过程中,可能会出现以下常见的几种测试情况:

      一、当事务响应时间的曲线开始由缓慢上升,然后处于平衡,最后慢慢下降这种情形表明:

      * 从事务响应时间曲线图持续上升表明系统的处理能力在下降,事务的响应时间变长;

      * 持续平衡表明并发用户数达到一定数量,在多也可能接受不了,再有请求数,就等待;

      * 当事务的响应时间在下降,表明并发用户的数量在慢慢减少,事务的请求数也在减少。

      如果系统没有这种下降机制,响应时间越来越长,直到系统瘫痪。

      从以上的结果分析可发现是由以下的原因引起:

      1. 程序中用户数连接未做限制,导致请求数不断上升,响应时间不断变长;

      2. 内存泄露;

      二、CPU的使用率不断上升,内存的使用率也是不断上升,其他一切都很正常;

      表明系统中可能产生资源争用情况;

      引起原因:

      开发人员注意资源调配问题。

      三、 所有的事务响应时间、cpu等都很正常,业务出现失败情况;

      引起原因:

      数据库可能被锁,就是说,你在操作一张表或一条记录,别人就不能使用,即数据存在互斥性;

      当数据量大时,就会出现数据错乱情况。
  • loadrunner监控webservice方案

    2012-04-24 10:42:20

    1.直接选择webservice协议录制脚本
    2.选择manage services ,然后点import。
    3.在弹出的框中输入你要测试的webservice的URL
    例如:http://**/**/services/MbrPasswordService?wsdl这种样式的。点import,导入成功点OK结束
    4.然后点Add Services Call 在service下点import service,然后选择你的operation对象,选择portname,然后参数你的input arguments值,点OK直接可以
    生成webservice脚本了!
    (因为无法截图,悲剧大家有问题可以直接QQ我)
  • 性能测试监控EJB

    2012-04-24 10:38:04

    使用loadrunner监控EJB可以分为监控EJB客户端,或监控EJB服务端。
    监控EJB客户端直接在loadrunner中采用java vuser协议就可以,
    引入JVM,引入客户端jar,直接调用EJB客户端对外接口实现的方法就行。
  • 读取文件的一些函数C相关(美女妹妹收集)

    2012-04-20 17:02:29

    Fopen函数:

    在打开一个文件时,如果出错,fopen将返回一个空指针值NULL

    文件指针名=fopen(文件名,使用文件方式);

    其中:

    文件指针名必须是被说明为FILE 类型的指针变量;

    文件名是被打开文件的文件名;

    使用文件方式是指文件的类型和操作要求。

    文件名是字符串常量或字符串数组

    void *calloc(unsigned n,unsigned size)

    功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL

    malloc的区别:

    calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。

    feof(fp)有两个返回值:如果遇到文件结束,函数feoffp)的值为非零值,否则为0

    void *realloc(void *mem_address, unsigned int newsize);

    语法:指针名=(数据类型*realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小不然的话会导致数据丢失!

    fread

    功 能: 从一个流中读数据

    函数原型: size_t fread(void*buffer,size_tsize,size_tcount,FILE*stream); 

    参 数:

    1.用于接收数据的地址(指针)(buffer

    2.单个元素的大小(size) :单位是字节而不是位,例如读取一个int型数据就是4个字节

    3.元素个数(count

    4.提供数据的文件指针(stream

    返回值:读取的元素的个数

    fclose()

    功 能: 关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

  • Linux下查看CPU、内存、硬盘等信息(转帖)

    2012-04-20 16:25:42

    一、CPU大小
    [root@R4 ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id"
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    model name      : Intel(R) Xeon(R) CPU           X5450 @ 3.00GHz
    physical id     : 0
    physical id     : 1
    physical id     : 0
    physical id     : 1
    physical id     : 0
    physical id     : 1
    physical id     : 0
    physical id     : 1
    //
    两个4核的CPU
    //
    通过有几个不同的"physical id"来判定CPU个数

    二、内存大小
    [root@R4 ~]# cat /proc/meminfo |grep MemTotal
    MemTotal:     32941268 kB
    //32G
    内存

    三、硬盘占用情况
    [root@R4 ~]#
    df -h

    四、Swap空间
    [root@R4 ~]# grep SwapTotal /proc/meminfo
    SwapTotal:    10223608 kB

  • 系统性能调优

    2012-04-20 11:46:33

    1.硬件问题
    2.网络问题
    3.应用服务器、数据库等配置问题
    4.源代码、数据库脚本问题
    5.系统架构问题
    策略:按照上述由易到难的顺序对系统进行调优
  • 为什么要用多台虚拟机进行压力测试

    2012-04-20 11:26:03

    1.首先无论以线程方式还是以进程方式跑都会占服务器内存的,如果内存满了就很难达到性能测试的目的。
    2.有些会做IP限制,也许是客户端本身做了限制,有些是服务器端做了限制同一IP重复发多次请),这些地方要具体分析。
    3.其实多台虚拟的也能更好模拟真实用户环境不是。
  • 20-80原则

    2012-04-20 11:12:04

    根据20-80原则,通常系统用户经常使用的功能模块大概占用系统整个功能模块数目的20%
  • loadrunner监控EJB(1)

    2012-04-18 15:11:04

    1.直接使用loadrunner监控EJB说起来容易,其实实现起来还是很有点复杂。
    刚好这次公司有这个机会可以学习一下loadrunner监控EJB。看到网上写的方法千篇一律我都奇怪了,那么多人发的都是
    同样的话,同样的解决方案,连监控的EJB对象都是一样的。这是咋做的!悲剧中!
    2.没办法自己相办法吧!首先根据开发提供了一个方案,我这边写了一个工程,实现JSP+SEVERLET+JAVA来调EJB的客户端。写完后部署上去,发现可以实现。不失为一个好方法!但是对于不了解代码的人来说比较难了!
    3.后来老大要求loadrunner可以实现直接对EJB的监控!又是一个痛苦的历程啊,经过三天的努力终于实现!
    下面就把如何实现的过程分享一下:
    1.首先部署EJB监控器到服务器上,我使用的是单机环境(websphere+linux环境),在loadrunner里面找到ejbdetector.jar然后上传到服务器上,解压后配置环境变量(env.sh)(解压命令:jar -xvf jar包名称)
    环境变量配置如下:
    JAVA_HOME=/**/WebSphere/AppServer/java; export JAVA_HOME (java编译环境)
    DETECTOR_INS_DIR=/home/was1; export DETECTOR_INS_DIR(ejbdetector的安装路径)
    APP_SERVER_ROOT=/**/WebSphere/AppServer; export APP_SERVER_ROOT(was服务路径)
    EJB_DIR_LIST=/**/installedApps/wasdev-001Node01Cell(EJB应用安装路径)
    (忙了,先干活ing)


  • linux 常用命令及技巧(转帖)

    2012-04-18 09:52:26

    linux常用命令总结:

    . 通用命令:
      1. date
    print or set the system date and time 
      2. stty -a:
    可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z
      3. passwd: print or set the system date and time (
    passwd -h查看
      4. logout, login:
    登录shell的登录和注销命令 
      5. pwd: print or set the system date and time 
      6. more, less, head tail:
    显示或部分显示文件内容
      7. lp/lpstat/cancel, lpr/lpq/lprm:
    打印文件
      8.
    更改文件权限: chmod u+x... 
      9.
    删除非空目录:rm -fr dir 
      10.
    拷贝目录: cp -R dir 
      11. fg jobid :
    可以将一个后台进程放到前台。 
            Ctrl-z
    可以将前台进程挂起(suspend), 然后可以用bg jobid 让其到后台运行。
            job &
    可以直接让job直接在后台运行。
            12. kill
    的作用: send a signal to a process. eg: kill -9 发送的是SIG_KILL信号。。。 具体发送什么信号   可以通过 man kill 查看。
            13. ps
    的用法, ps -e ps -o pid,ppid,session,tpgid, comm (其中session显示的sessionid, tpgid显示前台进程组id, comm显示命令名称。)
    .ubuntu常用命令:
      1. dpkg: package manager for Debian
    *
    安装: dpkg -i package
    *
    卸载: dpkg -r package
    *
    卸载并删除配置文件: dpkg -P |--purge package
    *
    如果安装一个包时。说依赖某些库。 可以先 apt-get install somelib...
    *
    查看软件包安装内容 :dpkg -L package
    *
    查看文件由哪个软件包提供: dpkg -S filename
    *
    另外 dpkg还有 dselectaptitude 两个frontend.
            2. apt
    *
    安装: apt-get install packs
    * apt-get update :
    更新源
    * apt-get upgrade:
    升级系统。
    * apt-get dist-upgrade:
    智能升级。安装新软件包,删除废弃的软件包
    * apt-get -f install
    -f == --fix broken 修复依赖
    * apt-get autoremove:
    自动删除无用的软件
    * apt-get remove packages :
    删除软件
    * apt-get remove package --purge
    删除包并清除配置文件
    *
    清除所以删除包的残余配置文件: dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P
    *
    安装软件时候包的临时存放目录 : /var/cache/apt/archives
    *
    清除该目录: apt-get clean
    *
    清除该目录的旧版本的软件缓存: apt-get autoclean
    *
    查询软件some的依赖包: apt-cache depends some
    *
    查询软件some被哪些包依赖: apt-get rdepends some
    *
    搜索软件: apt-cache search name|regexp
    *
    查看软件包的作用:apt-cache show package
    *
    查看一个软件的编译依赖库: apt-cache showsrc packagename|grep Build-Depends
    * 下载
    软件的源代码 : apt-get source packagename (: sources.list 中应该有 deb-src )
    *
    安装软件包源码的同时, 安装其编译环境 :apt-get build-dep packagename (deb-src)
    *
    如何将本地光盘加入安装源列表: apt-cdrom add
            3.
    系统命令:
    *
    查看内核版本: uname -a
    *
    查看ubuntu 版本: cat /etc/issue
    *
    查看网卡状态 : ethtool eth0
    *
    查看内存,cpu的信息: cat /proc/meminfo ; cat /proc/cpuinfo
    (/proc
    下面的有很多系统信息)
    *
    打印文件系统空间使用情况: df -h
    *
    查看硬盘分区情况: fdisk -l
    *
    产看文件大小: du -h filename;
    *
    查看目录大小: du -hs dirname ; du -h dirname是查看目录下所有文件的大小
    *
    查看内存的使用: free -m|-g|-k
    *
    查看进程: ps -e ps -aux -->显示用户
    *
    杀掉进程: kill pid
    *
    强制杀掉: killall -9 processname 
            4.
    网络相关:  
    *
    配置 ADSL:   sudo pppoeconf
    * ADSL
    手工拨号: sudo pon dsl-provider
    *
    激活 ADSL :   sudo /etc/ppp/pppoe_on_boot
    *
    断开 ADSL:   sudo poff
    *
    根据IP查网卡地址: arping IP地址
    *
    产看本地网络信息(包括ip等): ifconfig | ifconfig eth0
    *
    查看路由信息: netstat -r
    *
    关闭网卡: sudo ifconfig eth0 down
    *
    启用网卡: sudo ifconfig eth0 up
    *
    添加一个服务: sudo update-rc.d 服务名 defaults 99
    *
    删除一个服务: sudo update-rc.d 服务名 remove
    *
    临时重启一个服务: /etc/init.d/服务名 restart
    *
    临时关闭一个服务: /etc/init.d/服务名 stop
    *
    临时启动一个服务: /etc/init.d/服务名 start
    *
    控制台下显示中文: sudo apt-get install zhcon
    *
    查找某个文件: whereis filename find 目录 -name 文件名
    *
    通过ssh传输文件
    scp -rp /path/filename username@remoteIP:/path #
    将本地文件拷贝到服务器上
    scp -rp username@remoteIP:/path/filename /path #
    将远程文件从服务器下载到本地 
            5.
    压缩:
    *
    解压缩 a.tar.gz:   tar zxvf a.tar.gz
    *
    解压缩 a.tar.bz2: tar jxvf a.tar.bz2
    *
    压缩aaa bbb目录为xxx.tar.gz: tar zcvf xxx.tar.gz aaa bbb
    *
    压缩aaa bbb目录为xxx.tar.bz2:   tar jcvf xxx.tar.bz2 aaa bbb
            6. Nautilus

    特殊 URI 地址
    * computer:/// -
    全部挂载的设备和网络
    * network:/// -
    浏览可用的网络
    * burn:/// -
    一个刻录 CDs/DVDs 的数据虚拟目录
    * smb:/// -
    可用的 windows/samba 网络资源
    * x-nautilus-desktop:/// -
    桌面项目和图标
    * file:/// -
    本地文件
    * trash:/// -
    本地回收站目录
    * ftp:// - FTP
    文件夹
    * ssh:// - SSH
    文件夹
    * fonts:/// -
    字体文件夹,可将字体文件拖到此处以完成安装
    * themes:/// -
    系统主题文件夹
    *
    显示隐藏文件: Ctrl+h
    *
    显示地址栏: Ctrl+l
    *
    查看已安装字体: nautilus的地址栏里输入”fonts:///“,就可以查看本机所有的fonts
            7.
    补充部分:
    *
    查看本地所有的tpc,udp监听端口: netstat -tupln (t=tcp, u=udp, p=program, l=listen, n=numric)
    *
    通过man搜说相关命令: man -k keyword . eg: man -k user
    *
    或者用 apropos
    *
    统计文件所占用的实际磁盘空间: du   (du - estimate file space usage)
    *
    统计文件中的字符,字节数: wc -c/-l/-w   (wc - print the number of newlines, words, and bytes in files)
    *
    查看文件的内容: od -x/-c/....   (od - dump files in octal and other formats)
       
    我认为od最有用的就是文件的字节流了: od -t x1 filename
       
    查看文件的 Ascii 码形式: od -t c filename (其中统计信息最左边的是: 字节数)
    *
    查找命令所在文件的位置: which od 输出: /usr/bin/od
       
    查看该文件由哪个包提供: dpkg -S /usr/bin/od   输出: coreutils: /usr/bin/od
       
    再查看coreutils包的全部内容就知道了linux的核心命令: dpkg -L coreutils
       
    然后 info coreutils    哈哈,认真学吧, 满世界都是命令!
    *
    可以用man 命令产看某个命令的所有section 的解释: man -a tty
       
    然后用q,next 转换到下一个section的解释
      * bash
    的好用的快捷键:
      ctrl+a:
    光标移到行首。
      ctrl+b:
    光标左移一个字母
      ctrl+c:
    杀死当前进程。
      ctrl+d:
    退出当前 Shell
      ctrl+e:
    光标移到行尾。
      ctrl+h:
    删除光标前一个字符,同 backspace 键相同。
      ctrl+k:
    清除光标后至行尾的内容。
      ctrl+l:
    清屏,相当于clear
      ctrl+r:
    搜索之前打过的命令。会有一个提示,根据你输入的关键字进行搜索bashhistory
      ctrl+u:
    清除光标前至行首间的所有内容。
      ctrl+w:
    移除光标前的一个单词
      ctrl+t:
    交换光标位置前的两个字符
      ctrl+y:
    粘贴或者恢复上次的删除
      ctrl+d:
    删除光标所在字母;注意和backspace以及ctrl+h的区别,这2个是删除光标前的字符
      ctrl+f:
    光标右移
      ctrl+z :
    把当前进程转到后台运行,使用’ fg ‘命令恢复。比如top -d1 然后ctrl+z ,到后台,然后fg,重新恢复
    *
    快速粘贴:先在一个地方选中文字,在欲粘贴的地方按鼠标 中键 即可。
    *
    等效中键:a 、按下滑轮等效于中键。b、同时按下鼠标 左右键,等效于中键。
    *
    快速重启X服务: 同时按下: Alt + Ctrl + Backspace 三个键。
    *
    打开"运行"窗口: 同时按下 Alt + F2 键。
    *
    戴屏: a、全屏:直接按下 PrtScr 键。
      b
    、当前窗口:同时按下 Alt + PrtScr 键。
      c
    、延时戴屏:在 终端 或 "运行"窗口中输入命令: gnome-screenshot --delay 3 ,将延时 3 秒后戴屏。
    *
    直接将 文件管理器 中的文件拖到 GNOME终端 中就可以在终端中得到完整的路径名。
            8.  ulimit 
            ulimit
    :显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。
            ulimited     
    不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files
           
    和可同时运行的最大进程数(max user processes)无效
    -a     
    列出所有当前资源极限
    -c     
    设置core文件的最大值.单位:blocks
    -d     
    设置一个进程的数据段的最大值.单位:kbytes
    -f      Shell
    创建文件的文件大小的最大值,单位:blocks
    -h     
    指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
    -l     
    可以锁住的物理内存的最大值
    -m     
    可以使用的常驻内存的最大值,单位:kbytes
    -n     
    每个进程可以同时打开的最大文件数
    -p     
    设置管道的最大值,单位为block1block=512bytes
    -s     
    指定堆栈的最大值:单位:kbytes
    -S     
    指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H -S 标志均未指定,极限适用于以上二者
    -t     
    指定每个进程所使用的秒数,单位:seconds
    -u     
    可以运行的最大并发进程数
    -v      Shell
    可使用的最大的虚拟内存,单位:kbytes
    eg: ulimit -c 1000(
    可以先通过ulimit -c 查看原来的值)

     

  • jboss安装与部署

    2012-04-17 10:49:47

    1.进入http://www.jboss.org/jbossas/downloads页面选择jboss下载,我选择的是7.1.1.Final,128M
    下载!
    2.解压到本地某个路径即安装成功。
    3.在系统变量里面加JBOSS_HOME变量,值为Jboss安装路径,如:D:\jboss
    4.在系统变量里找到Path变量,编辑添加;%JBOSS_HOME%\bin;
    5.验证jboss是否安装成功
    6.进入D:\jboss\bin找到run.bat运行,确认是否启动成功
  • loadrunner监控EJB

    2012-04-16 11:05:04

    关于EJB的监控直接使用loadrunner监控比较麻烦,我想了一个简单的办法来实现监控EJB,我写了一个JSP通过jsp页面来调后台的EJB,这样我们loadrunner直接录制http协议的脚本即可!
    (jsp-severlet-class实现调用EJB)
  • 为什么TCP/IP地址介于0-255之间的数字

    2012-04-11 22:39:50

    TCP/IP使用32bytes计算,一个计算机字节包含8个bytes,
    一个字节可以包含2的8次方,
    so TCP/IP地址介于0-255之间的数字就很容易理解了!
  • TCP/IP

    2012-04-11 22:28:03

    1、什么是 TCP/IP?
     1.TCP/IP 是供已连接因特网的计算机进行通信的通信协议。
     2.TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol)。
     3.TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。
    2、TCP/IP 中包含一系列用于处理数据通信的协议:
     1.TCP (传输控制协议) - 应用程序之间通信
     2.UDP (用户数据包协议) - 应用程序之间的简单通信
     3.IP (网际协议) - 计算机之间的通信
     4.ICMP (因特网消息控制协议) - 针对错误和状态
     5.DHCP (动态主机配置协议) - 针对动态寻址

271/212>
Open Toolbar