我的应用抛出这样的错误:
08:41:33,749 XX DEBUG BeGenFilter:112 - doFilter(ServletRequest, ServletResponse, FilterChain) - 结束
08:42:04,778 XX DEBUG BeGenFilter:112 - doFilter(ServletRequest, ServletResponse, FilterChain) - 结束
08:42:52,895 XX WARN JDBCExceptionReporter:71 - SQL Error: 17002, SQLState: null
09:03:46,449 XX ERROR JDBCExceptionReporter:72 - Io exception: Connection reset
09:03:46,450 XX WARN JDBCExceptionReporter:71 - SQL Error: 17002, SQLState: null
09:03:46,450 XX ERROR JDBCExceptionReporter:72 - Io exception: Connection reset
09:03:46,445 XX WARN HtmlImageRendererBase:82 - ALT attribute is missing for : searchImgId
08:48:43,249 XXX ERROR ExtensionsFilter:274 - Exception wile retrieving addResource
java.lang.OutOfMemoryError: Java heap space
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getMethod0(Class.java:2670)
at java.lang.Class.getMethod(Class.java:1603)
at org.apache.commons.logging.LogFactory.directGetContextClassLoader(LogFactory.java:896)
at org.apache.commons.logging.LogFactory$1.run(LogFactory.java:862)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.commons.logging.LogFactory.getContextClassLoaderInternal(LogFactory.java:859)
at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:423)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
at org.apache.myfaces.renderkit.html.util.NonBufferingAddResource.<init>(NonBufferingAddResource.java:53)
at org.apache.myfaces.renderkit.html.util.DefaultAddResource.<init>(DefaultAddResource.java:98)
at org.apache.myfaces.renderkit.html.util.AddResourceFactory.getInstance(AddResourceFactory.java:255)
at org.apache.myfaces.renderkit.html.util.AddResourceFactory.getInstance(AddResourceFactory.java:304)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cn.com.brilliance.begen.webapp.servlet.BeGenFilter.doFilter(BeGenFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
09:03:49,976 XXX ERROR _ErrorPageWriter:485 - An exception occurred
javax.faces.FacesException: error while processing state :
rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7k
M5YnxBzKWwCAAB4cAAAAAN0AAhfaWQxMjUwNXB0ACwvd
F9yaXNrY2FzZS90X3Jpc2tjYXNlX2Zvcm1fbWFrZWluZ19MaXN0LmpzcA==
我知道这是java heap溢出,想查明原因,但是定位不到问题出在哪?我看日志很奇怪,日志的打印时间开始都是好的,然后在08:42:52突然断掉,然后是09:03:46的日志,然后出现08:48:43的日志,很少出现日志断掉的情况,此时系统肯定是有用户在操作的,但是日志断掉,而且在08:48:43,249的出错日志我看到
at org.apache.commons.logging.LogFactory.directGetContextClassLoader(LogFactory.java:896)
at org.apache.commons.logging.LogFactory$1.run(LogFactory.java:862),不知道是否是log4j写日志时,无法写到文件中,然后缓存在内存里面,一直到内存爆掉,不知道是否有可能是这种原因还是会由其他原因引起的?谢谢大家!
08:41:33,749 XX DEBUG BeGenFilter:112 - doFilter(ServletRequest, ServletResponse, FilterChain) - 结束
08:42:04,778 XX DEBUG BeGenFilter:112 - doFilter(ServletRequest, ServletResponse, FilterChain) - 结束
08:42:52,895 XX WARN JDBCExceptionReporter:71 - SQL Error: 17002, SQLState: null
09:03:46,449 XX ERROR JDBCExceptionReporter:72 - Io exception: Connection reset
09:03:46,450 XX WARN JDBCExceptionReporter:71 - SQL Error: 17002, SQLState: null
09:03:46,450 XX ERROR JDBCExceptionReporter:72 - Io exception: Connection reset
09:03:46,445 XX WARN HtmlImageRendererBase:82 - ALT attribute is missing for : searchImgId
08:48:43,249 XXX ERROR ExtensionsFilter:274 - Exception wile retrieving addResource
java.lang.OutOfMemoryError: Java heap space
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getMethod0(Class.java:2670)
at java.lang.Class.getMethod(Class.java:1603)
at org.apache.commons.logging.LogFactory.directGetContextClassLoader(LogFactory.java:896)
at org.apache.commons.logging.LogFactory$1.run(LogFactory.java:862)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.commons.logging.LogFactory.getContextClassLoaderInternal(LogFactory.java:859)
at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:423)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
at org.apache.myfaces.renderkit.html.util.NonBufferingAddResource.<init>(NonBufferingAddResource.java:53)
at org.apache.myfaces.renderkit.html.util.DefaultAddResource.<init>(DefaultAddResource.java:98)
at org.apache.myfaces.renderkit.html.util.AddResourceFactory.getInstance(AddResourceFactory.java:255)
at org.apache.myfaces.renderkit.html.util.AddResourceFactory.getInstance(AddResourceFactory.java:304)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cn.com.brilliance.begen.webapp.servlet.BeGenFilter.doFilter(BeGenFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
09:03:49,976 XXX ERROR _ErrorPageWriter:485 - An exception occurred
javax.faces.FacesException: error while processing state :
rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7k
M5YnxBzKWwCAAB4cAAAAAN0AAhfaWQxMjUwNXB0ACwvd
F9yaXNrY2FzZS90X3Jpc2tjYXNlX2Zvcm1fbWFrZWluZ19MaXN0LmpzcA==
我知道这是java heap溢出,想查明原因,但是定位不到问题出在哪?我看日志很奇怪,日志的打印时间开始都是好的,然后在08:42:52突然断掉,然后是09:03:46的日志,然后出现08:48:43的日志,很少出现日志断掉的情况,此时系统肯定是有用户在操作的,但是日志断掉,而且在08:48:43,249的出错日志我看到
at org.apache.commons.logging.LogFactory.directGetContextClassLoader(LogFactory.java:896)
at org.apache.commons.logging.LogFactory$1.run(LogFactory.java:862),不知道是否是log4j写日志时,无法写到文件中,然后缓存在内存里面,一直到内存爆掉,不知道是否有可能是这种原因还是会由其他原因引起的?谢谢大家!
你这个错误时内存溢出,增大内存例如-Xms128m、-Xmx512m,另外检查程序是否有内存泄露。
看下自己程序写的 还有 IDE的内存也是个问题
有时候处理的数据量太大 内存缓存不够就爆了
另外 看下什么地方有内存泄露没
有一个工具可以检查变量所消耗的内存,具体名称不记得了
Class Name | Shallow Heap | Retained Heap | Percentage
-------------------------------------------------------------------------------------------------------------------------
java.lang.Thread @ 0x64c8f990 http-8080-11 Thread | 104 | 932,431,224 | 90.90%
|- org.hibernate.engine.StatefulPersistenceContext @ 0x689f7d18 | 80 | 756,171,360 | 73.72%
| |- org.hibernate.util.IdentityMap @ 0x68b28418 | 24 | 725,413,096 | 70.72%
| | |- org.apache.commons.collections.SequencedHashMap @ 0x68b28430 | 24 | 725,413,056 | 70.72%
| | | |- java.util.HashMap @ 0x68b9e888 | 40 | 14,155,320 | 1.38%
| | | |- org.apache.commons.collections.SequencedHashMap$Entry @ 0x890e18d8| 24 | 2,400 | 0.00%
-------------------------------------------------------------------------------------------------------------------------
看到Thread下面StatefulPersistenceContext(hibernate的session的移机缓存)占据大量内存,但是返回日志去看没有看到大数据量的数据库操作,而且从数据库AWR上也没有看到大IO的操作,不知道我这样看有没有问题?