Java根本原因Java.lang.OutOfMemoryError错误
我是Java新手,负责修复一个bug,问题如下。如果你能提出建议/想法,那就太好了。这个问题是什么?我该如何解决这个问题呢Java根本原因Java.lang.OutOfMemoryError错误,java,out-of-memory,Java,Out Of Memory,我是Java新手,负责修复一个bug,问题如下。如果你能提出建议/想法,那就太好了。这个问题是什么?我该如何解决这个问题呢 HTTP Status 500 - -------------------------------------------------------------------------------- type Exception report message description The server encountered an internal error
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
以下是Tomcat的家伙们要说的: 内存不足可能是由 有几个原因:
- 尝试加载多个 GB文件进入内存肯定会 杀死服务器。这类错误 在我们的系统中,必须将其视为一个简单的bug 节目
- 对数据进行补偿
您的servlet尝试加载,您需要
增加堆大小,以便
没有空间创建堆栈大小
对于需要修改的线程
创建。每个处理器所需的内存
线程将因操作系统而异,但可以如下所示
默认情况下高达2M,在某些操作系统中
(像Debian Sarge)是不可还原的
使用
参数。1规则 拇指,堆使用不超过1G 32位web应用程序中的空间-Xss
- 深度递归算法也可以
导致内存不足问题。在里面
在这种情况下,唯一的修复方法是
增加线程堆栈大小
(
),或者重构算法 以减少深度或本地数据 每次呼叫的大小-Xss
- 一个使用大量
对于具有许多依赖关系的库,
或者是一台维护大量数据的服务器
webapps可能会耗尽jvmpermgen
空间这个空间是虚拟机所在的位置
存储类和方法数据。
在这些情况下,解决办法是增加
这个尺寸。Sun VM具有该标志
允许设置其大小(默认值为64M)-XX:MaxPermSize
- 对类的硬引用可以防止
垃圾收集器从回收
当发生错误时为它们分配的内存
被丢弃。这将 在JSP重新编译时发生,并且 webapps重新加载。如果这些操作 在具有这些功能的Web应用程序中很常见 各种各样的问题,这将是一个问题 直到永磁空间 已满,将抛出内存不足ClassLoader
来源:仅根据stacktrace就很难确定此类问题。这至少可以归结为应用程序内存泄漏(代码在内存中保留了(不必要的)太多的对象(不必要的)很长时间),或者服务器没有足够的内存来运行你的webapp(仅仅是因为它的设计需要很多内存) 要检测和修复内存泄漏,请使用Java探查器。如果没有任何内存泄漏,即内存使用是稳定的,但代码确实需要那么多内存,那么只需给服务器更多的内存即可。不过,探查器在发现webapp中的内存漏洞并相应地优化代码方面仍然很有用
如果您使用的是Eclipse,请使用Netbeans,或者如果您使用的是Netbeans,请使用内置的。或者在使用独立的VisualVM时,检查如何使用它监视Tomcat。使用Java堆分析工具()和Eclipse MAT分析JVM内部的情况。什么是吃多少记忆。查看配置文件,然后查看导致该问题的代码 你也可以使用,它非常容易设置。你可以看到“活”的东西。TPTP也是一个很好的选择,不幸的是,我发现很难配置。。。到底是谁导致了内存不足错误
如果你吃了8片比萨饼,而你已经吃饱了,是不是最后一片比萨饼导致了胃痛?欢迎来到Stackoverflow!对于您没有注意到的情况,只要您在消息编辑器中,就可以在消息编辑器下方的预览区域中验证消息格式。请在将来对此多加注意:)我们需要查看根本原因的堆栈跟踪(来自tomcat日志),以便能够进行评论。请参阅:另请参阅:
深度递归算法也可能导致内存不足问题。在这种情况下,唯一的修复方法是增加线程堆栈大小(-Xss),或重构算法以减少深度,或每次调用的本地数据大小。
导致StackOverflow错误的两个都是VirtualMachineError,但都超出了点,使用直接缓冲区可能会导致OOM,同样好。@bestsss:orOutOfMemoryError
当堆栈尚未溢出时,但内存是由于每个递归步骤中的昂贵作业造成的。@BalusC,-请再次阅读:“-Xss”堆栈大小,是否需要使用堆?在这种情况下,任何减少深度的想法,任何建议都是完全不合适的。将递归转换为迭代将花费更多的堆!Tomcat Wiki完全错了。哈哈!我真的不能投票。但如果有一个“喜欢”按钮,我肯定会点击这个答案。