关于游戏服务器性能问题的几点思考(2)

工作中对项目压力测试的一些心得,先自我作一个小结吧!

(一)宏观与微观相结合
  (1)宏观层面
       即系统的一些关键性能指标,如:各进程所占CPU的百分比、内存消耗、网络包量、磁盘IO等等,详细指标列举如下:
名称 描述 参考值
CPU useage CPU 的使用时间百分比。 平均值小于70%
Process virtual memery size 进程使用的内存空间总量,包括物理内存和swap内存 进程长时间运行后该值不能大幅度的改变,否则是内存泄露
Disk rate 磁盘传输速率 一般少于2M/s, 日志级别太低时硬盘io会是瓶颈。
Bytes trans rate 网络发送速率 少于200Mbps
Bytes receive rate 网络接收速率 少于200Mbps
Pages swap in 每秒钟读入到物理内存中的页数 长期大于0表示物理内存不足
Pages swap out 每秒钟写入页面文件页数 参考上面
Context switches rate 每秒钟在进程或线程之间的切换率。 少于5000*cpu个数
Interrupt rate 每秒内的设备中断数。该指标代表了本地向CPU引起的本地中断,例如IO端口引起中断,系统时钟引起中断。 一个巨大的中断值,同时伴随着缓慢的系统性能表现,指示存在硬件问题。
    测试工具:nmon
  (2)微观层面
       这里是指具体到Server程序的逻辑功能模块,包括函数消耗CPU周期、函数调用次数等资源占用情况,以及系统内核哪一部分最忙等。
       测试工具:oprofile、gprof
 
(二)黑盒与白盒相结合
  (1)黑盒测试
       我们目前的压力测试程序,其实是归于黑盒测试范畴的,它模拟玩家的一些行为,应用具体项目的实际协议与被测游戏Server通讯,通过同时产生大规模机器人,来模拟与实际运营中相似的场景。这里编写的测试用例,其功能就是要尽可能真实地模拟client的功能,并能方便的配置化和部署client行为;
  (2)白盒测试
       我理解的白盒测试包括两部分,一是单元测试,它能有效地解决BUG回归测试的问题,二是代码覆盖率检查,它能有效检查到每个函数分支的执行情况。前者可借助业界成熟的自动化测试框架,如:cppunit、gtest;后者也有许多第三方工具,比较方便的有GNU自带的gcov,只要在编译程序时,加入-fprofile-arcs -ftest-coverage编译选项即可。
   如果要用一句话来概括两者的话,那就是:
  白盒测试能极大的保障程序逻辑功能层面的正确性(正常与异常流程均能检测到),而黑盒测试则能有效保障程序运行的稳定性。