记录一次游戏服务器无响应的事件
服务器的类型是 游戏服务器, 使用TCP连接来提供服务。
服务器的现象是:
- 使用客户端进行发包的时候: socket 能建立链接, 也能发送消息过去, 但是收不到响应, 同时没有超时处理。
- 查看了一下 jstack: 没有线程被卡住不动。
- 查看了一下 堆内存: 老生代占用率99.2% 新生代40% 看起来有点问题, 但是不大。
重启之后 服务恢复了正常, 通过对比发现是 OrderedThreadPoolExecutor 所应对的线程池消失不见了。
- 参考源码: OrderedThreadPoolExecutor.java
- 这个是mina 调度io event 需要的线程池。
- 笔者猜测:当这个线程池消失了, 我们自己的Handler 代码就不会被调用, 所以就无法处理客户端传来的消息。
- 至于这个线程池为什么会挂掉, 笔者倒没有查出原因。