本文为课堂总结,感谢老师讲解。
在做性能测试的过程中,总会遇到各种问题,有时会因某个疏忽对现象百思不得其解,现将常见问题和解决思路做个梳理,以便节省时间。
CPU不高,TPS不高
方向一:客户端的问题
客户端脚本的问题(ThinkTime不对),过小的请求发往服务端
客户端到服务端 网络原因,过小的数据发往服务端
方向二:每个事务的响应时间
单个事务的响应时间长,则在服务端找消耗时间长的原因。
单个事务的响应时间短--则是客户端发往服务端的负载不够,加大负载即可。CPU高,TPS不高
方向一:系统CPU消耗
系统CPU消耗高,则看IO,上下文切换
方向二:用户CPU消耗
用户CPU消耗高,则看应用哪个线程消耗CPU多。
方向三:已超过负载
此时 降低负载,测试看TPS是否有回升,如有回升,则表明之前确实是超负载啦。
top -Hp #查到消耗高线程ID
printf "%x" ID
jstack -l PID
jstack PID|grep -A 10 52f1 ##printf "%x" ID获取的16进制
如何找到IO高的文件
方向一:网络IO
五种IO模型:阻塞IO、非阻塞IO、IO复用、信号驱动IO、异步IO
方向二:磁盘IO
可用iotop查看磁盘io使用情况,哪个进程IO比例高,得到进程IO比例高的PID,lsof -p PID
查看该进程关联的文件,知道是哪个文件后,可以问研发是哪个什么操作这个文件,也可以自己去查代码,或者用jstack去查。如何判断内存不够
free -m #只要观察swap的使用是不是持续增长即可
swap 使用内存持续增长时--内存不够。
swap持续增长时,物理可用内存一般也不会遗留多少,
当应用一直在跑时,肯定会触发因系统内存不足自动杀死应用进程操作。
总结;所有的监控不是为了得到数据,而是为了知道什么地方产生了多少量的数据。