线上的问题在通常有一些预警,比如CPU被打满,网络达到顶峰等等问题。或者用户的反馈,比如某某页面打不开,系统加载很慢,一直提示报错等等。
应急操作:
1 记录问题发生的情况
包括服务器的情况,Java虚拟机的一些情况,数据库的连接情况等等。
2 尽快让用户正常使用系统
常用的方法就是系统降级:
- 让出问题的服务先停掉。
- 代码回滚:往往问题都是在代码更新后出现的。
- 重启大法,要尽快的保证用户能正常使用。
线上问题异常及可能的原因
1 应用层面
应用层面的排查主要是CPU、load、内存以及网络
1.1 CPU
如果发现CPU占用率很高,这个时候就要考虑CPU跑满的原因:
1、FULL GC 频繁
2、有非常耗CPU的操作
通过一些命令将CPU占用最高的几个线程查看出来.
(1)通过ps -ef | grep java 或者 jps 找到pid
[root@iZj6ch2a1k9ok9a599lk5bZ ~]# ps -ef | grep java
root 307137 1 2 12:56 ? 00:03:59 java -jar -Xms512m -Xmx1024m -XX:MaxMetaspaceSize=128m -Dspring.profiles.active=prod /usr/local/fastcms/cms-1.0-SNAPSHOT.jar
root 312259 312064 0 15:11 pts/0 00:00:00 grep --color=auto java
[root@iZj6ch2a1k9ok9a599lk5bZ ~]# jps
312260 Jps
307137 cms-1.0-SNAPSHOT.jar
(2)top -Hp pid 找到使用CPU最高的线程
上面已经得到了pid是307137
[root@iZj6ch2a1k9ok9a599lk5bZ ~]# top -Hp 307137
top - 15:13:47 up 13 days, 16 min, 7 users, load average: 2.56, 2.45, 2.44
Threads: 42 total, 0 running, 42 sleeping, 0 stopped, 0 zombie
%Cpu(s): 11.0 us, 3.8 sy, 0.0 ni, 54.3 id, 29.4 wa, 0.7 hi, 0.8 si, 0.0 st
MiB Mem : 3591.0 total, 105.8 free, 2280.0 used, 1205.3 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 352.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
308128 root 20 0 3009752 986008 0 S 0.3 26.8 0:07.98 http-nio-8085-e
308132 root 20 0 3009752 986008 0 S 0.3 26.8 0:08.14 http-nio-8085-e
307137 root 20 0 3009752 986008 0 S 0.0 26.8 0:00.01 java
307138 root 20 0 3009752 986008 0 S 0.0 26.8 0:08.56 java
307139 root 20 0 3009752 986008 0 S 0.0 26.8 0:00.91 GC Thread#0
307140 root 20 0 3009752 986008 0 S 0.0 26.8 0:00.00 G1 Main Marker
307141 root 20 0 3009752 986008 0 S 0.0 26.8 0:00.23 G1 Conc#0
307142 root 20 0 3009752 986008 0 S 0.0 26.8 0:00.08 G1 Refine#0
307143 root 20 0 300975