1. 首先需要确定压测的基础环境,主要有服务器、网络、磁盘。
服务器CPU主频和缓存大小对于程序执行的快慢有较大影响,一般而言,IO密集型操作缓存的影响更大,CPU密集型操作主频影响更大;服务器CPU核数对多线程程序影响较大,对于高级语言而言,由于可以获取CPU核数,这块不用特殊配置。但对于部分语言如plsql,则确定CPU的核数从而确定执行线程非常重要。由于目前接触到的程序对于占用内存都比较重视,目前没有发现内存对性能影响较大的情况;
网络主要确定带宽,跨网段(机房)需要确定各个链路上网络设备(如火墙)的承载能力;
磁盘可以使用IOPS作为评价标准,机械硬盘,固态硬盘,共享存储,分布式存储,不同存储方案的带宽差别非常大。
确定网络和磁盘的能力,可以通过在不同机器之间拷贝文件的方式来大致确定带宽。
2. 压测监控(linux系统)
一般而言,需要监控的内容主要是CPU、内存、IO,因此常用的命令是top,iostat, vmstat
a. 其中top命令可以关注CPU,内存情况,注意总体CPU使用率较低,不代表应用进程CPU不繁忙,还需要看具体某一个进程CPU执行的情况。
内存占用可通过如下方式判断:
Mem: 3925908k total, 3787840k used, 138068k free, 12716k buffers
Swap: 4063224k total, 2030264k used, 2032960k free, 596756k cached
内存有问题的情况:free + buffers + cached 综合比较小或者swap free很少。
b iostat命令判断IO的占用情况,如iostat -x -m 5,命令介绍的文章很多;
c vmstat命令可以判断是否有进程阻塞,这对于多线程程序执行情况的判断非常有参考意义;