曾经使用JAVA开发大型系统的网友恐怕都有过这种体会:系统运行一段时间后就抛出out of memory 异常,然后是艰难的内存泄漏问题排查。在一个大型的JAVA系统中,内存泄露问题是最难查找和解决的问题之一。因为从异常信息无从得知到底是系统中那一部份出现了内存泄漏,只有通过对代码进行走查,使用jprofiler等调试工具察看运行时内存分配情况等手段进行分析和查找。通过这种方法解决内存泄漏问题往往需要耗费大量的人力,而且并不能保证能够找到所有导致内存泄漏的代码。
上周运维反馈线上程序出现了OOM,程序日志中的输出为
Exception in thread http-nio-8080-exec-1027 java.lang.OutOfMemoryError: Java heap space
Exception in thread http-nio-8080-exec-1031 java.lang.OutOfMemoryError: Java heap space
看线程名称应该是tomcat的nio工作线程,线程在处理程序的时候因为无法在堆中分配更多内存