这几天自己线上的乞丐服务器遇到一个问题,io会瞬间飙升到很高很高,造成内存使用飙升。但是实际上并发量并不大(网络连接数)。知道是哪个进程造成的,但是确实排查代码中没有是么地方会有这么大的读写。实在想不通。
部署的是一个socket服务。用测试脚本跑,同时100个socket连接毫无压力。也不知道对方到底发的什么数据导致这么大的内存占用。
之前也处理过类似的问题。麻烦之处在于很好的定位问题,重现实际的操作。没办法,只能针对socket服务特定的端口进行抓包。希望能够通过数据包复现这种情况。
服务器问题,无非就是资源不合理的使用,造成服务器内存,cpu,io,流量等相关资源出现非常不正常的波动,资源使用率飙升。对于服务器性能问题的排查,没有其他比较好的办法,只能是通过重现复盘去改进。特别是如果服务器上跑的东西比较多,一个个的排查相当痛苦。
出现问题,首先看日志。如果是线上的,先想办法恢复服务再排查。
看看登录日志,访问日志是否有异常,确定是否有人扫机器。
看性能监控图表,分析机器的状况,以及问题发生的规律。
看是否有服务被系统kill。一般系统日志都会记录kill之前的进程列表,可以很好的分析哪些进程资源占用多。
如果还是没找到原因,那就只能抓网络数据。通过记录的网络数据在测试环境中复现线上问题。