服务器CPU占用率 40%;
内存32G,已用24G;
问题现象:
服务器上部署的应用,访问都出现响应慢的现象,如web页面的加载需要几分钟,MySql查询:select * from table;,表1000行数据,需要10秒左右才加载出来。
问题排查:
刚开始觉得是服务器部署的应用过多,内存消耗太多导致的卡顿,于是把一些不需要的应用停掉,相关应用卸载掉,已用内存从24G下降到18G,服务器还是卡顿,没解决问题。
接下来对相关web应用进行优化,修改JVM相关参数如内存、GC回收算法,也没解决问题。
对于MySQL,对于空表进行查询都要3秒左右,这实在过不去,于是对MySQL进行优化,如在my.cnf中设置max_connections=1000,设置buffer_pool_size到2G,但也没法解决问题。
公司还有其他的阿里云服务器,内存使用达到了98%,但是里面的应用依然很快,响应慢的现象。
对于MySQL查询问题,采用Deaver客户端执行SQL就出现了慢的现象,我直接去阿里云服务器通过mysql -u user -pxxx命令登陆MySQL,在服务器上直接查询SQL,好家伙,1000行的数据直接0.1秒就得出结果,这不明摆着:问题不是出现在MySQL上,而是出现在网络上,带宽上,原来之前都一直排查错方向了。
于是登陆阿里云平台,监控带宽,服务器的带宽配置是1兆,但可怕的是,1兆带宽全部被吃光了,是什么进程一直在消耗带宽,导致其他所有应用都响应这么慢?
所以现在的问题就是:找到消耗带宽的进程,把它停掉,就解决了。
通过命令:
netstat -natp
查看进程的实时网络使用情况,重点关注Recv- Q,Send-Q两列,找到数值比较大的进程,就是消耗带宽最大的。
通过该命令,我发现了消耗带宽的两个进程,一个高达八万多,另一个七万多,把进程停掉之后,服务器响应慢的问题得到解决。