婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux中獲取某個進程的系統調用以及參數(故障排查案例)

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

熱門標簽:揭陽智能電話機器人推薦 打電話機器人接我是他的秘書 客服外呼系統怎么樣 江蘇云電銷機器人公司 百度地圖標注錯了有責任嗎 河南信譽好的不封卡電話外呼系統 華鋒e路航港口地圖標注 地圖標注員都是年輕人 如果做線上地圖標注

當一個程序發生故障時,有時候想通過了解該進程正在執行的系統調用來排查問題。通常可以用 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 以上版本都是支持的。

您可能感興趣的文章:
  • Linux C中庫函數與系統調用的區別詳細解析
  • linux 系統調用與標準庫調用的區別詳細解析
  • 三種方法實現Linux系統調用
  • 基于Linux系統調用--getrlimit()與setrlimit()函數的方法
  • 詳解linux系統調用原理
  • Linux內核設備驅動之系統調用筆記整理
  • Linux被中斷的系統如何調用詳解

標簽:巴彥淖爾 婁底 馬鞍山 淘寶邀評 許昌 邵陽 赤峰 金昌

巨人網絡通訊聲明:本文標題《Linux中獲取某個進程的系統調用以及參數(故障排查案例)》,本文關鍵詞  Linux,中,獲取,某個,進程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux中獲取某個進程的系統調用以及參數(故障排查案例)》相關的同類信息!
  • 本頁收集關于Linux中獲取某個進程的系統調用以及參數(故障排查案例)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 成安县| 屏山县| 靖宇县| 陵川县| 东莞市| 辽源市| 屏南县| 石景山区| 密云县| 额敏县| 富源县| 于田县| 牟定县| 广东省| 黄石市| 南城县| 绍兴市| 大城县| 扎赉特旗| 黄陵县| 三明市| 青龙| 霍林郭勒市| 获嘉县| 大竹县| 隆子县| 寻乌县| 抚州市| 宣城市| 东丰县| 西城区| 田东县| 天柱县| 巴青县| 盘山县| 武安市| 沛县| 呼玛县| 乌拉特中旗| 景洪市| 湖口县|