11.3 性能测试
因为要支持某个业务,有同事向我们提出需求,希望系统的某个接口能够支持2万的QPS,因为我们的应用部署在多台机器上,要支持两万的QPS,我们必须先要知道该接口在单机上能支持多少QPS,如果单机能支持1千QPS,我们需要20台机器才能支持2万的QPS。需要注意的是,要支持的2万的QPS必须是峰值,而不能是平均值,比如一天当中有23个小时QPS不足1万,只有一个小时的QPS达到了2万,我们的系统也要支持2万的QPS。
我们先进行性能测试。我们使用公司同事开发的性能测试工具进行测试,该工具的原理是,用户写一个Java程序向服务器端发起请求,这个工具会启动一个线程池来调度这些任务,可以配置同时启动多少个线程、发起请求次数和任务间隔时长。将这个程序部署在多台机器上执行,统计出QPS和响应时长。我们在10台机器上部署了这个测试程序,每台机器启动了100个线程进行测试,压测时长为半小时。注意不能压测线上机器,我们压测的是开发服务器。
测试开始后,首先登录到服务器里查看当前有多少台机器在压测服务器,因为程序的端口是12200,所以使用netstat命令查询有多少台机器连接到这个端口上。命令如下。
$ netstat -nat | grep 12200 –c 10
通过这个命令可以知道已经有10台机器在压测服务器。QPS达到了1400,程序开始报错获取不到数据库连接,因为我们的数据库端口是3306,用netstat命令查看已经使用了多少个数据库连接。命令如下。
$ netstat -nat | grep 3306 –c 12
增加数据库连接到20,QPS没上去,但是响应时长从平均1000毫秒下降到700毫秒,使用TOP命令观察CPU利用率,发现已经90%多了,于是升级CPU,将2核升级成4核,和线上的机器保持一致。再进行压测,CPU利用率下去了达到了75%,QPS上升到了1800。执行一段时间后响应时长稳定在200毫秒。
增加应用服务器里线程池的核心线程数和最大线程数到1024,通过ps命令查看下线程数是否增长了,执行的命令如下。
$ ps -eLf | grep java -c 1520
再次压测,QPS并没有明显的增长,单机QPS稳定在1800左右,响应时长稳定在200毫秒。
我在性能测试之前先优化了程序的SQL语句。使用了如下命令统计执行最慢的SQL,左边的是执行时长,单位是毫秒,右边的是执行的语句,可以看到系统执行最慢的SQL是queryNews和queryNewIds,优化到几十毫秒。
$ grep Y /home/admin/logs/xxx/monitor/dal-rw-monitor.log |awk -F',' '{print $7$5}' | sort -nr|head -20 1811 queryNews 1764 queryNews 1740 queryNews 1697 queryNews 679 queryNewIds
性能测试中使用的其他命令
1)查看网络流量。
$ cat /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo:242953548208 231437133 0 0 0 0 0 0 242953548208 231437133 0 0 0 0 0 0 eth0:153060432504 446365779 0 0 0 0 0 0 108596061848 479947142 0 0 0 0 0 0 bond0:153060432504 446365779 0 0 0 0 0 0 108596061848 479947142 0 0 0 0 0 0
2)查看系统平均负载。
$ cat /proc/loadavg 0.00 0.04 0.85 1/1266 22459
3)查看系统内存情况。
$ cat /proc/meminfo MemTotal: 4106756 kB MemFree: 71196 kB Buffers: 12832 kB Cached: 2603332 kB SwapCached: 4016 kB Active: 2303768 kB Inactive: 1507324 kB Active(anon): 996100 kB 部分省略
4)查看CPU的利用率。
cat /proc/stat cpu 167301886 6156 331902067 17552830039 8645275 13082 1044952 33931469 0 cpu0 45406479 1992 75489851 4410199442 7321828 12872 688837 5115394 0 cpu1 39821071 1247 132648851 4319596686 379255 67 132447 11365141 0 cpu2 40912727 1705 57947971 4418978718 389539 78 110994 8342835 0 cpu3 41161608 1211 65815393 4404055191 554651 63 112672 9108097 0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论