美文网首页
Linux服务器瞬时负载居高问题小记

Linux服务器瞬时负载居高问题小记

作者: 小钟钟同学 | 来源:发表于2018-12-04 11:36 被阅读9次

有史以来负载突然居高的,有点吓人。

如图示:

image.png

使用vmstat命令查看:

PS: vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也可以报告关于进程、内存、I/O等系统整体运行状态

image.png

发现奇葩的的--r值:这个高!!!
PS:
r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)

正常的情况下的r值是:

image.png
说明的问题:

可能有异常的情况很多的进程一直在创建

image.png
查看一些可能的进程:

因为公司的业务又使用的一些定时的任务,定时执行一些服务。所有核查一下一些进程信息:

ps -ef |grep python
image.png

果然是这一推的进程在作祟!!!!!
直接结束上述的相关进程后,就好了!!

批量删除对应的进程:

批量删除示例:

[root@web-1 online]# ps -ef | grep remind_service | grep -v color | cut -c 9-15
 14900 
[root@web-1 online]# ps -ef | grep remind_service | grep -v color | cut -c 9-15
 14900 
[root@web-1 online]# ps -ef | grep remind_service 
root     14900  1076  0 08:00 ?        00:00:05 python /data/service/online/remind_service/main.py
root     30707 22682  0 11:33 pts/0    00:00:00 grep --color=auto remind_service
[root@web-1 online]# 

image.png

说明:

“grep xxxx”的输出结果是,所有含有关键字“remind_service”的进程。

“grep -v xxxxx”是在列出的进程中去除含有关键字“color”的进程。

“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。

“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。


$ps -ef | grep read_sight_service_syn_vedio | grep -v color | cut -c 9-15 | xargs kill -s 9

或者----------------------

$ pgrep read_sight_service_syn_vedio | xargs kill -s 9

排查了下,不知道为啥定时执行的任务不断执行创建了!这个目前暂时还不是很清楚!

常用的排查方法

===============================
2018-12-17 09:31:49
===============================
常用的排查方法:来源:https://yq.aliyun.com/articles/129599?spm=a2c4e.11155435.0.0.3a0b7379DbjA8P

批量删除进程

$ps -ef | grep read_sight_service_syn_vedio | grep -v color | cut -c 9-15 | xargs kill -s 9

统计TCP连接数

[root@web-1 ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 92
TIME_WAIT 5560

列出消耗高的线程:

LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | grep -v CPU | sort -n -r | head -20

统计线程消耗的总的CPU:

{ LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | sed -e 's/^ *//' | tr -s ' ' | grep -v CPU | sort -n -r | cut -d ' ' -f 1 | xargs -I{} echo -n "{} + " && echo ' 0'; } | bc -l

列出内存消耗高的进程:

LANG=C ps -e -o%mem,pid,tid,ppid,comm | grep -v MEM | sort -n -r | head -20

统计内存消耗情况:

{ LANG=C ps -e -o%mem,pid,tid,ppid,comm | sed -e 's/^ *//' | tr -s ' ' | grep -v MEM | sort -n -r | cut -d ' ' -f 1 | xargs -I{} echo -n "{} + " && echo ' 0'; } | bc -l

列出导致CPU负载高的线程:

LANG=C ps -eTo stat,pid,tid,ppid,comm,args | perl -ne 'chomp;if (m!^\s*(\S*[RD]+\S*.*)!) {print qq[$1\n];}'

dstat 负载情况查看:

[root@web-1 ~]# dstat -l
---load-avg---
 1m   5m  15m 
1.43 1.23 1.24
1.31 1.21 1.23
1.31 1.21 1.23

找出占用资源最高的进程和用户

[root@web-1 ~]dstat --top-mem --top-io --top-cpu
--most-expensive- ----most-expensive---- -most-expen

相关文章

网友评论

      本文标题:Linux服务器瞬时负载居高问题小记

      本文链接:https://www.haomeiwen.com/subject/zgxmcqtx.html