Java在Linux上的内存使用情况。
Java在Linux上的内存使用情况。
我运行了一些Java应用服务器,它们都在CentOS 5.5 Linux上运行最新版本的Tomcat 6和Sun的Java 6。每个服务器运行多个Tomcat实例。
我设置了-Xmx450m -XX:MaxPermSize=192m参数来控制堆和永久代的大小。这些设置适用于所有Java应用服务器上的所有Tomcat实例,总共约70个Tomcat实例。
以下是Psi-probe报告的其中一个Tomcat实例的典型内存使用情况:
Eden = 13M Survivor = 1.5M Perm Gen = 122M Code Cache = 19M Old Gen = 390M Total = 537M
然而,CentOS报告这个特定进程的RAM使用量为707M(根据RSS),留下了170M的RAM没有解释。
我知道JVM本身和一些它依赖的库必须加载到内存中,因此我决定启动pmap -d来查找它们的内存占用。
根据我的计算,这占用了大约17M的内存。
接下来是Java线程堆栈,对于32位的Linux JVM,每个线程的大小为320k。再次使用Psi-probe计算该特定JVM上的线程数量,总共有129个线程。因此,129 + 320k = 42M。
我已经阅读过NIO在堆之外使用内存,但我们的应用程序中没有使用NIO。
所以我已经计算了所有我能想到的东西。我只能解释那170M中的60M。
我漏掉了什么?
admin 更改状态以发布 2023年5月22日