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