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

我有一个CentOS虚拟化服务器,我刚安装了Jira 。 Jira运行时,我无法理解Sun JVM发生了什么。 Java的最大堆大小设置为384MB,但是Java实例占用了1GB以上。

我是linux服务器pipe理新手,但是我知道他们是JVM的额外开销,并且进程内存报告并不总是准确的(特别是对于线程,我相信Jira使用很多),但我认为free -m给出更准确的总内存使用情况。 比较有和没有Jira的系统内存告诉我它使用超过1GB。 我只有1GB的物理内存和768交换/虚拟。

当我使用vmstat它说我没有任何虚拟页面,但我可能应该是。 我担心,我只运行一个进程,我的服务器已经超出了。 我怎样才能确定我的系统是(或可能)由于资源使用而跪下?

谢谢。

好的 – 有几件事要记住。 首先,在现代Linux内核中,线程只是共享一些资源和标志的进程,最显着的是地址空间。 所以是的,像“顶”这样的输出中的线程可以使事情变得相当混乱。 例子:我们的Oracle服务器有大约30个运行的线程,简单地显示为'oracle' – 它们每个显示为消耗38GB的ram。 乍一看非常有趣。

好的 – 上面评论中的build议是现金。 使用'pmap'来查看完全不只是内存消耗的过程,但内存使用情况的细分。 共享库条目(.so)条目不用担心。 你真正关心的是[anon]条目和[stack]条目。 看看你能不能得到这些。 这会给你一个关于这个进程消耗了多less非共享内存的真实图像。