在Mac OSX 10.6.7上,'java'进程的线程和内存使用情况很多。

7
我正在使用java+gwt和NetBeans 6.9.1 + Glassfish 3.0.1开发网络应用程序。在开发几个小时后,我的系统性能会降低。因此,我总是检查Activity Monitor是否有一些进程正在占用所有的内存或cpu。我通常会注意到几个名为“java”的进程,它们会产生大约50-60个线程。只有在我结束它们之后,我的系统才能恢复正常。
我在开发过程中使用了NetBeans调试模式,但即使我停止调试模式,java进程仍然会降低系统性能,直到我结束它为止。我有时还会遇到“java.lang.OutOfMemoryError: Java heap space”错误,这种情况发生在我的NetBeans实例打开了几个小时(比如12-16小时)后(在Linux环境中也存在同样的问题)。在这种情况下,我需要关闭并重新打开NetBeans才能让它再次编译/工作。
有人遇到过相同的问题吗?或者知道如何避免这些问题吗? 您认为这个问题可能是由我正在开发的应用程序中的某种问题引起的,还是可能是Netbeans内存泄漏或错误引起的?

首先要做的事情是:找出大多数进程正在执行哪个Java应用程序(NetBeans,GlassFish等)。您可以在终端中使用“ps ax|grep java|sed G”来查找命令行(特别是查看每行的最后一个参数)。 - Chris Lercher
看起来父进程是NetBeans。顺便说一下,GlassFish 是由 NetBeans 自身启动的,所以我无法确定。我打算在启动 NetBeans 之前手动启动 GlassFish。 - Lorenzo Marcon
好的,手动启动Glassfish后,我立即得到一个具有50多个线程的Java进程,即使NetBeans已关闭。目前系统并不慢,但在使用Netbeans进行几个小时的开发后,性能仍会下降。 - Lorenzo Marcon
1
如果你每12-16个小时就会遇到OutOfMemoryError,那么恭喜你了,我每小时就会遇到一次。请参见https://dev59.com/uGsz5IYBdhLWcg3wn5Xa。 - ustun
1个回答

0

我们在使用Eclipse时也遇到了类似的问题。我们耐心尝试了以下步骤,并解决了一些问题。

编码实践

1)在服务器端代码中验证db/hibernate相关会话的打开和关闭,并清理掉数百个未关闭会话的不良实践(这甚至可以改善部署性能)

2)验证io相关的不良实践并进行清理(这甚至可以改善部署性能)

轻量级IDE

1)确保IDE只有您需要的插件。拥有多个根据任务定制的IDE安装程序是可以的。

例如 -

a)GWT Dev - 一个IDE实例只安装了GWT dev所需的插件

b)代码重构 - 一个IDE实例安装了findbugs、PMD、CodePro

注意:始终从IDE的最小设置开始(包括和不包括helloworld项目代码)。检查和检查某些插件在实例化或常规使用时是否泄漏内存

正如utsun所说 - 你很幸运,因为我们这些被困在原始硬件上的人经常遇到内存不足的问题。

我希望有其他人能分享一些收集或寻找IDE内存优化的技巧,而不是仅仅增加更多的硬件。例如 - 使用仅包含gwt / maven / svn绝对必要插件的eclipse或netbeans构建。把所有其他花哨的东西都扔掉。


这个问题有点过时了,但是这些看起来像是很好的建议,所以我会把你的答案标记为正确的。谢谢! - Lorenzo Marcon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接