服務器(Linux)緩衝跟蹤類型的系統調用分析

本文主要講解緩衝跟蹤型的系統調用分析,主要目的是爲了探究和分析CPU在內核或與用戶空間結合部分的系統調用細節,從中可以發現一些問題,用於性能或者其他問題研究。

首先是兩個概念:

  • 斷點跟蹤類型,其是在進行取樣時,中斷目標程序的執行來獲取數據的,比如strace命令。

  • 緩衝跟蹤類型,這就和斷點跟蹤不一樣了,它是可以將獲取到的檢測數據緩存在內核裏,而目標程序可以不中斷執行。dtrace命令就屬於緩衝跟蹤。

系統調用有很多,Linux操作系統可能就有幾百個(具體沒有統計)。

案例1:

我們以進程間通信相關的一個系統調用kill爲例來檢測系統中的具體情況。命令如下:

sudo dtrace -qn 'syscall::kill:entry { printf("%Y: %s (PID %d) sent a SIG %d to PID %d\n",walltimestamp,execname,pid,arg1,arg0);}'

執行結果如下,其中PID=1位init進程,它是所有其他用戶進程的祖先進程,並且會監視其他進程。

我們來分析下第一行:init 進程發送了一個SIG信號 15 到PID -13929,其中SIG 15 是指SIGTERM 信號

服務器(Linux)緩衝跟蹤類型的系統調用分析

案例2:

我們可以利用dtrace命令對Postgres數據庫進程進行系統調用分析。

命令:

sudo dtrace -n 'syscall:::entry /execname == "postgres"/ { @[probefunc] = count(); }'

執行結果如下,其中可以看到系統調用lseek/read_nocancel,調用比較多,其都是和文件操作相關,可以猜測此刻postgres數據庫在做文件的處理比較多,如果要深入分析還需要再看當前postgresql管理系統的其它指標,比如系統正在執行的動作,SQL,任務等。

服務器(Linux)緩衝跟蹤類型的系統調用分析

服務器(Linux)緩衝跟蹤類型的系統調用分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章