strace的功用是追蹤process所呼叫的系統函式庫(system library)內容,透過他你可以了解process的執行動作與傳回值,這是一個診斷程式問題的絕佳工具。你可以透過strace -c 命令或是strace -p PID的方式去使用他,strace會持續輸出該命令或process呼叫system library所執行的動作,直到程式結束。
譬如說init是kernel開機後所執行的第一支程式其PID=1,kernel有很多的動作都會透過他,所以我們可以透過strace -p 1來持續的監控系統的行為:
strace -p 1
Process 1 attached - interrupt to quit
select(11, [10], NULL, NULL, {4, 60584}) = 0 (Timeout)
stat("/dev/initctl", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
fstat(10, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
stat("/dev/initctl", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
select(11, [10], NULL, NULL, {5, 0}) = 0 (Timeout)
stat("/dev/initctl", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
fstat(10, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
stat("/dev/initctl", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
select(11, [10], NULL, NULL, {5, 0}) = ? ERESTARTNOHAND (To be restarted)
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 3617
wait4(-1, 0x7fff5b9e015c, WNOHANG, NULL) = 0
rt_sigreturn(0xffffffffffffffff) = -1 EINTR (Interrupted system call)
stat("/dev/initctl", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
fstat(10, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
stat("/dev/initctl", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
...
[本系列文章]
Linux系統效能分析與探討 - [1] CPU的效能關鍵字
Linux系統效能分析與探討 - [2] 記憶體的效能關鍵字
Linux系統效能分析與探討 - [3] Linux作業系統網路模組的效能關鍵字
Linux系統效能分析與探討 - [4] Linux block device的效能關鍵字
Linux系統效能分析與探討 - [5] 了解process的運作的指令 1 - ps
Linux系統效能分析與探討 - [6] 了解process的運作的指令2 - top
Linux系統效能分析與探討 - [7] 了解process的運作的指令3 - pstree
Linux系統效能分析與探討 - [8] 了解process使用記憶體的狀況 - pmap
Linux系統效能分析與探討 - [9] 顯示系統的附載狀況 - uptime, w
Linux系統效能分析與探討 - [10] 顯示系統的狀態 - vmstat
Linux系統效能分析與探討 - [11] 檢視記憶體的使用狀況 - free
Linux系統效能分析與探討 - [12] 取得詳細記憶體資訊 - cat /proc/meminfo
Linux系統效能分析與探討 - [13] Kernel slab cache的資訊 - slabtop
Linux系統效能分析與探討 - [14] Kernel buddy system 的內容 - /proc/buddyinfo
Linux系統效能分析與探討 - [15] slabinfo
Linux系統效能分析與探討 - [16] 系統使用狀態: mpstat, sar
Linux系統效能分析與探討 - [17] CPU與disk的狀態 - iostat
Linux系統效能分析與探討 - [18] 更豐富的iostat內容
Linux系統效能分析與探討 - [19] 多核心的記憶體管理狀態 - numactl與numastat
Linux系統效能分析與探討 - [20] 豪華的系統監看工具 - nmon
每天看chiounan大大的文章,真的收獲良多,又學到了一個重要的指令,strace小弟收下了,謝謝
希望能透過這個指令,解開這一年來最大的謎...