线上linux服务器,每隔几天就出现一次每次出现的地方不一样
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.eclipse.jdt.internal.compiler.parser.Parser.newMessageSend(Parser.java:10793)
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeMethodInvocationName(Parser.java:5258)
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:6955)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11019)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11267)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11224)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:9645)
at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:719)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:384)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:429)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:466)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1302)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:977)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:168)
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:233)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.eclipse.jdt.internal.compiler.parser.Parser.newMessageSend(Parser.java:10793)
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeMethodInvocationName(Parser.java:5258)
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:6955)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11019)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11267)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11224)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:9645)
at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:719)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:384)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:429)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:466)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

解决方案 »

  1.   

     a.如果tomcat是以bat方式启动的,则如下设置:
        修改TOMCAT_HOME/bin/catalina.sh
        在“echo "Using CATALINA_BASE:    $CATALINA_BASE"”上面加入以下行:
        JAVA_OPTS="-server -Xms800m -Xmx800m    -XX:MaxNewSize=256m"
        b.如果tomcat是注册成了windows服务,以services方式启动的,则需要修改注册表中的相应键值。
                打开注册表,找到目录HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java,其中目录地址中红色标注的(如htfty)需要根据不同情况作修改,为tomcat服务注册成windows服务的名称。 可以看到JvmMs和JvmMx项,其中JvmMs设置最小的内存使用参数,JvmMx设置最大的内存使用参数。设置好JvmMs和JvmMx项的值,重启tomcat服务器即可生效。
      

  2.   

    tomcat里有设置内存,问题你的服务器上内存有多少。
      

  3.   

    先检查tomcat的内存设置,如果内存设置没有问题,则需要检查你的代码是否有死循环之类的问题了
      

  4.   

    永久代溢出解决参考http://blog.csdn.net/fengyie007/article/details/1780375/
    有兴趣可以浏览哈博文,http://blog.csdn.net/sun1021873926
      

  5.   

    永久代溢出解决参考http://blog.csdn.net/fengyie007/article/details/1780375/
    有兴趣可以浏览哈博文,http://blog.csdn.net/sun1021873926
      

  6.   

    持久代Outofmemory可以优化下内存
      

  7.   

    增加Tomcat内存不是根本办法,建议使用jstack抓下进程以及线程的内存占用情况
    然后分析下。
      

  8.   

    把permsize调大吧,jsp多的应用是会这样
      

  9.   

    我的经验是有可能部署过的项目有点多,把不用的先去webapp那删掉,如果不行那就是配置文件有配置的内存上限具体我也不记得了
      

  10.   

    我本地是没问题的,现在问题是在服务器上会出现这个情况 。阿里云的服务器, ubuntu14.02 参考网上的一些内容对tomcat做了一些修改但是情况并没有好转
      

  11.   

    我在日志中里打印了jvm的使用情况,在内存溢出崩溃前,内存分配还是合理的
      

  12.   

    你的项目有调用别的服务吗? 如果有的话 是异步请求吗?  调用web服务的时候 可能两边速度完全不对等 时间越长 就积累了越多服务没有被调用完成,导致等待的线程 和socket链接越来越多  最后在超多虚拟机的承受范围之内  而导致虚拟机崩溃  解决方法  通过被调用方修复坏掉的接口   然后将异步改为  生产者/消费者模式的消息队列        希望对你有用