java 修tomcat内存_java – Tomcat修复内存泄漏?

我正在使用6.0.20我在服务器上运行了许多Web应用程序,随着时间的推移,大约3天,服务器需要重新启动,否则服务器崩溃并变得无响应.

我有JVM的以下设置:

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20\logs

这为我提供了一个hprof文件,我使用Java VisualVM加载了该文件,该文件标识了以下内容:

byte[] 37,206 Instances | Size 86,508,978

int[] 540,909 Instances | Size 55,130,332

char[] 357,847 Instances | Size 41,690,928

列表继续,但我如何确定导致这些问题的原因?

我正在使用New Relic来监视JVM,似乎只出现了一个错误,但它是一个重复发生的错误,org.apache.catalina.connector. ClientAbortException.是否可能在用户会话中止时,创建的任何数据库连接或变量都没有被关闭,因此是孤立的?

在每个Web应用程序中都有一个非常重要的功能,不确定这是否与泄漏有关:

public static String replaceCharacters(String s)

{

s = s.replaceAll(" ", " ");

s = s.replaceAll(" ", "_");

s = s.replaceAll("\351", "e");

s = s.replaceAll("/", "");

s = s.replaceAll("--", "-");

s = s.replaceAll("&", "and");

s = s.replaceAll("&", "and");

s = s.replaceAll("__", "_");

s = s.replaceAll("\\(", "");

s = s.replaceAll("\\)", "");

s = s.replaceAll(",", "");

s = s.replaceAll(":", "");

s = s.replaceAll("\374", "u");

s = s.replaceAll("-", "_");

s = s.replaceAll("\\+", "and");

s = s.replaceAll("\"", "");

s = s.replaceAll("\\[", "");

s = s.replaceAll("\\]", "");

s = s.replaceAll("\\*", "");

return s;

}

是否有可能在用户连接中止时,例如用户浏览器关闭或用户已离开网站所有变量,连接等等被清除/释放,但GC不应该处理它?

以下是我的JVM设置:

-Dcatalina.base=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20

-Dcatalina.home=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20

-Djava.endorsed.dirs=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20\endorsed

-Djava.io.tmpdir=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20\temp

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

-Djava.util.logging.config.file=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20\conf\logging.properties

-Dfile.encoding=UTF-8

-Dsun.jnu.encoding=UTF-8

-javaagent:c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20\newrelic\newrelic.jar

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=c:\tomcat\Websites\private\mydomain\apache-tomcat-6.0.20\logs

-Dcom.sun.management.jmxremote.port=8086

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false vfprintf

-Xms1024m

-Xmx1536m

我错过了什么吗?服务器有3GB内存.

任何帮助将非常感激 :-)

解决方法:

… but how do I determine what is causing these issues?

您需要使用转储分析器,它允许您查看使这些对象可访问的内容.选择一个对象,并查看其他对象或对象引用它…然后通过链向后工作,直到找到“GC根”或您识别的某个特定于应用程序的类.

以下是分析内存快照和内存分析器的几个参考:

一旦确定了这一点,您就已经完成了识别存储泄漏源的大部分方法.

该功能与泄漏没有直接关系.它肯定不会导致它. (它可能会生成大量垃圾String对象……但这是一个不同的问题.)

标签:java,memory,memory-leaks,tomcat

来源: https://codeday.me/bug/20190624/1283131.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值