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