可能重复:
限制 ubuntu 上的 jvm 进程内存
在我的应用程序中,我将文档上传到服务器,该服务器对其进行了一些分析。
今天我使用 jconsole.exe 和堆转储分析了我的应用程序,因为我试图找出我是否有内存问题/内存泄漏。我想我可能会遇到一个问题,因为在应用程序运行时我的应用程序在 RAM 上增长得非常快。
当我在一些运行后使用 jconsole 观察堆 / 代码缓存 / perm gen 等内存时,我很惊讶,因为我看到了以下内容:
图片链接:https ://www7.pic-upload.de/13.06.12/murk9qrka8al.png
正如您在右侧的 jconsole 中看到的那样,当我在做与分析相关的事情时,堆正在增加,但当工作结束时,它也会再次减小到正常大小。在左侧,您可以看到部署应用程序的服务器的“htop”。就是这样:虽然堆正常运行,而且垃圾收集器似乎也运行正常,但 RAM 是令人难以置信的高,几乎达到 3,2gb。
现在这真的让我很困惑。我在想我的 java vm 堆栈是否必须对此做些什么?我做了一些研究,我发现 vm 堆栈是一个只有几兆字节(甚至只有 kb)的小内存。
我的技术背景:
- 该应用程序在 glassfish v.3.1.2 上运行
- 数据库在 MySQL 上运行
- Hibernate 用作 ORM 框架
- Java版本是1.7.0_04
- 它是使用 VAADIN 实现的
- MySQL 数据库和 glassfish 是这台服务器上唯一运行的东西
- 我在分析期间使用 JAXB 构建 XML-DOM 样式的文档并将它们保存在数据库中
- 上传的文件是 .txt 或 .pdf 文件
- 操作系统是linux
解决方案?
你有什么想法为什么会发生这种情况以及我能做些什么来解决它?此刻我真的很惊讶,因为我认为内存问题来自导致堆爆炸的内存泄漏。但是现在,堆不是问题。当堆保持在同一级别时,RAM 会越来越高。而且我不知道该怎么做才能解决它。
感谢您与我分享的每一个想法。
编辑:也许我还应该指出,这种行为目前使我无法真正让其他人使用我的应用程序。当 RAM 已满且服务器不再响应时,我就退出了。
Edit2:也许我还应该补充一点,每次成功进行进一步分析后,这个 RAM 都会不断增加。