现象:
之前工作中遇到一个场景:对一个通过端口监听的方式接收设备日志入库的功能进行长时间日志接收测试(200条/s)的时候,总是会在不停接收日志一天左右的时间后,突然暴毙,必须要通过重启服务器的方式才能够恢复。
定位过程:
一开始的反应是内存OOM了,但是日志上没有任何有效的错误的信息记录。并且之后通过jconsole监控的方式发现内存占用等一直是保持在一个正常的区间(过程中没有内存泄漏的情况)。
最后通过对tomcat的日志分析中发现了端倪。在查看tomcat的catalina日志以及localhost日志的时候,发现其记录了一个比较明显的错误信息——Too many open files
赶紧面向百度编程了一下后发现,这个问题是因为Linux系统句柄数耗尽引起的
查询资料后发现,正常程序的运行中,http请求建立连接的过程中会占用系统的句柄数,
但是会随着连接的关闭而释放