Ubuntu 僵尸进程查看与清理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu 僵尸进程查看与清理相关的知识,希望对你有一定的参考价值。

参考技术A

APEU2对于 僵尸进程(zombie process) 的定义:
In UNIX System terminology, a process that has terminated, but whose parent has not yet waited for it, is called a zombie.
父线程在子线程结束时,没有进入 wait 方法获取子线程的终止状态,子线程终止后就是僵尸进程。

使用 ps aux | grep Z 查看 STAT 为 Z 的进程

kill父进程
ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9

MHA之Binlog Dump (GTID)僵尸进程清理

 
master存活的状态下切换
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.0.101 --orig_master_is_new_slave --running_updates_limit=1000
不出意外的情况下,会报下面的错误:

查看源代码:

 在新master上获取正在执行的进程,也就是show processlist操作。并且将获取到的processlist信息进行分析判断,如果新master当前还存在binlog dump或binlog dump gtid进程等,则无法切换。

源码 DBHelper.pm片段

 

报错的原因是切换成功后,原master变成了slave,而新slave上的binlog dump gtid线程并没有没停掉,理论上切换成功后,由于角色的转换,原master变成slave,binlog dump gtid进程应该停止运行的,为什么没有被停止掉呢?
 
 
查看新master上的报错日志。

连接丢失,原来是连接丢失导致slave没接收到信号,所以进程没有被停掉。

 
该问题可以通过配置主从同步心跳检测时间来提前触发主从检测,从而达到slave上的binlog dump gtid进程提前停止。系统默认主从检测时间是3600S。
配置如下,在可能会成为master的slave上执行
stop slave;
change master to master_heartbeat_period = 10;
set global slave_net_timeout = 25;
start slave;
在当前主上执行
change master to master_heartbeat_period = 10;
set global slave_net_timeout = 25;
 
可以直接配置在配置文件中
slave_net_timeout = 25
 
再次手动切主的时候就发现binlog dump gtid进程很快就被清理了,也不会报错了。

 

 

以上是关于Ubuntu 僵尸进程查看与清理的主要内容,如果未能解决你的问题,请参考以下文章

如何清理僵尸进程(转载)

僵死进程的清除

什么是僵尸进程?如何找出并清理

MHA之Binlog Dump (GTID)僵尸进程清理

第十二篇:并发回射服务器的具体实现及其中僵尸子进程的清理( 上 )

【zombie】如何查看并杀死僵尸进程?