Fork me on GitHub

Tomcat 故障案例排错

案例一、Tomcat开机自启动故障

01、Tomcat 开机自启动方式,通过systemctl 设置开机自启动 (点击此处查看二进制安装如何通过systemclt 管理服务

02、修改/etc/rc.d/rc.local,在里面添加/app/tools/tomcat/bin/startup.sh  启动命令开机自启动

  发现系统重启后,Tomcat启动失败,

  原因:开机的时候,或者定时任务运行脚本的时候,无法识别到自定义的PATH环境变量,没有Java相关路径,导致开机Tomcat启动失败(定时重启任务失败也可能是这个问题导致的)

  解决:

1)、/etc/rc.d/rc.local 脚本开头重新定义PATH变量,或者脚本开头重新加载变量

vim /etc/rc.d/rc.local 

 在startup.sh 命令前重新加载遍PATH(太长,不推荐)

touch /var/lock/subsys/local
export PATH=/app/tools/jdk/bin:/app/tools/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
/app/tools/tomcat/bin/startup.sh

3、重新加载下 /etc/profile (. 或者 source)

touch /var/lock/subsys/local
. /etc/profile
/app/tools/tomcat/bin/startup.sh

案例二、Tomcat(Java)服务器运行 占用大量swap,物理内存占用较少

原因:代码问题,

解决:

  1)、临时增大swap

 

  2)、调整Linux内核参数,让系统更优先使用物理内存

1 echo 'vm.swappiness =0' >> /etc/sysctl.conf 
2 
3 sysctl -p
4 #生效

#vm.swappiness ,swap亲和性,值越大,越优先使用swap,越小越优先使用内存
  3)、排查程序代码问题

案例三、Tomcat负载高

思路与流程

  1、先定位Tomcat的线程

  2、导出线程、进程信息

  3、与开发一起排查

基础排错流程:

  1)、通过ps aux 和top 命令排查tomcat 问题

  2)、通过top -Hp tomcat进程pid (pid通过jps获取)

[root@localhost ~]# top -Hp 1587 #Java 进程ID

 top - 21:51:05 up 10:09,  2 users,  load average: 0.02, 0.02, 0.05
Threads:  42 total,   0 running,  42 sleeping,   0 stopped,   0 zomb
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 
KiB Mem : 32946132 total, 31973116 free,   725284 used,   247732 buf
KiB Swap:  8388604 total,  8388604 free,        0 used. 31870840 ava

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ 
 1598 root      20   0 4797692 113128  21408 S  0.3  0.3   0:03.56 
 1612 root      20   0 4797692 113128  21408 S  0.3  0.3   0:18.41 
 1663 root      20   0 4797692 113128  21408 S  0.3  0.3   1:22.24 
 1587 root      20   0 4797692 113128  21408 S  0.0  0.3   0:00.00 
 1588 root      20   0 4797692 113128  21408 S  0.0  0.3   0:00.41 
 1589 root      20   0 4797692 113128  21408 S  0.0  0.3   0:00.44 
 1590 root      20   0 4797692 113128  21408 S  0.0  0.3   0:00.00 
 1591 root      20   0 4797692 113128  21408 S  0.0  0.3   0:00.01 
 1592 root      20   0 4797692 113128  21408 S  0.0  0.3   0:00.00 

  3)、通过jmap命令和jstack 命令加进程的ID导出与显示进程的信息,并过滤线程信息

[root@localhost ~]# echo 'obase=16;1587'|bc
633
[root@localhost ~]# jstack 1587 |grep -A10 633

或者通过 show-busy-java-threads.sh 脚本查看

实用脚本/java.md at dev-2.x · oldratlee/useful-scripts · GitHub
https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads

   4)、Tomcat的日志

   5)、通过vmstat 1判断

[root@localhost ~]# vmstat 1 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 31823116   2112 391056    0    0     0     0   19   18  0  0 100  0  0
 0  0      0 31823116   2112 391056    0    0     0     0  343  307  0  0 100  0  0
 0  0      0 31823116   2112 391056    0    0     0     0  290  267  0  0 100  0  0
 0  0      0 31823116   2112 391056    0    0     0     0  263  253  0  0 100  0  0

 

posted @ 2022-08-20 11:53  Alex-Lzy  阅读(277)  评论(0编辑  收藏  举报