我是Java的新手并负责修复错误,问题如下。如果您提出建议/想法是什么问题以及如何解决这个问题,那将是非常好的。:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:453)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
root cause
javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.CustMaint.Jsp.ProfProfileDetails_jsp._jspService(ProfProfileDetails_jsp.java:4016)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
root cause
java.lang.OutOfMemoryError
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.17
答案 0 :(得分:7)
以下是Tomcat人员所说的话:
可以抛出内存不足 几个原因:
试图加载几个的servlet GBytes文件肯定会进入内存 杀死服务器。这些错误 必须被视为我们的一个简单的错误 程序
补偿数据 你的servlet试图加载你 增加堆大小以便那里 没有空间来创建堆栈大小 对于需要的线程 创建。每个人需要的内存 线程因操作系统而异,但可以是 默认情况下在某些操作系统中高达2M (像Debian Sarge一样)不可简化 使用
-Xss
参数。 1规则 Thumb,堆使用不超过1G 32位Web应用程序中的空间。深度递归算法也可以 导致内存不足的问题。在 这种情况下,唯一的修复方法是 增加线程堆栈大小 (
-Xss
),或重构算法 减少深度,或本地数据 每次通话的大小。使用批量的网络应用程序 有许多依赖的库, 或维护很多的服务器 webapps可能会耗尽JVM PermGen 空间。这个空间是VM的所在 存储类和方法数据。 在这些情况下,修复是增加 这个大小。 Sun VM有旗帜
-XX:MaxPermSize
允许设置其大小(默认值为64M)对类的硬引用可以阻止 回收垃圾收集器 a时为他们分配的内存
ClassLoader
被丢弃。这将 发生在JSP重新编译上,和 webapps重新加载。如果这些操作 在具有这些的webapp中很常见 各种问题,这将是一个问题 时间,直到PermGen空间得到 完全和内存不足。
答案 1 :(得分:2)
嗯......谁真的造成内存不足错误?
如果你吃了8片披萨并且你已经吃饱了,那么它是导致胃出错的最后一片吗?
答案 2 :(得分:0)
基于堆栈跟踪,这种问题并不容易确定。它至少归结为你的应用程序中存在内存泄漏(代码在(不必要地)内存中保留(不必要的)太多对象,或者服务器根本没有足够的内存为了能够运行你的webapp(只是因为它的设计方式需要很多内存)。
要检测并修复内存泄漏,请使用Java分析器。如果您没有任何内存泄漏,即内存使用情况稳定但代码确实需要那么多内存,那么只需给服务器更多内存即可使用。但是,分析器仍然可用于发现webapp中的内存漏洞并相应地优化代码。
如果您正在使用Eclipse,请使用TPTP profiler,或者如果您使用的是Netbeans,请使用内置VisualVM profiler。或者当您使用独立的VisualVM时,请检查this blog如何使用它监视Tomcat。
答案 3 :(得分:0)
将Java堆分析工具(JHAT)与Eclipse MAT http://www.eclipse.org/mat/一起使用来分析JVM内部的情况。什么是吃多少记忆。查看配置文件,然后查看导致该配置文件的代码。
您也可以使用JConsole,设置它很容易。你可以看到“活着”的东西。 TPTP也是一个不错的选择,不幸的是,我觉得很难配置。