1. 适用场景

Tomcat 运行过程遇到Caused by: java.lang.OutOfMemoryError: PermGen space或者java.lang.OutOfMemoryError: Java heap space错误。

 2. 异常原因     

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的。Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同。GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

Java heap space:JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

3. 解决办法

修改TOMCAT_HOME/bin/catalina.sh文件:

# OS specific support.  $var _must_ be set to either true or false.

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true"

cygwin=false

darwin=false

加入以上红色JAVA_OPTS行记录后重启tomcat服务,其中JAVA_OPTS各参数的具体数值大小须根据实际服务器物理内存大小进行分配。

4. 监控JVM

4.1 查看jdk安装路径

可选择的命令:

(1)     # echo $JAVA_HOME

(2)     # whereis java

(3)     # which java (java执行路径)

(4)     # echo $PATH

本例:

4.2 查看java进程

采用jdk提供的jps(JavaVirtual Machine Process Status Tool)小工具,可查看当前Java进程。

本例:进入/usr/java/jdk1.7.0_79目录后,执行bin/jps -v:

可看到Bootstrap 前面的数字10142即为Java进程号,同时可看到JAVA_OPTS参数生效情况。

4.3 查看JVM的GC情况

使用jstat工具查看,语法为:

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]参数解释:

*Options   -选项,我们一般使用-gcutil查看GC情况

vmid      -VM的进程号,即当前运行的java进程号

interval   -间隔时间,单位为秒或毫秒

本例:同样在/usr/java/jdk1.7.0_79目录中查看java进程号10142且每隔3秒输出1次,执行# bin/jstat  -gcutil  10142  3000 :

参数说明如下:

S0     -Heap上的Survivor space 0区已使用空间的百分比

S1     -Heap上的Survivor space 1区已使用空间的百分比

E      -Heap上Eden space区已使用空间的百分比

O      -Heap上的Old space区已使用空间的百分比,达到100%,就是内存溢出了

P       -Perm space区已使用空间的百分比,达到100%,就是内存溢出了

YGC    -从应用程序启动到采样时发生Yang GC 的次数

YGCT   -从应用程序启动到采样时Yang GC所用的时间【单位秒】

FGC    -从应用程序启动到采样时Full GC的次数

FGCT   -从应用程序启动到采样时Full GC所用的时间

GCT    -从应用程序启动到采样时用于垃圾回收的总时间【单位秒】

通过监控O、P数值情况,再次调整JAVA_OPTS相关参数大小达到优化目的。

Linux下的Tomcat JVM 调优的更多相关文章

  1. linux tomcat jvm调优

    修改TOMCAT_HOME/bin/catalina.sh文件: # OS specific support.  $var _must_ be set to either true or false. ...

  2. linux下mysql安装和调优

    1.yum yum -y install mysql-server mysql 2.RPM安装 http://dev.mysql.com/downloads/ 下载RPM包,请确认服务器版本,我的是红 ...

  3. 生产环境下JVM调优参数的设置实例

    JVM基础:生产环境参数实例及分析 原始配置: -Xms128m -Xmx128m -XX:NewSize=64m -XX:PermSize=64m -XX:+UseConcMarkSweepGC - ...

  4. 技能篇:linux服务性能问题排查及jvm调优思路

    只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求.最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的.如果你是负责中间件或 ...

  5. JVM调优(四)——tomcat远程debug

    JVM调优(四)--tomcat远程debug tomcat远程debug jdwp协议 使用步骤 登录远程服务器,进入tomcat目录,并打开文件: //tomcat/bin/startup.sh ...

  6. 高并发场景下JVM调优实践之路

    一.背景 2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验. 通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图: 可 ...

  7. Tomcat性能调优

    1.集成apache 虽然Tomcat也可以作web服务器,但是处理静态html的速度比不上apache,且其作为web服务器的功能远不如Apache,因此把apache和tomcat集成起来,讲ht ...

  8. nginx+keepalived+tomcat之tomcat性能调优

    body{ font-family: Nyala; font-size: 10.5pt; line-height: 1.5;}html, body{ color: ; background-color ...

  9. 性能测试培训:tomcat性能调优方法

    性能测试培训:tomcat性能调优方法   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loadrunner ...

随机推荐

  1. Django之中间件-CSRF

    CSRF a.CSRF原理 post提交时需要提交csrf_token ,缺少则不通过 在form表单中加入: {% csrf_token %} b.无CSRF时存在隐患 防护其他人通过别的链接pos ...

  2. ck-reset css(2016/5/13)

    /**rest by 2016/05/04 */ * {box-sizing: border-box;} *:before,*:after {box-sizing: border-box;} body ...

  3. CGI FASTCGI php-fpm

    CGI(Common Gateway Interface) CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工 ...

  4. 【SQLServer2008】之改变主键当为null时也不会报错,可以入数据库。

    在SqlServer红框中设置主键,右键会有添加主键选项,并且设置不能为null. 当我们插入主键数据如果为null时,会插不进去,这时候我们需要修改一下,如下图: “标识规范”中选择“是”,就可以了 ...

  5. 安卓ADT离线安装

    http://jingyan.baidu.com/article/3aed632e66858770108091bf.html

  6. zeroMQ研究(转)

    偶尔一个机会,了解了下zeroMQ消息队列. 1  ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接 ...

  7. 关于msbuild 编译.net 4.5新语法错误的解决方法

    .net4.5以前msbuild 是在%windir%/Microsoft.NET/FrameworkXX/vXX目录下,如:C:\Windows\Microsoft.NET\Framework64\ ...

  8. Tomcat Server 配置

    Tomcat报错: The JRE could not be found. Edit the server and change the JRE location. EClipse -> win ...

  9. TCP/UDP server

    Simple: Sample TCP/UDP server https://msdn.microsoft.com/en-us/library/aa231754(v=vs.60).aspx Simple ...

  10. BZOJ4829: [Hnoi2017]队长快跑

    BZOJ4829: [Hnoi2017]队长快跑 Description 众所周知,在P国外不远处盘踞着巨龙大Y. 传说中,在远古时代,巨龙大Y将P国的镇国之宝窃走并藏在了其巢穴中,这吸引着整个P国的 ...