了解 Java 的内存使用情况(JIRA/Tomcat)

了解 Java 的内存使用情况(JIRA/Tomcat)

我有一台 CentOS 虚拟化服务器,我刚刚安装了吉拉。每当 Jira 运行时,我都无法理解 Sun JVM 发生了什么。Java 的最大堆大小设置为 384MB,但 Java 实例占用了超过 1GB 的空间。

我是 Linux 服务器管理的新手,但我知道 JVM 会增加额外开销,而且进程内存报告并不总是准确的(尤其是线程,我认为 Jira 大量使用线程),但我认为它能free -m更准确地反映总内存使用情况。比较有和没有 Jira 的系统内存,我发现它使用了超过 1GB。我只有 1GB 的物理内存和 768 个虚拟交换空间。

当我使用时,vmstat它说我没有任何虚拟页面,但可能应该有。我担心我只运行一个进程,而我的服务器已经达到极限。我如何确定我的系统是否(或可能)因资源使用而崩溃?

谢谢。

答案1

好的 - 有几件事需要记住。首先,在现代 Linux 内核中,线程只是共享一些资源和标志(最值得注意的是地址空间)的进程。所以是的,像“top”这样的输出中的线程可能会让事情变得相当混乱。示例:我们的 Oracle 服务器有大约 30 个线程正在运行,只是显示为“oracle” - 它们每个都显示为消耗 38 GB 的内存。乍一看相当有趣。

好的 - 上面评论中的建议非常准确。使用“pmap”不仅可以准确查看进程的内存消耗,还可以查看内存使用情况的明细。共享库条目 (.so) 条目无需担心。您真正关心的是 [ anon ] 条目和 [ stack ] 条目。看看您是否可以得到这些条目的总数。这将让您真实地了解进程消耗了多少非共享内存。

相关内容