一、现象:
收到监控服务疯狂告警,发现线上服务 hang 死,但是进程还活着,接收任务的线程【NIO socket acceptor】死了,请求进不来,查看tcp连接状态,发现有很多 CLOSE_WAIT。
二、第一次分析
1.接到服务告警,第一反应是服务挂了,于是登录生产机器,ps -ef |grep pid ,惊人的发现进程还活着???
2.查看服务hang死前后的detail日志,发现确实还有日志在打印,但是只是一些内存监控的日志,没有生产的流量进来没有发现明显异常,一切都很平静,就那么静静的hang着。
3. 打印线程堆栈信息: jstack pid,发现 【NIO socket acceptor】线程居然死了
4.查看系统的句柄数,发现只有 8192,记得以前是 65535
5.查看占用的句柄已达近 6000,所以怀疑是句柄数不够导致部分应用假死
6.第一次出事故,为了让服务快速恢复运行,直接./stop.sh,./start.sh应用,重启之后服务正常恢复了
三、疑问?