为什么 tomcat7 占用了这么多内存?

为什么 tomcat7 占用了这么多内存?

我的服务器 65GB 内存中只有 0.5GB 可用。

             total       used       free     shared    buffers     cached
Mem:         64375      63788        587          0         70      11503
-/+ buffers/cache:      52213      12161
Swap:        67583       6923      60660

Tomcat 使用大约 22GB 内存。

root     19915  2.9 36.4 42514364 24036804 ?   Sl   Jun21 433:25 /usr/jdk1.6.0_25/bin/java 
   -Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.11/conf/logging.properties 
   -server -Xms2048m -Xmx22528m -XX:MaxPermSize=2048m
   -XX:PermSize=512m -XX:MaxNewSize=512m -XX:NewSize=512m -Xnoclassgc
   -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
   -Djava.endorsed.dirs=/usr/local/apache-tomcat-7.0.11/endorsed 
   -classpath /usr/local/apache-tomcat-7.0.11/bin/bootstrap.jar:
              /usr/local/apache-tomcat-7.0.11/bin/tomcat-juli.jar
   -Dcatalina.base=/usr/local/apache-tomcat-7.0.11 
   -Dcatalina.home=/usr/local/apache-tomcat-7.0.11 
   -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.11/temp 
   org.apache.catalina.startup.Bootstrap start

其他应用程序正在使用少量内存。我不明白发生了什么。如果 tomcat 中存在内存泄漏,那么如何确认并修复它。

答案1

不要再盯着这个专栏了freeLinux 占用了你的内存为了磁盘缓存cached 11503)。只要cached为高且swap used为低,就说明没有内存不足。

Tomcat 存在内存泄漏问题 - 通常不是来自其自己的代码库,而是来自编写不良的应用程序。这里不一定是这种情况。Tomcat 7 有内存泄漏保护你可以使用以下方法来进一步调查:

从 tomcat 6.0.25 开始,管理器 webapp 有一个新的“查找泄漏”按钮。触发后,它会显示已停止(包括未部署和重新部署的)但其类加载器无法进行 GC 处理的 webapp 列表(它们的上下文路径)。

如果泄漏的 webapp 被重新部署多次,它出现的次数就会与实际泄漏的次数一样多。

答案2

您的 Tomcat 使用了 22GB 内存,因为您的 -Xmx(JVM 堆大小)值非常大。

如果可能的话,您应该首先将该值降低到 2048、4096 或 8192,具体取决于您的应用程序内存要求,然后查看最佳点是多少。

相关内容