页面树结构
转至元数据结尾
转至元数据起始

(本文档仅供参考)

背景

目前使用系统的过程中,出现OOM后,会有可能导致系统不能正常使用,为进一步分析,进行测试验证后,情况如下:

1、通过压力测试工具或模拟页面进行测试;
2、在达到内存最大值后,就出现大量的线程抛出OutOfMemoryError的情况;
3、在停止测试后,经过长时间等待后,服务器处于一个半恢复、半宕机的状态。

分析

经分析研究:
1、服务器上会出现大量的ESTABLISHED状态的HTTP连接,并且不能正常释放;

2、从Tomcat的线程中跟踪看,正常情况下处理读取客户端网络请求的线程为ClientPoller-0 ClientPoller-1;
3、但是最终发现ClientPoller-0线程已经不存在;
4、从日志上看,目前发现应当是在压力太大后导致一些必要的线程被迫也退出了,从而导致Tomcat不能完全正常。

结论

此问题主要是无法从程序上控制哪些线程不要抛出OOM,它是由JVM控制的。

所以在个别线程OOM时,由于此线程退出后JVM可以快速恢复,这样是不会影响其它线程,也就不会影响Tomcat的运行;

但是大量线程OOM时,JVM会在各个线程上都有可能抛出OOM,从而导致一些必备的线程退出,引起宕机现象等。

  • 无标签