我们数据产品团队一直对外提供数据服务接口,涉及到的外部应用也比较多,所以性能也是我们比较关注的。从去年开始一直进行的对外接口统一的改造中,我们都是一步一步在推进。
今天,该产品增加缓存机制,主要是用淘宝的开源KV结构数据引擎tair,这里我不详细介绍tair,主要说说性能测试的步骤。
1. 了解线上压力情况
列出有各种性能要求的功能,如有并发要求的功能及相应的并发要求、有响应时间要求的功能。数据库容量,或指定时间的业务处理量。
如,我们的需求主要用于为**页面提供数据,目前每天的PV大概是1000W,数据量大概为1000W条记录,期望的响应时间20ms左右。网站业务方的运营目标是提高一倍的PV量,根据这个指标进行一定的优化,看性能能否满足。
2. 计算出施压量
一般拿到上面的压力值,就可以计算出需要的TPS、并发数(一般区分稳定和高峰两个场景)。
按80/20原则进行进行峰值,80%的流量集中在20%的时间段。
推出稳定场景数值:
Tps = (PV数*0.8/3600*24*0.2)/进程数=9300/6 = 1600(1543)
Tps = (1000/平均响应时间)*并发用户数 => 并发数= tps*平均响应时间 / 1000 = 20(12.8)
推出峰值数值:
tps=1小时pv数/3600/机器数 = 2400(2314)
并发数 = 60(19.2)
3. 准备机器
一个应用服务器:通过以下命令查看机器配置:cat /proc/cpuinfo;cat /proc/version;df -h;free -m
一个施压机,也就是jmeter执行机(公司一般都用这个)。
最后还有就是数据库或者Cobar数据源。准备好性能数据。
4. 服务器环境
服务器上的java、jetty版本和设置与线上保持一致。我们没法保证线上机器与线下机器一致,但是尽量将可以一致的东西保持一致。这个估计也是现在很多公司做性能测试无法避免的问题,线上线下环境差异比较大。
5. 部署应用环境
修改antx,将涉及的应用ip都改成性能机ip,数据库也改成性能库,还有缓存,而后部署。
尤其是需要注意dubbo注册到性能注册中心,而不是功能注册中心。
6. 准备脚本并在本地调试通过
分为一般的http请求如jason格式的,页面录制方式的,Java接口方式的 。 ( 备注:一般需要1小时高峰场景,8小时稳定场景!)
jmeter是一个比较好用的工具,推荐大家都多了解下。jmeter还可以用来做功能测试,对http接口支持的非常好,之前在做接口测试eclipse插件的时候发现的。
7. 部署脚本到执行机
大力神平台实际上也是在执行机执行jmeter的测试计划。
所以,一般可以copy到jmeter包到执行机,然后通过执行命令: JMeter -n –t ****.jmx
8. 执行,过程监控
1. 直接运行命令:$vajra/vajraJmeter/vajra-jakarta-jmeter/bin/jmeter -n -t unReadMsgCounthigh.jmx -l unReadMsgCounthigh.jtl > unReadMsgCounthigh.log &
2. 也可通过jvisualvm、jconsole监控,在自己的机器控制台里运行jvisualvm ,进行jmx监控
3. netstat -na |grep 10.20.141.18
jstat -gcutil 18607 1000 1000
9. 性能报告
发送一份详细的报告很有必要,报告必须要有以下几点,这里不细说了:
1. 概述,场景设计,数据准备
2. 监控的性能指标
3. 结论
4. 硬件情况
10. 附录
加jconsole和vmvisual监控
# Add jmx parameters
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=10.20.159.81 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
10.20.159.81 是性能机的ip
JAVA的内存使用等可以用下面来设置:
JAVA_OPTS=" -server -Xms512m -Xmx512m -XX:PermSize=128m "
原文转自:http://www.wangyuxiong.com/archives/51935