金融其它性能诊断

针对系统中的僵尸进程

大家好!如何解决系统中的僵尸进程。
参与6

3同行回答

cuizengshuncuizengshun系统运维工程师民生银行
下面是之前我处理僵尸进程的一个报告。================================                故障分析过程1.        登录操作系统,通过ps aux| grep -i defunct| wc -l来查找僵尸进程,发现每个操作系统有50个左...显示全部
下面是之前我处理僵尸进程的一个报告。

================================
                故障分析过程
1.        登录操作系统,通过ps aux| grep -i defunct| wc -l来查找僵尸进程,发现每个操作系统有50个左右的僵尸进程

2.        下面分析僵尸进程的父进程,希望从父进程来查找出是哪个应用程序产生的僵尸进程,从而找到根源。发现使用ps aux来进行查找时,僵尸进程的父进程已经看不到了。
# ps aux | grep -i defunct
root      521162                            Z              0:00
root      599030                            Z              0:00
root     1033114                            Z              0:00
root     1000412                            Z              0:00
root      996256                            Z              0:00
root      254764                            Z              0:00
……

3.        然后用kdb分析kernel的信息,也希望通过该方法找到父进程ID。发现也已经找不到父进程。因此通过上述两种分析方法,已经无法通过现有的僵尸进程找到父进程
# kdb
Preserving 1799410 bytes of symbol table [/unix]
WARNING: Version mismatch between unix file and command kdb
           START              END
0000000000001000 00000000044E0000 start+000FD8
F00000002FF47600 F00000002FFDF940 __ublock+000000
000000002FF22FF4 000000002FF22FF8 environ+000000
000000002FF22FF8 000000002FF22FFC errno+000000
F100080A00000000 F100080A10000000 pvproc+000000
F100080A10000000 F100080A18000000 pvthread+000000
Preserving 311971 bytes of symbol table [./usr/lib/drivers/nfs.ext]
Preserving 98993 bytes of symbol table [./usr/lib/drivers/krpc.ext]
Preserving 12970 bytes of symbol table [./usr/lib/drivers/posix_aiopin]
Preserving 38895 bytes of symbol table [./usr/lib/drivers/posix_aio.ext]
Preserving 12448 bytes of symbol table [./usr/lib/drivers/aiopin]
Preserving 38352 bytes of symbol table [./usr/lib/drivers/aio.ext]
Preserving 25381 bytes of symbol table [./usr/lib/drivers/iscsidd]
Preserving 255489 bytes of symbol table [./usr/lib/drivers/hd_pin_bot]
Preserving 153927 bytes of symbol table [./usr/lib/drivers/hd_pin]
Preserving 41327 bytes of symbol table [./etc/drivers/scsidiskpin]
Preserving 26864 bytes of symbol table [./usr/lib/drivers/scsidisk]
Preserving 30587 bytes of symbol table [./usr/lib/drivers/vscsi_initdd]
Preserving 21109 bytes of symbol table [./usr/lib/drivers/vioentdd]
Preserving 21178 bytes of symbol table [./usr/lib/drivers/vdev_busdd]
Preserving 65210 bytes of symbol table [./usr/lib/drivers/planar_pal_chrp]
read vscsi_scsi_ptrs OK, ptr = 0x4654360
(0)> p * | grep -i zom
pvproc+002400    9 ZOMB   007f3ca 0000000 00007FFFFFFFF000   0 0001
(0)>

4.        下面的分析思路是通过监控来查找最近是否还在产生僵尸进程,因此每1秒钟执行一次下列命令,来查找哪个应用程序有可能产生僵尸进程。
# ps -ef | grep -i defunct | grep -v grep | awk '{ print $2 }' | xargs -n 1 proctree
通过多次抓取数据,发现ITM的程序经常性产生僵尸进程,但很快又被操作系统回收了。
/opt/itm/itm_os_agent/aix526
分析僵尸进程的产生的原理,是内核为了保证父进程总是可以获得子进程的信息,在子进程结束后,仍然保留子进程的部分信息,等待父进程通过wait/waitpid获取信息。若父进程从未调用过wait/waitpid,这个多余的信息将被一直保留,子进程成为僵尸进程,一直占用一个进程号。
因此从这个角度来看,虽然不能证明操作系统现有的50个僵尸进程是ITM产生的,但由于ITM经常性产生僵尸进程,因此该软件有较大的嫌疑。


                分析结论
僵尸进程产生的原因:
1、        通过现有的信息不能直接定位哪个软件产生了50个僵尸进程,需要后续测试分析
2、        通过实时监控发现ITM有产生僵尸进程的较大的嫌疑收起
银行 · 2015-04-10
浏览1993
wcxhswcxhs数据库架构师银信
我们当时排查僵尸进程的时候一分层查的,首先把相关应用都停掉不随机启动,然后重启系统清理僵尸进程,然后,按照顺序一层层启动应用,当发现僵尸进程猛增的哪一层,肯定就是它出现问题了...显示全部
我们当时排查僵尸进程的时候一分层查的,首先把相关应用都停掉不随机启动,然后重启系统清理僵尸进程,然后,按照顺序一层层启动应用,当发现僵尸进程猛增的哪一层,肯定就是它出现问题了收起
IT其它 · 2015-06-16
浏览1964
bighead008bighead008其它19
大海啊你全是水,眼里啊你全是lei显示全部
大海啊你全是水,眼里啊你全是lei收起
IT其它 · 2015-06-09
浏览1934

提问者

ddnyiy
系统工程师银行
擅长领域: 云计算虚拟化私有云

相关问题

问题状态

  • 发布时间:2015-04-10
  • 关注会员:1 人
  • 问题浏览:5258
  • 最近回答:2015-06-16
  • X社区推广