自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

處理一次系統(tǒng)假死工作紀(jì)實(shí)

系統(tǒng)
最近碰到客戶反饋一個(gè)問題,系統(tǒng)hang了,ssh登錄不上,但是可以ping通,通過串口登錄進(jìn)去之后,敲有些命令會(huì)卡住,查看cpu負(fù)載內(nèi)存都很正常,手動(dòng)觸發(fā)kdump之后看不出死鎖/softlockup/hardlockup等異常狀態(tài).而且重要的是已經(jīng)影響到客戶幾十億的業(yè)務(wù)了。

[[338497]]

本文轉(zhuǎn)載自微信公眾號(hào)「相遇Linux」,作者JeffXie 。轉(zhuǎn)載本文請聯(lián)系相遇Linux公眾號(hào)。   

最近碰到客戶反饋一個(gè)問題,系統(tǒng)hang了,ssh登錄不上,但是可以ping通,通過串口登錄進(jìn)去之后,敲有些命令會(huì)卡住,查看cpu負(fù)載內(nèi)存都很正常,手動(dòng)觸發(fā)kdump之后看不出死鎖/softlockup/hardlockup等異常狀態(tài).而且重要的是已經(jīng)影響到客戶幾十億的業(yè)務(wù)了。

我能拿到的只有客戶提供的vmcore,為了生活而奔波的人兒趕緊分析起來:

系統(tǒng)(SUSE 11SP1)

#crash ./vmcore ./vmlinux-2.6.32.59-0.19-default

./vmlinux-2.6.32.59-0.19-default.gz

crash>foreach IN bt > inbt

任意找到一個(gè)IN(可中斷睡眠)的進(jìn)程 12813 查看堆棧:

  1. crash>  bt 12813 
  2.  
  3. PID:12813  TASK: ffff880262eda140  CPU: 8  COMMAND: "sshd" 
  4.  #0 [ffff880f98e1ba58] schedule atffffffff8139d2a4 
  5.  #1 [ffff880f98e1bb10] schedule_timeout atffffffff8139d935 
  6.  #2 [ffff880f98e1bba0] unix_wait_for_peer atffffffff81376e27 
  7.  #3 [ffff880f98e1bc00] unix_dgram_sendmsg atffffffff813785c2 
  8.  #4 [ffff880f98e1bcb0] sock_sendmsg atffffffff812e8ddc 
  9.  #5 [ffff880f98e1be50] sys_sendto atffffffff812e9318 
  10.  #6 [ffff880f98e1bf80] system_call_fastpath atffffffff81002f7b 

匯編unix_dgram_sendmsg()

  1. crash>dis unix_dgram_sendmsg 
  2. ... 
  3. 2410xffffffff813785b7 <unix_dgram_sendmsg+1143>:   mov   %r13,%rsi 
  4. 2420xffffffff813785ba <unix_dgram_sendmsg+1146>:   mov   %rbp,%rdi  (key1) 
  5.  rdi代表unix_wait_for_peer函數(shù)的第一個(gè)參數(shù) 
  6. 2430xffffffff813785bd <unix_dgram_sendmsg+1149>:   callq 0xffffffff81376da0 <unix_wait_for_peer> 

進(jìn)程12813 unix_wait_for_peer() 函數(shù)的堆棧數(shù)據(jù):

  1. crash>rd -SS ffff880f98e1bba0 -e ffff880f98e1bc00 
  2. ffff880f98e1bba0:  unix_wait_for_peer+135 0000000000000001 
  3. ffff880f98e1bbb0:  [ffff880262eda140:task_struct]autoremove_wake_function 
  4. ffff880f98e1bbc0:  ffff88021ea8bbc0 ffff880238315bc0 
  5. ffff880f98e1bbd0:  memcpy_fromiovec+87 [ffff880238514980:UNIX] 
  6. ffff880f98e1bbe0:  [ffff880238514c30:UNIX] [ffff880238514980:UNIX] 
  7. ffff880f98e1bbf0:  [ffff880ff708b630:UNIX] 7fffffffffffffff 

匯編unix_wait_for_peer()

  1. crash>dis unix_wait_for_peer 
  2. 0xffffffff81376da0<unix_wait_for_peer>:       sub    $0x58,%rsp 
  3. 0xffffffff81376da4<unix_wait_for_peer+4>:     mov    $0x1,%edx 
  4. 0xffffffff81376da9<unix_wait_for_peer+9>:     mov    %r13,0x50(%rsp) 
  5. 0xffffffff81376dae<unix_wait_for_peer+14>:    lea    0x2b8(%rdi),%r13 
  6. 0xffffffff81376db5<unix_wait_for_peer+21>:    mov    %rbx,0x38(%rsp) 
  7. 0xffffffff81376dba<unix_wait_for_peer+26>:    mov    %gs:0xa580,%rax 
  8. 0xffffffff81376dc3<unix_wait_for_peer+35>:    mov    %rax,0x8(%rsp) 
  9. 0xffffffff81376dc8<unix_wait_for_peer+40>:    lea    0x18(%rsp),%rax 
  10. 0xffffffff81376dcd<unix_wait_for_peer+45>:    mov    %rbp,0x40(%rsp) (key2) 

rbp壓入堆棧(0x58-0x40)處,正好是unix_wait_for_peer堆棧中ffff880f98e1bbe8處,即( [ffff880238514980:UNIX])

  1. 0xffffffff81376dd2<unix_wait_for_peer+50>:    mov    %rdi,%rbx 
  2. 0xffffffff81376dd5<unix_wait_for_peer+53>:    mov    %rsi,%rbp 
  3. 0xffffffff81376dd8<unix_wait_for_peer+56>:    mov    %r13,%rdi 

查看unix_wait_for_peer()函數(shù)源碼:

  1. 1005static long unix_wait_for_peer(struct sock *other, long timeo) (key3) 
  2. 1006{ 
  3. 1007         struct unix_sock *u = unix_sk(other); 
  4. 1008         int sched; 
  5. 1009         DEFINE_WAIT(wait); 
  6. 1011   prepare_to_wait_exclusive(&u->peer_wait, &wait,TASK_INTERRUPTIBLE); 
  7. .. 
  8. 1019         if (sched) 
  9. 1020                 timeo =schedule_timeout(timeo); 
  10. 1021 
  11. 1022         finish_wait(&u->peer_wait,&wait); 
  12. 1023         return timeo; 
  13. 1024} 

根據(jù)s(key1)(key2)(key3)可以知道12813進(jìn)程在等待unix_sock(ffff880238514980)

  1. crash>struct unix_sock ffff880238514980 | grep peer_wait -A 10 
  2.  
  3.   peer_wait = { 
  4.     lock = { 
  5.       raw_lock = { 
  6.         slock = 3369322707 
  7.       } 
  8.     }, 
  9.     task_list = { 
  10.       next = 0xffff880173427bc0, 
  11.       prev = 0xffff8801877a7bc0 
  12.     } 
  13.   } 

查詢出這個(gè)unix_sock是系統(tǒng)中的/dev/log文件(由syslog-ng創(chuàng)建,系統(tǒng)中大量需要記錄log的進(jìn)程需要通過這個(gè)unix_sock與syslog-ng通信,可以參考mansyslog-ng 和/etc/syslog-ng/syslog-ng.conf 配置文件)

  1. crash>struct unix_sock ffff880238514980 
  2. ... 
  3. dentry= 0xffff880e7634b9c0, 
  4. ... 
  5. crash>struct dentry 0xffff880e7634b9c0 
  6. ... 
  7.  name = 0xffff880e7634ba60 "log" 
  8.  ...  

遍歷這個(gè)unix_sock的所有等待隊(duì)列,

說明有645個(gè)進(jìn)程正在等待這個(gè)unix_sock(ffff880238514980/dev/log)

  1. crash>list __wait_queue.task_list  -s__wait_queue.private -H 0xffff880173427bc0 | grep -i private | wc -l 
  2. 645 

所有等待unix_sock的進(jìn)程重定向到一個(gè)wait_unix_sock_process文件

  1. crash>list __wait_queue.task_list  -s__wait_queue.private -H 0xffff880173427bc0 | grep -i private  > wait_unix_sock_process 

查詢所有的sshd進(jìn)程

  1. crash>ps | grep sshd 
  2.   7097     1   6  ffff880244cae5c0  IN  0.0   54088   1392 sshd 
  3.   12813  7097   8  ffff880262eda140  IN  0.0   60148   2900 sshd 
  4.   19055  7097   2  ffff880ff74c4200  IN  0.0   60148   2900 sshd 
  5.   21642  7097   1  ffff880262fb4340  IN  0.0   60148   2904 sshd 
  6.   21958  7097   1  ffff880ffab501c0  IN  0.0   60148   2900 sshd 
  7.   22459   7097  6  ffff880ff1ed4100  IN  0.0  121052  10272 sshd 
  8.   22476 22459   0  ffff88022d11a500  IN  0.0  121352   4552 sshd 
  9.   23334  7097   2  ffff880174b04640  IN  0.0   60148   2900 sshd 

sshd進(jìn)程大部分都在wait_unix_sock_process文件中,所以ssh登錄之后會(huì)卡住

查看syslog-ng進(jìn)程堆棧

  1. crash>bt 15232 
  2. PID:15232  TASK: ffff8801aba90680  CPU: 6  COMMAND: "syslog-ng" 
  3.  #0 [ffff88021ea8ba58] schedule atffffffff8139d2a4 
  4.  #1 [ffff88021ea8bb10] schedule_timeout atffffffff8139d935 
  5.  #2 [ffff88021ea8bba0] unix_wait_for_peer atffffffff81376e27 
  6.  #3 [ffff88021ea8bc00] unix_dgram_sendmsg atffffffff813785c2 
  7.  #4 [ffff88021ea8bcb0] sock_sendmsg atffffffff812e8ddc 
  8.  #5 [ffff88021ea8be50] sys_sendto atffffffff812e9318 
  9.  #6 [ffff88021ea8bf80] system_call_fastpath atffffffff81002f7b 

查看 unix_wait_for_peer()堆棧數(shù)據(jù):

  1. crash>rd -SS ffff88021ea8bba0 -e ffff88021ea8bc00 
  2. ffff88021ea8bba0:  unix_wait_for_peer+135 0000000000000001 
  3. ffff88021ea8bbb0:  [ffff8801aba90680:task_struct]autoremove_wake_function 
  4. ffff88021ea8bbc0:  ffff880fce8dfbc0 ffff880f98e1bbc0 
  5. ffff88021ea8bbd0:  memcpy_fromiovec+87 [ffff880238514980:UNIX] 
  6. ffff88021ea8bbe0:  [ffff880238514c30:UNIX][ffff880238514980:UNIX] (key4) 
  7. ffff88021ea8bbf0:  [ffff88104c1c3930:UNIX] 7fffffffffffffff 

由(key4)可知syslog-ng也是在等待ffff880238514980 unix_sock

所以系統(tǒng)中大量的進(jìn)程,包括sshd cron等其他的645個(gè)進(jìn)程都在等待unix_sock(/dev/log)(/dev/log由syslog-ng創(chuàng)建),syslog-ng卡住在等這個(gè)unix_sock之后,系統(tǒng)中大量的進(jìn)程都會(huì)卡住,包括sshd cron進(jìn)程等. 但是syslog-ng為什么卡住從vmcore根本看不出來,很可能進(jìn)程在用戶層鎖住了.

通過查看客戶系統(tǒng)中最近安裝的軟件發(fā)現(xiàn),他們最近安裝了兩個(gè)定制軟件,卸載之后系統(tǒng)恢復(fù)正常。

  1. # /bin/rpm -qa --last 
  2. CARKpam-11.01-1.19                    Tue Jun  9 22:49:22 2020 
  3. CARKaim-11.01-1.5                       Tue Jun  9 22:38:48 2020 

 

責(zé)任編輯:武曉燕 來源: 相遇Linux
相關(guān)推薦

2022-01-10 10:26:30

Kubernetes抓包環(huán)境

2023-11-06 07:45:42

單據(jù)圖片處理

2017-06-12 11:09:56

計(jì)數(shù)架構(gòu)數(shù)據(jù)庫

2021-02-01 09:00:34

Ceph octopu集群運(yùn)維

2021-03-18 23:47:18

MySQLselect索引

2011-06-28 10:41:50

DBA

2023-06-07 07:31:04

PC端app脫殼技巧

2019-09-12 09:40:34

秒殺系統(tǒng)高并發(fā)

2021-12-27 10:08:16

Python編程語言

2020-10-24 13:50:59

Python編程語言

2009-11-06 10:49:53

2022-01-10 09:31:17

Jetty異步處理seriesbaid

2010-09-07 15:31:20

SQL語句事務(wù)

2022-09-03 18:29:49

開發(fā)技術(shù)

2017-08-14 13:10:26

2014-08-01 14:06:45

2021-12-06 17:21:05

異常報(bào)錯(cuò)故障

2020-10-18 12:53:29

黑科技網(wǎng)站軟件

2020-03-18 13:07:16

華為

2017-01-23 12:40:45

設(shè)計(jì)演講報(bào)表數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)