【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】 【领域:测试分析,自动化测试,性能测试,安全测试 】 【个人定位:高级测试工程师+培训师+领域产品专家】

进程级性能测试监控函数更新simon_common

上一篇 / 下一篇  2009-09-02 01:50:22 / 个人分类:bash

发帖纪念一下,加班到了现在凌晨1点半。
为了改善一个性能测试监控的函数。
之前通过单纯的客户端直接发送数据到服务器进行绘图。
实际中遇到了一些问题。

1、客户端存在兼容性的问题。需要使用公司形形色色的服务器。
2、监控的数据越多,会影响服务器的自身资源。

后来进行了几种方法的尝试。

1、通过google form把数据发送到google,让google去绘图。
2、通过svn更新,传递到直接的绘图服务器上,然后通过绘图服务器上自己的客户端去分析数据,这样被监控的服务器只需要定期发送数据即可。节省了很多的资源。

第一种方法也不错,但是google api需要啃下,短期内还不能形成好的可行的方案。
第二种也有困难,公司的权限设置太严格,svn服务器在不同的机器上,有无法访问的风险。
只好采用了第三种,直接通过nc发送数据到绘图的服务器,或者scp,rsync等。
采用scp可能会影响到一点io,不过限于公司特殊的条件,也只有这个可以搞了。

经过屡次的修改与完善,终于搞定了。


实现了如下的功能


[huangysh@qa16 ~]$ man simon_common
=========================
:<<simon_common_help
simon_top_common methods_monitor process_name_or_pids [CPU MEM]
simon_top_common top simond   #通过top收集特定关键词的进程信息,会进行求和统计。监控指标包括cpu,mem,rss,virt,shr
simon_top_common ps sql  #通过ps去获得进程信息,可监控的指标包括cpu,mem,res,vsz,chtcount(进程的线程数)
simon_top_common pid "3681,3787"  #通过pid去监控,这种比较节省资源。
simon_top_common sql_pid "3681,3787"  #可以更改标示,用于区别不同的监控。但是标示的结尾一定要是ps,top,pid三种方式。
simon_common_help


[huangysh@qa16 ~]$ man simon_common
=========================
:<<simon_common_help
simon_top_common methods_monitor process_name_or_pids [CPU MEM]
simon_top_common top simond
simon_top_common ps sql
simon_top_common pid "3681,3787"
simon_top_common sql_pid "3681,3787"
simon_common_help
=========================

========source code=========
simon_common is a function
simon_common ()
{
    [[ $# -eq 0 ]] && echo "${function_name} java" && return;
    function_name="$1";
    process=$2;
    metrics=${*:3};
    if [[ ${*:$#} = "stop" ]]; then
         >~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp.stop;
        echo ${function_name} would stop in 10s;
        gexec se1.asc.cnz.alimama.com "simon_file /home/$USER/QA/tmp/${function_name}_${process%%,*}_$USER.tmp $metrics stop";
        return;
    fi;
    case $function_name in
        *top)
            pids_get="top -b -n1 -p \`ps -o uname,pid,ppid,command -e|grep $process|grep -v 'grep $process'|awk '{print \$2}'|xargs|tr ' ' ',' \`|grep $process|awk '{print \$9,\$10,\$6,\$5,\$7}'|awk '{c+=\$1;m+=\$2;r+=\$3;v+=\$4;t+=\$5}END{print c,m,r,v,t}'";
            set ${metrics:="CPU MEM RES VIRT SHR"};
            print "the process is";
            pf $process
        ;;
        *pid)
            pids_get="top -b -n1 -p$process|sed 1,7d|awk '{print \$9,\$10,\$6,\$5,\$7}'|awk '{c+=\$1;m+=\$2;r+=\$3;v+=\$4;t+=\$5}END{print c,m,r,v,t}'";
            set ${metrics:="CPU MEM RES VIRT SHR"};
            print "the process is";
            top -b -n1 -p$process
        ;;
        *ps)
            pids_get="ps -eo uname,pid,ppid,thcount,pcpu,pmem,rss,vsz,sz,command|grep $process|grep -Ev '(grep $process|simon_file)'|awk '{print \$5,\$6,\$7,\$8,\$4}'|awk '{c+=\$1;m+=\$2;r+=\$3;v+=\$4;t+=\$5}END{print c,m,r,v,t}'";
            set ${metrics:="CPU MEM RSS VSZ THCOUNT"};
            print "the process is";
            pf $process
        ;;
    esac;
    echo $pids_get;
    [[ -f ~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp.stop ]] && rm -rf ~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp.stop ~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp;
    while [[ ! -f ~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp.stop ]]; do
        eval $pids_get;
        gsyn se1.asc.cnz.xxxx.com ~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp >&/dev/null;
        sleep ${simon_ps_interval:=10};
    done >>~/QA/tmp/${function_name}_${process%%,*}_$USER.tmp & echo sleep 10s for init;
    sleep 10;
    gexecbg se1.asc.cnz.xxxx.com "simon_file /home/$USER/QA/tmp/${function_name}_${process%%,*}_$USER.tmp $metrics";
    print OK
}
============================



TAG:

 

评分:0

我来说两句

Open Toolbar