美文网首页
tomcat启动

tomcat启动

作者: loserStar | 来源:发表于2019-01-30 16:09 被阅读1次

java.lang.OutOfMemoryError及解决方案

主要有3种比较常见的OutOfMemory Error:

  • java.lang.OutOfMemoryError: Java heap space
  • java.lang.OutOfMemoryError: PermGen space
  • java.lang.OutOfMemoryError: GC overhead limit exceeded

1. java.lang.OutOfMemoryError: Java heap space

 Java heap space,Java应用程序创建的对象存放在这片区域,垃圾回收(Garbage Collection)也发生在这块区域。通常一些比较“重型”的操作可能会导致该异常,比如:需要创建大量的对象,层次比较深的递归操作等。
 解决方案有两种,一是优化应用,找到消耗大量内存的地方,然后优化代码或者算法。这种方式比较推荐,但是难度比较大,尤其是在产品环境中出现这种问题,开发人员不能很好的重现问题。第二种方案是提升Java heap size,这种方式虽然感觉有点治标不治本,但是可行性非常高,操作简单。
 对于一般的应用,采用如下方式即可(数字根据自己的需要调整):

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 -Xms<size> - Set initial Java heap size 2 -Xmx<size> - Set maximum Java heap size 3
4 java -Xms512m -Xmx1024m JavaApp</pre>

 如果是在tomcat中,出现的这种问题,解决办法是在{tomcat_dir}/bin/catalina.bat中找到如下几行:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 set MAINCLASS=org.apache.catalina.startup.Bootstrap 2 set ACTION=start
3 set SECURITY_POLICY_FILE=
4 set DEBUG_OPTS=
5 set JPDA=</pre>

 在后面加上一行(数字根据自己的需要调整):

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 set CATALINA_OPTS=-Xms512m -Xmx512m</pre>

2. java.lang.OutOfMemoryError: PermGen space

 Perm Gen Size(Permanent Generation Size),用来存储被加载的类的定义(class definition)和元数据(metadata),比如:Class Object和Method Object等。这是内存中的一块永久保存区域,JVM的垃圾回收不会触及这块区域。通常在加载一个非常大的项目的时候才会出现该异常。
 对于一般的应用,采用如下方式即可(数字根据自己的需要调整):

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 -XX:PermSize<size> - Set initial PermGen Size. 2 -XX:MaxPermSize<size> - Set the maximum PermGen Size. 3
4 java -XX:PermSize=64m -XX:MaxPermSize=128m JavaApp</pre>

 如果是在tomcat中出现这个问题,解决办法是在{tomcat_dir}/bin/catalina.bat中添加如下一行:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 set CATALINA_OPTS=-server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m</pre>

3. java.lang.OutOfMemoryError: GC overhead limit exceeded

 这个错误会出现在这个场景中:GC占用了多余98%(默认值)的CPU时间却只回收了少于2%(默认值)的堆空间。目的是为了让应用终止,给开发者机会去诊断问题。一般是应用程序在有限的内存上创建了大量的临时对象或者弱引用对象,从而导致该异常。虽然加大内存可以暂时解决这个问题,但是还是强烈建议去优化代码,后者更加有效。
 首先,你可以关闭JVM这个默认的策略:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 java -XX:-UseGCOverheadLimit JavaApp</pre>

  其次,你也可以尝试去加大Heap Size:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1 java -Xmx512m JavaApp</pre>

 注意:在修改Tomcat的catalina.bat(*.sh)中的内容时,网上有很多都是说直接修改JAVA_OPTS,按照Apache官方的说法是:

Note: Do not use JAVA_OPTS to specify memory limits. You do not need much memory for a small process that is used to stop Tomcat. Those settings belong to CATALINA_OPTS.

  • Reference
  1. http://wiki.apache.org/tomcat/OutOfMemory
  2. http://www.mkyong.com/java/find-out-your-java-heap-memory-size/

相关文章

  • tomcat优化

    tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚...

  • Tomcat 启动初始化

    tomcat 启动类 我们通过tomcat的catalina.sh 的脚本启动tomcat时,执行的是tomcat...

  • Mac brew 安装Tomcat

    1、brew搜索tomcat 2、brew安装tomcat 3、brew启动tomcat 4、查看启动是否成功浏览...

  • Tomcat启动分析(一) - Bootstrap类

    本系列以Tomcat 8.5.33为例分析Tomcat的启动过程。 Tomcat的启动脚本 与Tomcat有关的脚...

  • javaWeb开篇

    启动tomcat问题 如果遇到tomcat

  • tomcat

    1.开机自启动tomcat vim /etc/rc.d.rc.local 启动tomcat服务 查看tomcat是...

  • IDEA TOMCAT SSM 框架中各个日志的位置

    - IDEA 工具启动日志 - IDEA 项目启动build日志 - IDEA 托管tomcat tomcat 日...

  • Tomcat启动流程

    Tomcat启动分析 Tomcat作为独立的Servlet容器启动时,由引导类Bootstrap启动,Bootst...

  • 开机自启动Tomcat:

    开机自启动Tomcat: 每次开机都要启动tomcat,网上看了好多都是用shell脚本来实现tomcat开机自启...

  • Tomcat源码解析-高层之Bootstrap

    1 Tomcat启动 当我们需要启动tomcat,最常用的方式是通过Tomcat的/bin目录下的脚本startu...

网友评论

      本文标题:tomcat启动

      本文链接:https://www.haomeiwen.com/subject/fldcsqtx.html