zoukankan      html  css  js  c++  java
  • Tomcat – java.lang.OutOfMemoryError: PermGen space Cause and Solution

    Read more: http://javarevisited.blogspot.com/2012/01/tomcat-javalangoutofmemoryerror-permgen.html#ixzz3QDWa3Zqi

    Tomcat web server often suffers from java.lang.OutOfMemoryError: PermGen space whenever you deploy and undeploy your web application couple of time. No matter you are using tomcat6tomcat7 or using bundled tomcat in Netbeans or Eclipse you will face this error now and then while developing web application on tomcat server. I thought about this article after writing 2 Solution of OutOfMemoryError in Java. I have touched this issue there but then I thought to write separate tutorial for tomcat outofmemoryerror because I am getting this error too frequently.
     
    In this article we will see what causes java.lang.OutOfMemoryError: PermGen Space in tomcat and how to fix java.lang.OutOfMemoryError: PermGen Space in tomcat server.
     

    Tomcat – java.lang.OutOfMemoryError: PermGen space Cause and Solution



    Cause of OutOfMemoryError in PermGen space in Tomcat:

    PermGen Space of heap is used to store classes and Meta data about classes in Java. When a class is loaded by a classloader it got stored in PermGen space, it gets unloaded only when the classloader which loaded this class got garbage collected. If any object retains reference of classloader than its not garbage collected and Perm Gen Space is not freed up. This causes memory leak in PermGen Space and eventually cause java.lang.OutOfMemoryError: PermGen space. Another important point is that when you deploy your web application a new Clasloader gets created and it loads the classes used by web application. So if Classloader doesn't get garbage collected when your web application stops you will have memory leak in tomcat.
     

    Solution of Tomcat: OutOfMemroyError:

    1) Find the offending classes which are retaining reference of Classloader and preventing it from being garbage collected. Tomcat provides memory leak detection functionality after tomcat 6 onwards which can help you to find when particular library, framework or class is causing memory leak in tomcat. Here are some of the common causes of java.lang.OutOfMemoryError: PermGen space in tomcat server:
     
    1) JDBC Drivers:
    JDBC drivers are most common cause of java.lang.OutOfMemoryError: PermGen space in tomcat if web app doesn't unregister during stop. One hack to get around this problem is that JDBC driver to be loaded by common class loader than application classloader and you can do this by transferring driver's jar into tomcat lib instead of bundling it on web application's war file.
     
    2) Logging framework:
    Similar solution can be applied to prevent logging libraries like Log4j causing java.lang.OutOfMemoryError: PermGen space in tomcat.
     
    3) Application Threads which have not stopped.
    Check your code carefully if you are leaving your thread unattended and running in while loop that can retain classloader's reference and cause java.lang.OutOfMemoryError: PermGen space in tomcat web server. Another common culprit is ThreadLocal, avoid using it until you need it absolutely, if do you make sure to set them null or free any object ThreadLocal variables are holding.
     
    Another Simple Solution is to increase PermGen heap size in catalina.bat or catalina.sh of tomcat server; this can give you some breathing space but eventually this will also return in java.lang.OutOfMemoryError: PermGen space after some time.
     

    Steps to increase PermGen Heap Space in Tomcat:

     
    1) Go to Tomcat installation directory i.e C:Program FilesApache Software FoundationApache Tomcat 7.0.14in in Windows and something similar in linux.
     
    2) Add JAVA_OPTS in your catalina.bat or Catalina.sh
     
    In Windows:
     
    set JAVA_OPTS="-Xms1024m -Xmx10246m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
     
    In linux:
     
    export JAVA_OPTS="-Xms1024m -Xmx10246m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
     
    You can change the actual heap size and PermGen Space as per your requirement.
     
    3) Restart Tomcat.
     
    As I said earlier increasing PermGen space can prevent java.lang.OutOfMemoryError: PermGen in tomcat only for some time and it will eventually occur based on how many times you redeploy your web application, its best to find the offending class which is causing memory leak in tomcat and fix it.



  • 相关阅读:
    VUE assets里的scss没有引用会被打包进代码里,本地代码和打包后的代码样式不一致解决办法
    echarts图表配置
    关于哈希路由多项目部署同一个服务器的链接访问问题
    git操作失误,提交代码因为网络问题没有成功,然后操作时候点错按钮导致代码全部没有了,也没用备份,如何解决
    浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别
    angular打包部署设置publicPath文件目录及访问地址,解决打包完成后,运行打包文件,报错404,js,css未找到
    Oracle spatial与arcsde 的关系
    Oracle Spatial图层元数据坐标范围影响R-TREE索引的ROOT MBR吗?
    centos下安装supervisor的步骤详解
    laravel 队列
  • 原文地址:https://www.cnblogs.com/AloneSword/p/4260980.html
Copyright © 2011-2022 走看看