常见瓶颈点分析
性能瓶颈出现频次 |
具体表现 |
高 |
TPS波动较大 |
高 |
未到期望并发前出现大量报错 |
中 |
并发数不断增加,CPU耗用不高 |
一、TPS波动较大
1、原因解析:
出现TPS波动较大问题的原因一般有网络波动、其他服务资源竞争以及垃圾回收问题这三种。
2、排查方法:
2.1 压力测试环境一般都是在内网或局域网内进行,可通过监控网络的出入流量来排查;
2.2 其他服务资源竞争也可能造成这一问题,可以通过top命令或服务梳理方式来排查在压测时是否有其他服务运行;
2.3 垃圾回收问题相对来说是最常见的导致TPS波动的一种原因,可以通过GC监控命令来排查,命令如下:
#GC信息输出到文件jstat -gc PID 1000 120 >> /path/gc.txtjsatt -gcutil PID 1000 120 >> /path/gc.txt
二、未到期望并发前出现大量报错
1、原因解析:
出现该类问题,常见的原因有短连接导致的端口被完全占用以及线程池最大线程数配置较小或超时时间较短导致。
2、解决方案:
短连接问题:释放TIME_WAIT scoket用于新的连接;
线程池问题:修改服务节点中容器的server.xml文件中的配置参数,主要修改如下几个参数:
#最大线程数,即服务端可以同时响应处理的最大请求数:maxThreads="200"#Tomcat的最大连接线程数,即超过设定的阈值,Tomcat会关闭不再需要的socket线程:maxSpareThreads="200"#等待超时的阈值,单位为毫秒,设置为0时表示永不超时:connectionTimeout="20000"
三、并发数不断增加,CPU耗用不高
1、原因解析:
出现该类问题,常见的原因有:SQL没有创建索引/SQL语句筛选条件不明确、代码中设有同步锁,高并发时出现锁等待;
2、解决方案:
SQL问题:没有索引就创建索引,SQL语句筛选条件不明确就优化SQL和业务逻辑;
同步锁问题:是否去掉同步锁,有时候不仅仅是技术问题,还涉及到业务逻辑的各种判断,建议和开发产品同事沟通确认;