色粉盒撒娇 发表于 2018-12-6 12:30:14

生产环境-linux-tomcat宕掉解决办法

  对于中小公司使用tomcat作为java容器,没有经过系统的调优很容易出现tomcat在运行过程中出现服务宕掉,并且在tomcat的日志中一般无法看出有用的信息,而此次实例中对tomcat宕机后调优,是由公司的构架进行调整,他是对JVM调优有着非常深的理解,而作者对JVM调优的理解比较浅薄,所以本实例不会过多讲解调优的原理,只记录分析和调优的过程,希望能给各位遇到tomcat宕机的运维朋友们带来一点思路。
  一、tomcat宕掉初步分析
  生产环境的tomcat会在隔几天的情况下服务宕掉,这其中没有规律,有规律的是tomcat宕掉每次都是在版本升级后重启10分钟~60分钟内,并不是每次重启tomcat都会宕掉,如果tomcat启动超过一天,运行过程中是不会宕掉的,而且再次重启tomcat后,就不会再出现tomcat宕掉的情况,这可以初步排除上线代码导致的主因(新代码上线其实也是有一部分原因,后面会讲)。
  查看tomcat的catalina.out日志:
  2015-1-5 13:35:41 org.apache.coyote.http11.Http11NioProtocol pause
  信息: Pausing Coyote HTTP/1.1 on http-8890
  2015-1-5 13:35:42 org.apache.catalina.core.StandardService stop
  信息: Stopping service Catalina
  2015-1-5 13:35:42 org.apache.coyote.http11.Http11NioProtocol destroy
  信息: Stopping Coyote HTTP/1.1 on http-8890
  Exception in thread "Timer-1" java.lang.NullPointerException
  at com.qhfax.invest.balanceAccount.common.util.TaskBalanceAccount.run(TaskBalanceAccount.java:75)
  at java.util.TimerThread.mainLoop(Timer.java:512)
  at java.util.TimerThread.run(Timer.java:462)
  通过日志可以看到,tomcat先暂停了http服务的8890端口,然后停止了核心服务。
  很明显,从上面的日志,我们无法看到任何的有用信息,那该如何办呢?
  二、tomcat内存分析调优-开启GC日志
  既然从日志无法看出tomcat是如何宕掉的,那么我们就从分析tomcat内存开始,可以开启gc日志,记录日常JVM在清理内存时的情况,具体步骤如下:
  1、tomcat启动文件catalina.sh
  先展示下,未做过调优前生产tomcat的配置情况(tomcat调优的核心就是JVM参数设置):
  原配置:
  编辑{tomcat_home}/bin/catalina.sh,可以直接在顶部#注释说完后,就添加以下参数
  export JRE_HOME=/usr/java/jdk1.6.0_38
  export CATALINA_HOME=/home/resin/tomcat
  JAVA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"
  JVM启动参数说明:
  -Xms1024m 设置JVM最小可用内存为1024M
  -Xmx1024m 设置JVM最大可用内存为1024M
  -XX:PermSize=512m   JVM初始分配的非堆内存
  -XX:MaxPermSize=512m 设置持久代大小为512M
  修改后配置:
  export JRE_HOME=/usr/java/jdk1.6.0_38
  export CATALINA_HOME=/home/resin/tomcat
  JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:+UseParallelOldGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/home/resin/tomcat/logs/gc.log"
  调优后JVM启动参数说明:
  -server server模式启动速度较慢,但是一旦运行起来后,性能将会有很大的提升
  -Xmn512m 设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
  -XX:+UseParallelOldGC执行垃圾回收器,一般在多线程多处理器机器上使用
  -XX:+PrintGCDateStamps 记录GC日志并不会特别地影响Java程序性能
  -XX:+PrintGCDetails 打印收集的其他信息
  -Xloggc:/****/****/tomcat/logs/gc.logGC日志路径地址
  2、tomcat配置文件server.xml
  原配置:

    
  修改后配置:

  
页: [1]
查看完整版本: 生产环境-linux-tomcat宕掉解决办法