记服务器故障排查
1. 现象
home目录出现大量hs_err_pid.log,且伴随着内存使用量暴增、top发现大量sleeping Task、CPU使用率翻了好几倍、服务器响应变慢。
2. 原因探析
2.1 hs_err_pid.log
先分析下hs_err_pid.log,发现Current Thread全是Unknown thread
Current thread (0x00007f39bc01c000): JavaThread "Unknown thread" [_thread_in_vm, id=30475, stack(0x00007f39c3752000,0x00007f39c3853000)]
2.2 sleeping task
找不到有用信息,再从sleeping task入手
ps -l
ps -efl | grep user
# 查看到某个cron小时任务多个SLEEP
ps -efl | grep user| awk '{if($2 = "S"); print $3}' | more
ps -efl | grep user
ps -efl | grep user| wc -l
# 杀掉Sleep任务
ps -efl | grep user | grep task1| awk '{if($2="S");print $4}'
ps -efl | grep user| grep task1| awk '{if($2="S");print $4}' | xargs kill
ps -efl | grep user| grep task1 | awk '{if($2="S");print $4}'
# 查找后发现hive -e 卡住进程,存在大量这种情况,hive --hiveconf tez.queue.name=queue2 -e 更换资源队列启动
# 小结:crontab启动的进程会卡住,会占用较多内存
# linux用户最大可用线程数:sysctl kernel.pid_max
# kernel.pid_max = 32768
2.2 进程的状态
# wchan字段的值:hrtime futex_ pipe_w wait unix_s poll_s n_tty_
cat /proc/pid/wchan
# 输出分两类:do_wait(hrtime/futex_/wait/poll_s), pipe_wait(pipe_w/unix_s)
大量的sleep进程,导致pipe阻塞,内存暴增,CPU超负荷
处理办法,杀掉sleep进程,重新启动任务。
3. 引用
JVM 致命错误日志(hs_err_pid.log)解读
JVM致命错误日志(hs_err_pid.log)分析
Linux中查看进程状态信息
调用Process.waitfor导致的进程挂起
linux 命令:ps 详解
Linux ps命令详解:查看正在运行的进程
crontab定时任务不执行的一些原因总结
linux服务器查看进程数量
Linux命令大全(手册)
linux sleeping进程多_你知道Linux进程的睡眠和唤醒操作?
linux sleeping进程多_什么是Linux僵尸进程?怎么产生的?怎么避免?
【Linux】进程控制——深刻理解进程创建
Linux内核PID管理
4. 拓展
服务器上的sleep进程,到底占用了哪些资源?进程阻塞?
会导致crontab无法启新任务?内存暴增?CPU高?进程数很多?
JVM出现大量OOM异常,大量hs_err_pid.log

浙公网安备 33010602011771号