Java Out of Memory Error

         运维打电话说生产的一个服务进程挂了,他先重启下。 运维监控显示Jvm的堆内存占用一直很高,大于90%。 检查了下jvm 内存确实分配的有问题,比正常需要的要小。查看进程的erro日志, “ Out of Memory Error ” 赫然在目, 遂调整了堆内存分配,重启了事。

        a few days later ....

        运维来电话。。你这个服务进程又挂了……

        观察了运维监控日志, 堆内存使用正常。查看下进程的error 日志。 仍然是 “ Out of Memory Error ”。这说明不是堆内存不足了,那可能是栈内存。 仔细的定眼一看,

        

pool -5374  .线程池,已经开到5374 了。后面的thread 排到6. 那起码已经有了30000+的线程数了。 这肯定线程池的使用有问题, 泄露了没有释放。把栈内存用光了。

 全工程搜了下  Threadpool 果然方法中new threadpool  ,运行后没有shutdown的。 根本问题解决。

1. out of memory 不只是堆内存不足, 虽然比较常见。

2. ThreadPool 使用要谨慎, 使用不当属于大杀器。 局部使用要记得shutdown。

newFixedThreadPool

The threads in the pool will exist
until it is explicitly {@link ExecutorService#shutdown shutdown}.

    

猜你喜欢

转载自blog.csdn.net/qq_25148525/article/details/127108184