好吧,我有一个内存泄漏。它最有可能出现在图形用户界面或ExecutorCompletionService中。监控程序内存的选项有哪些?
是的,我出现内存不足错误。我在eclipse中的vm参数上设置了-XX:+HeapDumpOnOutOfMemoryError,以生成转储文件。情况是有一个运行计算密集型任务的线程池的ExecutorCompletionService。线程向GUI线程发信号通知中间结果。
我正在审查ExecutionController类的单元测试,我想知道是否可以将内存监控集成到单元测试中。
关于分析选项,我上个月成功地完成了这一点,但我不记得使用的过程或pro填充器。我打开了一个单独的窗口,并从外部运行的监视器监控实时快照。我依稀记得在识别发生内存泄漏的确切类成员时遇到了一些困难,但提供了足够的信息来解决前面的问题。
我将在不久的将来尝试建议的监控选项。
发布于 2013-04-08 09:56:03
从JDK6开始,\bin目录中包含了一个名为jvisualvm的分析工具。您可以扫描CPU使用情况,监视内存和线程等。
你可以阅读更多关于它的here。
发布于 2013-04-08 10:00:49
内存泄漏可能是由于超出了JVM的堆栈或堆大小。识别内存泄漏的第一步是确认是否存在内存泄漏。请尝试使用JVM命令行选项增加堆和堆栈空间。-xmx和-xss分别是增加堆和堆栈大小的选项。
一旦确认,有多种工具可以帮助缩小范围,以确定泄漏的代码块。我最喜欢的做法是在发生内存不足异常时对正在运行的线程进行转储,假设发生了内存溢出异常,然后检查转储。有关更多详细信息,请尝试java -Xrunhprof:help。我使用内存分析器( Memory Analyzer,MAT),一个eclipse插件来分析转储。
此外,Java Memory Extensions还提供了有关如何内省正在运行的JVM的线程、堆和堆栈大小的详细信息。如果您使用的是JDK1.6或更高版本,那么它附带了visual vm,这也是一个帮助实现此目的的分析工具。
https://stackoverflow.com/questions/15870087
复制相似问题