我的服务器 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
不要再盯着这个专栏了free
:Linux 占用了你的内存为了磁盘缓存(cached 11503
)。只要cached
为高且swap used
为低,就说明没有内存不足。
Tomcat 存在内存泄漏问题 - 通常不是来自其自己的代码库,而是来自编写不良的应用程序。这里不一定是这种情况。Tomcat 7 有内存泄漏保护你可以使用以下方法来进一步调查:
从 tomcat 6.0.25 开始,管理器 webapp 有一个新的“查找泄漏”按钮。触发后,它会显示已停止(包括未部署和重新部署的)但其类加载器无法进行 GC 处理的 webapp 列表(它们的上下文路径)。
如果泄漏的 webapp 被重新部署多次,它出现的次数就会与实际泄漏的次数一样多。
答案2
您的 Tomcat 使用了 22GB 内存,因为您的 -Xmx(JVM 堆大小)值非常大。
如果可能的话,您应该首先将该值降低到 2048、4096 或 8192,具体取决于您的应用程序内存要求,然后查看最佳点是多少。