Linux中擷取某個進程的系統調用以及參數(故障排查案例)_linux shell

來源:互聯網
上載者:User

當一個程式發生故障時,有時候想通過瞭解該進程正在執行的系統調用來排查問題。通常可以用 strace 來跟蹤。但是當進程已經處於 D 狀態(uninterruptible sleep)時,strace 也幫不上忙。這時候可以通過

複製代碼 代碼如下:
cat /proc/<PID>/syscall

來擷取當前的系統調用以及參數。


這裡用最近排查的一個問題為例。碰到的問題是,發現一台伺服器在執行 pvcreate 建立物理卷的時候卡死,進程狀態為 D

複製代碼 代碼如下:

# ps aux|grep pvcreate
root      8443  0.0  0.0  27096  2152 ?        D    Apr04   0:00 pvcreate /dev/sddlmac
...


D 狀態實際是在等待系統調用返回。那麼來看看究竟在等待什麼系統調用

複製代碼 代碼如下:

B0313010:~ # cat /proc/8443/syscall
0 0x7 0x70f000 0x1000 0x0 0x7f33e1532e80 0x7f33e1532ed8 0x7fff3a6b8718 0x7f33e128cf00

第一個數字是系統調用號,後面是參數。不同的系統調用所需的參數個數不同。這裡的欄位數是按最大參數數量來的,所以不一定每個參數欄位都有價值。那麼怎麼知道系統調用號對應哪個系統調用呢?在標頭檔 /usr/include/asm/unistd_64.h 中都有定義。也可以用個小指令碼來快速尋找:

複製代碼 代碼如下:

#!/bin/bash
# usage: whichsyscall <syscall_nr>
nr="$1"
file="/usr/include/asm/unistd_64.h"
gawk '$1=="#define" && $3=="'$nr'" {sub("^__NR_","",$2);print $2}' "$file"


對於不同的系統調用的參數,可以通過 man 2 <系統調用名> 查閱。如 man 2 read。對剛才那個例子來說,0 就對應了 read 調用。而 read 調用的第一個參數是檔案描述符。

之後用 lsof 找到 7 對應的是什麼檔案

複製代碼 代碼如下:

#  lsof -p 8443
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
......
pvcreate 8443 root    5u   CHR 10,236      0t0    19499 /dev/mapper/control
pvcreate 8443 root    6u   BLK  253,1   0t8192 36340797 /dev/dm-1
pvcreate 8443 root    7u   BLK  253,5      0t0 35667968 /dev/dm-5

結果發現是個 device mapper 的裝置檔案。最後順藤摸瓜,發現這個檔案是 multipathd 建立的。而系統應當使用的是儲存廠商提供的多重路徑軟體。問題是由於同時開啟了 multipathd 造成衝突導致的。

/proc/<PID>/syscall 對排查 D 狀態進程很有用。不過在 2.6.18 核心上並不支援,具體從哪個核心版本開始有這個功能,還沒查到。不過至少從在 2.6.32 以上版本都是支援的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.