我们在tomcat服务器上部署了一个Web应用程序.我们运行了某些预定的作业,之后堆内存达到峰值并且稳定下来,一切似乎都很好.然而,系统管理员抱怨内存使用情况(Linux上的"top")不断增加预定作业的数量.什么是堆内存和CPU内存之间的相互关系?可以通过任何JVM设置进行控制吗?我使用JConsole来监控系统.
我通过JConsole强制进行垃圾收集,并且堆使用率下降,但是Linux上的内存使用量仍然很高,并且从未降低.
任何想法或建议会有很大帮助吗?
我们有一个常量类,它在枚举类中有一个jsps/servlet列表.该类用于从控制器servlet充当重定向.这个特殊的类总是在内存分析器中显示为泄漏可疑.
我在这里粘贴来自控制器servlet的代码:
protected void forwardPage(Page jspPage, boolean checkTrail, HttpServletRequest request, HttpServletResponse response) {
String temp;
String str = new String();
str = jspPage.name();
Page page1 = Page.valueOf(Page.class,str);
try {
temp = page1.getFileName();
getServletContext().getRequestDispatcher(temp).forward(request, response);
} catch (Exception se) {
} finally {
page1 = null;
jspPage = null;
str = null;
temp = null;
}
Run Code Online (Sandbox Code Playgroud)
Page本身是一个枚举类,其代码如下所示.
UPDATE_PROFILE_CONFIRM("/ WEB-INF/jsp/login/updateProfileConfirm.jsp","确认您的个人资料")public String getTitle(){
return this.title;
}
public String getFileName() {
return this.fileName;
}
public void setFileName(String newFileName) {
this.fileName = newFileName;
}
Run Code Online (Sandbox Code Playgroud)
我无法理解的是为什么这堂课应该泄漏?一旦我删除了Page的引用并直接重定向,问题似乎就消失了.没有框架,简单的servlet-jsp框架.应用程序服务器是Tomcat …