系统中出现大量不可中断的进程和僵尸进程怎么办

标签: | 发表时间:2023-05-04 14:13 | 作者:
出处:https://www.cnblogs.com

系统中出现大量不可中断的进程和僵尸进程怎么办

短时应用的运行时间比较短,很难在top或者ps这里系统展示概要和进程快照中发现,需要使用记录事件的工具来配合诊断,比如execsnoop或者perf top

讲到cpu使用率的类型,除用户cpu之外,还包括系统cpu(上下文切换)、等待io的cpu(等待磁盘的响应)以及中断cpu(包括软中断和硬中断)等

--进程状态

当iowait升高时,进程很可能因为得不到硬件的响应,而长时间处于不可中断状态。从ps或者top中,可以发现都出d状态,也就是不可中断状态(uninterruptible sleep)

top,ps是最常用的查看进程状态的工具,top中s列表示进程的状态--R\D\Z\S\I等几个状态

--R是running或runnable,表示进程在cpu的就绪队列中,正在运行或正在等待运行

--D是disk sleep,不可中断状态睡眠(uninterruptible sleep)一般表示正在跟硬件交互,并且交互过程不允许被其他进程或中断打断

--Z是zombie,僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源

--S是interruptible sleep,可中断状态睡眠,表示因为等待某个事件而被系统挂起,当进程等待的事件发生,它会被唤醒并进入R状态

--I是idle,空闲状态,用在不可中断睡眠的内核线程上。要注意,D状态的进程会导致平均负载升高,I状态的进程却不会。

--T或者t,stoped或traced,表示进程处于暂停或者跟踪状态,向一个进程发送sigstop信号,它就会因响应这个信号变成暂停状态(stopped);再发送sigcont,进程会恢复

--X,表示进程已经消亡,不会在top或者ps中看到

--top命令,按1切换到cpu

如果系统或硬件发送了故障,进程可能会在不可中断状态保持很久,甚至导致系统中出现大量不可中断进程,需要注意,系统是不是出现了I/O等性能问题。

[root@mysqlhq ~]#yum install dstat -y

这里dstat是一个新的性能工具,吸收了vmstat、iostat、ifstat等工具的优点,可以同时观察系统的cpu、磁盘io、网络以及内存的使用情况

 

--不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统io性能问题。

--僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。

--1 iowait太高,达到了系统cpu的个数

--iowait分析

[root@mysqlhq ~]#dstat 1 10 ##间隔1秒输出10组数据You did not select any stats, using -cdngy bydefault.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq|readwrit| recv  send|inout |int   csw1   0  99   0   0   0| 329k  133k|   0     0 |   0     0 | 202   249 
  0   0 100   0   0   0|   0    15k|4086B  842B|   0     0 | 176   225 
  0   0 100   0   0   0|   0   206k|3282B  362B|   0     0 | 182   258 
  0   0 100   0   0   0|   0  5120B|3341B  362B|   0     0 | 141   174 
  0   0 100   0   0   0|   0     0 |2946B  362B|   0     0 | 144   178 
  0   0 100   0   0   0|   0    10k|2142B  362B|   0     0 | 151   208 
  0   0 100   0   0   0|   0    15k|2640B  362B|   0     0 | 171   213

看read和writ,分析当iowait升高时,磁盘的读请求(read)或writ请求,很可能是磁盘的读或者写导致

根据top命令,观察D状态的进程

找到进程的pid,如是2171

##-d 展示io统计数据,-p进程号 间隔1秒输出3组数据[root@mysqlhq ~]#pidstat -d -p 2171 1 3Linux 3.10.0-514.ky3.kb3.x86_64 (mysqlhq)     06/11/2019     _x86_64_    (4CPU)04:51:13 PM   UID       PIDkB_rd/skB_wr/skB_ccwr/siodelayCommand04:51:14 PM  1001      2171      0.00      0.00      0.00       0zabbix_agentd04:51:15 PM  1001      2171      0.00      0.00      0.00       0zabbix_agentd04:51:16 PM  1001      2171      0.00      0.00      0.00       0zabbix_agentd
Average:1001      2171      0.00      0.00      0.00       0  zabbix_agentd

kB_rd表示每秒读的KB数,kB_wr表示每秒写的KB数,iodelay表示io延迟,都是0表示此时没有任何的读写,说明问题不是出现在2171

用同样的方法分析其他D状态的进程

[root@mysqlhq ~]#pidstat -d 1 20 ##间隔1秒输出20组数据Linux 3.10.0-514.ky3.kb3.x86_64 (mysqlhq)     06/11/2019     _x86_64_    (4CPU)04:55:37 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command04:55:38 PM  1000      3093      0.00     15.84      0.00       0mysqld04:55:38 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command04:55:39 PM  1000      3093      0.00     12.00      0.00       0  mysqld

观察发现,mysqld进程进行磁盘写,并且每秒写的数据是15kb,如果这个值很大,说明是该进程的问题

进程想要访问磁盘,就必须使用系统调用,所以接下来找出mysqld进程的系统调用

strace是最常用的跟踪进程系统调用的工具

[root@mysqlhq ~]#strace -p 1000strace: attach: ptrace(PTRACE_ATTACH, ...): No suchprocess[root@mysqlhq ~]#strace -p 3093Process3093attached
restart_syscall(<... resuming interrupted call ...>) = 1fcntl(31, F_GETFL)                      = 0x2(flags O_RDWR)
fcntl(31, F_SETFL, O_RDWR|O_NONBLOCK)   = 0accept(31, {sa_family=AF_INET6, sin6_port=htons(37136), inet_pton(AF_INET6,"::ffff:127.0.0.1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 133fcntl(31, F_SETFL, O_RDWR)              = 0setsockopt(133, SOL_IP, IP_TOS, [8], 4) = 0setsockopt(133, SOL_TCP, TCP_NODELAY, [1], 4) = 0

如果执行失败

strace -p 6082

strace: attach: ptrace(PTRACE_SEIZE, 6082): Operation not permitted

一般遇到这种问题,先检查进程的状态是否正常

[root@mysqlhq ~]#ps aux|grep 6082

使用perf top查看

$perf record -g

$perf report

截图中的swapper是内核中的调度进程,可以先忽略掉

查看进程的系统调用

--僵尸进程

僵尸进程要解决,需要找他他们的根,也就是找出父进程,然后在父进程里解决

父进程的找法

# -a表示输出命令行选项

# p表PID

# s表示指定进程的父进程

[root@mysqlhq ~]# pstree -aps 3093

 

找到父进程并解决

小结:

iowait高不一定代表io有性能瓶颈,当系统中只有io类型的进程在运行时,iowait也会很高,但实际上,磁盘的读写远没有达到性能瓶颈的程度。

碰到了iowait升高时,先使用dstat、pidstat等工具,确认是不是磁盘io的问题,然后再找那些进程导致了io

等待io的进程一般是不可中断状态,用ps命令找到D状态的进程,多为可疑进程,如果变成了僵尸进程,trace就不能直接分析进程的系统调用,这种情况下使用perf工具,类分析系统的cpu时钟事件,最终发现直接io问题。

僵尸进程的问题,使用pstree找出父进程,检查父进程的wait()/waitpid()的调用

相关 [系统 中出 中断] 推荐:

系统中出现大量不可中断的进程和僵尸进程怎么办

- -
系统中出现大量不可中断的进程和僵尸进程怎么办. 短时应用的运行时间比较短,很难在top或者ps这里系统展示概要和进程快照中发现,需要使用记录事件的工具来配合诊断,比如execsnoop或者perf top. 讲到cpu使用率的类型,除用户cpu之外,还包括系统cpu(上下文切换)、等待io的cpu(等待磁盘的响应)以及中断cpu(包括软中断和硬中断)等.

中断与性能

- - 并发编程网 - ifeve.com
中断,会导致正在运行的CPU要停下手头的工作去响应,这需要工作任务的切换,就带来了我们熟知的上下文切换,而频繁上下文切换,是对系统性能的重要影响因素. 那怎么减少中断带来的影响呢. 现在CPU往往是多核,如16、32核,是否可以把中断绑定到其中一个CPU上,再把其他剩余的cpu用于应用的计算. 因为之前是单核的原因,传统的很多做法是会把中断扔给cpu0处理,在linux下,可执行mpstat -P ALL 1,查看各个cpu上的中断情况.

壳系统

- Vernsu - It Talks-魏武挥的blog
经常有人被我问到“你用什么浏览器”时的答案是:傲游啦360啦,但事实上,这些都不是真正的浏览器,从技术角度讲,充其量只是在IE浏览器上加一个壳罢了. 在国外,壳浏览器是以“皮肤”的形式存在,纯属为了美化浏览器而用. 但在中国,壳浏览器成了一门生意. 奇虎的主要收入来源并非来自那个由于一场商战而赫赫有名的安全卫士,而是来自于360浏览器(它有两个版本,分别以IE和Chrome为内核).

秒杀系统

- - 开源软件 - ITeye博客
秒杀系统架构分析与实战. (反馈非常好的文章,推荐). (1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货. (1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;. 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:.

Ext文件系统

- Haides - 博客园-首页原创精华区
  虽然从Ext2到Ext4,找数据的方式发生了变化,但是,磁盘的布局还是非常相似的. 其实这个东西也不需要变化,因为现在也没什么特别巧妙的方式,而且磁盘的吞吐量、效率的瓶颈也不在这里. 当然,这里排除那些根据自身文件特点设计的数据库,毕竟还是为了支持通用文件.   Boot在第一个块,放的应该是引导程序,超级块就放在了第二个块上,如果不是可以在mount的时候通过参数sb来设置.

HBase 系统架构

- - 博客园_首页
HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问. HBase的目标是存储并处理大型的数据. HBase是一个开源的,分布式的,多版本的,面向列的存储模型. 5 可在廉价PC Server搭建大规模结构化存储集群. HBase是Google BigTable的开源实现,其相互对应如下:.

Linux系统监控

- - CSDN博客系统运维推荐文章
查看所有的进程和端口使用情况:. 查看nginx并发(连接数)进程数:. 查看当网络连接状态中,已建立连接的数量:. 查看系统tcp连接中各个状态的连接数. 输出每个ip的连接数,以及总的各个状态的连接数. df -hl 查看磁盘使用情况 . df -hl 查看磁盘剩余空间. df -h 查看每个根路径的分区大小.

mysql 权限系统

- - 数据库 - ITeye博客
mysql 权限系统控制一个用户是否能进行连接,以及连接后能够针对那些对象进行什么操作. mysql权限控制包含两个阶段. 2:检查用户是否具有所执行动作的权限. 本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为:. 一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利.

银行核心系统-贷款系统【信贷系统】

- - ITeye博客
一、         贷款业务. 贷款按期限分为短期、中期与长期贷款,短期贷款是指期限在1年以内的贷款,中期贷款是指期限在1年(含1年)至3年(含3年)之间的贷款,长期贷款是指期限超过3年的贷款. 贷款的种类目前有个人助学贷款和个人住房贷款:. l     个人助学贷款:须提供两位担保人,无须质押物,贷款额度不超过人民币10万元.

Google Docs遭遇服务中断故障

- 建军 - cnBeta.COM
北京时间9月8日早间消息,谷歌文档(Google Docs)生产力套装今天遭遇服务中断故障,截至太平洋时间14:35(北京时间9月8日5:35)为止尚未恢复,免费个人用户和企业用户均受到此次故障的影响.