zoukankan      html  css  js  c++  java
  • 性能测试工具

    2015.8.7

    横向扩展能力
    数据库的优化
    尽量让一台机器能够承载更多的用户请求
     
    性能测试就是通过技术的手段模拟大量用户同时访问被测应用,观察记录和分析系统的各项性能指标的过程。
    性能测试的目标是评估系统的性能瓶颈,预测系统的最大用户负载能力
     
    模拟大量并发用户
    监控系统负载参数分析系统瓶颈
     
    平均响应时间(TTLB,time 头laster byte)
    合理的平均响应时间  2/5/10原则(最佳2秒,可以接受5秒,不能接受10秒)
    性能指标--系统资源类
     
    CPU的占用率(CPU)
    内存的占用率,换页数等(内存)
    读写请求数,读写量(I/O)
    进站出站带宽占用率(带宽)
     
    负载测试(Load Test)
        为了验证系统设计符合正常业务负载情况下系统性能的测试
    压力测试(Stress Test)
        为了验证系统在极端负载情况下的性能表现的测试
     
     
    sysstat(性能测试工具)
    使用putty进入命令行安装sysstat
        1.yum list sysstat查看是否安装(有installed或中文表示已安装)
        2.若没有安装输入 yum install sysstall.x86_64(这个是会在上个命令中显示的)
        3.在同第一步
    输入 cat /etc/cron.d/sysstat进入sysstat的配置文件,其中表示10分钟执行一次命令(正常开发的时候需要将其改为1分钟,方便测试)每10分钟获取一次系统性能信息,每天23.53分有个总结报告
    使用 cd /var/log/sa进入日志文件路径再输入 ls查看该目录文件便可看到日志文件
     
    sysstat常用命令之CPU监控
    CUP任务数
    命令为:sar -q -f sa07(这是日志文件) 
    runq-sz:Run queue length  等待执行的任务队列长度,越长阻塞越严重
    plist-sz:队列中的任务总数
    ldavg-1(5,15):一分钟,五分钟、15分钟内系统负载描述,值是通过执行中的任务和等待执行的任务的个数的平均值得到的。当该值很大的时候代表的是cpu负载很大。使用top查看cpu占用最高的
     
    CPU占用百分比
    命令为:sar -p -f sa07(这是日志文件) 
    PRI:进程优先权,代表这个进程可被执行的优先级,其值越小,优先级越高,越早被执行
    NI:进程NICE值,进程可被执行的优先级的修正值
    PRI(new)=PRI(old)+nice
    %nice:改过优先级的进程CPU占用率
    %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待CPU的百分比(等待CPU)该值越高代表CPU任务繁重程度越大
    %iowait:IO请求等待百分比,该值越大代表IO任务繁重,磁盘读写任务多
     
    sysstat常用命令之内存监控
    命令:sar -r -f sa07
    memfree:空闲内存
    memused:已经使用的内存(物理内存)
    buffers/cached:是为了提高文件读取的性能的磁盘缓存。
    page cache(kbcached):实际上是针对文件系统的,是文件的缓存
    Buffer cache(buffers):是针对磁盘块的缓存
    kbcommit:是为了保证程序的正常运行需要的内存
     
    内存换页(物理内存和硬盘的换入换出)
    命令:sar -B -f sa07
    pgpgin/s:换入每秒种从磁盘或swap置换到内存的字节数(KB)
    pgpgout/s:换出表示每秒从内存置换到磁盘或swap的字节数(KB)(这两个参数很重要,一定程度上表现了内存的压力)
    fault/s:每秒系统产生的缺页数,即主缺页和小缺页之和(缺页就是某些数据放在了磁盘上,而需要取该数据需要从内存当中去,导致了缺页)
     
    命令:sar -W -f sa07
    pswpin/s:换入每秒种swap换入的字节数(KB)
    pswpout/s:换出表示每秒swap换出的字节数(KB)(这两个参数很重要,一定程度上表现了内存的压力)
     
    sysstat常用命令之IO监控
     
    命令:sar -b -f sa07
    tps:每秒物理设备的I/O请求次数
    rtps:每秒钟从物理设备读入的请求次数
    wtps:每秒钟想物理设备写入的请求次数
    breas/s:每秒向物理设备读入的数据量,单位为块/s
    bwrtn/s:每秒想物理设备写入的数据量,单位为块/s
     
    命令:sar -b -f sa07
    tps:每秒物理设备的I/O请求次数
    rd_sec每秒读取扇区的次数
    wr_sec每秒写扇区的次数
    avgrq-sz:平均每次设备I/O操作的数据大小
    avgqu-sz:磁盘请求队列的平均长度
    await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间单位为毫秒
    svctm:系统处理每次请求的平均时间不包括请求队列中的消耗时间
    %util:I/O请求占CPU的百分比,比率越大说明越饱和
     
    sysstat常用命令之NetWork监控
     
    DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关,他们可以单独或者一起使用
    命令:sar -n DEV -f sa07
    rxpck/s:每秒钟接收的数据包
    txpck/s:每秒钟发送的数据包
    rxbyt/s:每秒钟接收的字节数
    txbyt/s:每秒钟发送的字节数
    rxcmp/s:每秒钟接收的压缩数据包
    txcmp/s:每秒钟发送的压缩数据包
    rxmcst/s:每秒钟接收的多播数据包
     
    评估磁盘读写性能极限
    fio工具
    在centos 中安装好fio
    输入命令 
    fio -filename=/test -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=30  -group_reporting -name=mytest

    说明:
    filename=/dev/sdb1       测试文件名称,通常选择需要测试的盘的data目录。
    direct=1                 测试过程绕过机器自带的buffer。使测试结果更真实。
    rw=randwrite             测试随机写的I/O
    rw=randrw                测试随机写和读的I/O
    bs=16k                   单次io的块文件大小为16k
    bsrange=512-2048         同上,提定数据块的大小范围
    size=5g    本次的测试文件大小为5g,以每次4k的io进行测试。
    numjobs=30               本次的测试线程为30.
    runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
    ioengine=psync           io引擎使用pync方式
    rwmixwrite=30            在混合读写的模式下,写占30%
    group_reporting          关于显示结果的,汇总每个进程的信息。

    此外
    lockmem=1g               只使用1g内存进行测试。
    zero_buffers             用0初始化系统buffer。
    nrfiles=8                每个进程生成文件的数量。

    可得出该设备能承受的IO
    IO能力强的才适合作为数据库服务器
     
     
    2015.8.10
    JMeter性能测试工具
     
    Apache组织开发的性能测试工具
    可以对:
        web-http,https
        SOAP(webservice)
        FTP
        LDAP
        TCP
        NOSQL等等都可以做测试
     
    winSCP:上传文件到服务器的软件
     
    另外需要在服务器端安装php+apache环境:http://www.jb51.net/os/188488.html
    安装 nginx  http://www.centoscn.com/CentosServer/www/2014/0904/3673.html
    phpMyAdmin配置安装
     
    yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
    yum install phpmyadmin
    systemctl restart httpd.service #重启apache
    systemctl restart mariadb.service #重启MariaDB
     
    最后修改conf.d中的phpMyAdmin.conf文件即可
    使用putty连接上centos7服务器(需要知道centos7的ip。获取方法,ip addr)
    连接上之后输入用户名密码进入命令行输入top得到系统进程当前状态等
    使用putty获取进程的资源占用信息(top命令以及其附加命令)
     
    退出 vi 输入:wq回车
    使用ECShop进行测试
    ECShop安装运用
    使用winscp将ECShop上传到服务器,再用putty,使用unzip解压压缩包,

    docs:安装的解释说明
    upgrade:更新
    upload:最新安装
    将upload拷贝到根目录的ecshop中
     
    若出现在虚拟机上能访问,宿机上不能访问的情况,请设置修改防火墙
    命令:vi /etc/sysconfig/iptables
    重启防火墙:systemctl restart iptables.service
    ,并且将该文件夹的权限改给apache
    命令:chown -R apache:apache mycms(项目目录)
    2015.8.11
    JMeter进行压力测试
    Apache 组织开发的性能测试工具,用于模拟大量用户的并发访问,最大的有点是完全开源
    jmeter需要安装了java jdk
    新增用户组(thread group)
     
    自动化测试
    录制-->回放
    录制:
    只有添加可config element 中的HTTP Request Defaults才能添加sampler 中的HTTP Request等
    1.在test plan 中添加用户组
    2.在用户组添加config element中的HTTP Request Defaluts
    3.在用户组下添加logic controller 中的recording controller
    4.在workbench中添加HTTP(s)Test Script Recorder并配置好用户组(listener 中的view Results Tree是加在此处)
    5.添加代理服务器,(在Internet选项中,连接,局域网设置)
    这个端口是在HTTP(s)Test Script Recorder中设置的端口
     
    回放:
    将需要回放的php保存起来,其他的删掉,添加一个listener中的,aggregate report和vieew results tree
    点击start启动回放
     
    任务:
    2015.8.12
    自定义参数回放:
    添加固定变量如:ip port等
    1.添加config 中的UserDefined variables
    2.在UserDefined variables添加参数
    3.在各个链接中修改其参数配置${参数name}
    添加参数组,如id(可实现进入不同id的页面)
    1.添加config中的CSV data set config
    2.在bin目录下新建一个data目录在其中新建个catgd.csv的文件
    3.在其中写入参数(设置编码为UTF-8 without ROM(在notepad中))
    4.在CSV data set config 中配置 
    5.同样在每个页面中将参数参数化(${参数name})
     
    使用postProcessor判断响应中的关键数据是否正常显示页面
    1.找到页面关键元素(能标识该该页面正常打开的元素)
    2.在页面下添加css/jquery Extractor,在其中配置
    3.在页面下添加BeanShell Assertion 配置
    便会在命令行中打印取到的值(打印是为了调试)
     
    jmeter模拟用户的等待行为
    在用户组下添加timer(放在需要等待的页面下面)
    constant timeer 固定等待时间
    gaussian random timer 满足高斯曲线的等待时间
    poisson random timer 满足泊松分布的等待时间
    开始测试:使用putty top检测服务器性能
    设置好并发用户数和请求次数start使用二分法便可知道该服务器能承受的并发量,并查看知道性能瓶颈(CPU占用率)
     
    监控Mysql慢查询
     
    若出现数据表数据内存不够的情况,使用phpMyadmin对该表进行操作,修改存储引擎为innoDB
    慢查询解决方案:
    加缓存
    使用putty,输入vi /etc/myconf进行修改my.conf文件,加入:
    log-queries-not-using-indexes=on#将未使用索引的记录下来
    long_query_time=0.03
    log-slow-queries=/var/log/mariadb/mariadb.queries-slow.log#对应文件夹
    保存重启mysql服务 systemctl restart mariadb.service
    若无/var/log/mariadb/mariadb.queries-slow.log该文件则新建,并设置好该文件权限
     
    检查该log文件便可知道慢查询的语句,可以针对优化
     
    2015.8.13
    使用systat分析系统硬件性能瓶颈
    使用systat教程在上面
     
    jmeter进阶,使用session支持
    打开jmeter,打开之前保存的文件
    1.添加config 中的HTTP cookies Manager 
    假如第一个是登录操作,
    2.在用户组中添加一个logic controller中的loop controller,将登录后的操作页面加入该controller中,
    原理是登录操作只执行一次(在用户组中的loop count设置为1),将loop controller中的loop count设置为forever
     
    多用户组实现多场景测试
    添加一个thread 中的thread group并设置好其中的设置(如场景1,不过其进行的操作应该不同)便可分派不同的用户个数来进行不同的操作。可以进行用户总数的参数化(也可以直接填入各个场景的用户个数)
        在test plan下添加config 下的user defined variable(也可以在Test plan下直接添加参数),添加参数,然后在每个场景中使用该参数(场景中运用方法:${__javaScript("${User_Total}" * 0.5)}
     
    Jmeter扩展
     
    通过BeabShell进行java扩展
    1.准备好实现特殊功能的java包(com.jmooc.jar文件)
    2.在jmeter的根目录中添加dependencies文件夹(和bin目录同级)
    3.在bin中找到jmeter.properties打开
    4.搜索 plugin_dependency_paths,修改为plugin_dependency_paths=../dependencies;
    5.重启jmeter.bat
    6.在用户组中添加BeanShell Sampler 在Script中(调用扩展函数)写入:
     
     
    import com.imooc.Math;
    String ret =Math.sqrt("2.3");
    log.info("Get THE RESULT:"+RET);
    (可以在Options中选择显示log窗口)
     
    通过BSF进行JavaScript扩展
    添加一个BSF sampler或是BSF postProcessor
    直接在script中写入JavaScript代码即可
    开发自定义的Sampler、configElment
     
    性能监控软件Nmon介绍
    一个类似TOP但是显示功能更加丰富的工具
    安装:yum list nmon检查机器是否安装,未安装的,使用# yum install nmon.x86_64
    安装
    使用:使用putty输入 nmon
    可安装红框中的提示输入字符以显示相关信息

     



  • 相关阅读:
    【快速选择算法与nth_element函数】【续UVA11300 】
    【贪心+中位数】【UVa 11300】 分金币
    【贪心】【Uva11729】 Commando War
    np.random.randn()、np.random.rand()、np.random.randint()
    numpy.unpackbits()
    tf.get_variable()
    tf.truncated_normal()
    tf.FIFOQueue()
    np.hsplit()
    np.frombuffer()
  • 原文地址:https://www.cnblogs.com/kinmos/p/6829828.html
Copyright © 2011-2022 走看看