[英]about out of memory Exception
我已将线程池用于新IO服务器设计。 我已经使用newFixedThreadPool作为执行程序工厂创建线程池的方法。 当我执行服务器20到30分钟时,服务器抛出异常。 如何处理此异常。
java.lang.OutOfMemoryError: Java heap space
显然您正在使用过多的内存,因此现在您需要找出原因。 没有源代码,很难说出问题出在哪里,但是即使有了源代码,当程序开始变得复杂时,也会有问题。
我发现有帮助的是获取内存转储,并在诸如Memory Analyzer(MAT)之类的工具中查看它们。 它甚至可以比较几个转储,以查看分配了哪种对象。 当您知道哪些对象不存在时,可以使用该工具查看其具有的根源(哪些对象对其具有引用)。
要从正在运行的Java程序中获取内存转储,请使用jmap -dump:format = b,file = heap.bin,并在程序获取OutOfMemoryError时自动获取内存转储,并且可以使用java -XX:+ HeapDumpOnOutOfMemoryError失败运行它。 java程序
您可以确定尝试增加“堆大小”,然后检查是否遇到问题。
但是,我希望您尝试对应用程序进行性能分析,以找出为什么您的堆大小以及消耗内存的位置。 您几乎可以尝试使用探查器作为开放源代码。
通常,其java -Xms5m -Xmx15m MyApp -Xms设置初始Java堆大小-Xmx设置最大Java堆大小
并在eclipse下在Java下运行配置为VM参数-Xms128m
-Xmx512m
-XX:permSize = 128M
-XX:MaxPermSize = 384M
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.