我正在运行一大堆Java应用程序服务器,它们都在CentOS 5.5 Linux之上运行最新版本的Tomcat 6和Sun的Java 6.每个服务器都运行多个Tomcat实例.
我正在设置-Xmx450m -XX:MaxPermSize = 192m参数来控制堆和permgen的增长量.这些设置适用于所有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位JVM for Linux上每个线程为320k.同样,我使用Psi-probe来计算特定JVM上的线程数,总计为129个线程.所以129 + 320k = 42M
我已经读过NIO使用堆外的内存,但我们不在我们的应用程序中使用NIO.
所以在这里,我已经计算了(我的)头脑中的一切.我只占了"失踪"170M的60M.
我错过了什么?