使用strace追蹤多個程序

2021-09-08 04:13:41 字數 2915 閱讀 7662

strace是

linux環境下的一款程式除錯工具,用來監察乙個應用程式所使用的系統呼叫及它所接收的系統資訊。追蹤程式執行時的整個生命週期,輸出每乙個系統呼叫的名字,引數,返回值和執行消耗的時間等。

strace常用引數:

-p 跟蹤指定的程序

-f 跟蹤由fork子程序系統呼叫

-f 嘗試跟蹤vfork子程序系統調吸入,與-f同時出現時, vfork不被跟蹤

-o filename 預設strace將結果輸出到stdout。通過-o可以將輸出寫入到filename檔案中

-ff 常與-o選項一起使用,不同程序(子程序)產生的系統呼叫輸出到filename.pid檔案

-r 列印每乙個系統呼叫的相對時間

-t 在輸出中的每一行前加上時間資訊。 -tt 時間確定到微秒級。還可以使用-ttt列印相對時間

-v 輸出所有系統呼叫。預設情況下,一些頻繁呼叫的系統呼叫不會輸出

-s 指定每一行輸出字串的長度,預設是32。檔名一直全部輸出

-c 統計每種系統呼叫所執行的時間,呼叫次數,出錯次數。

-e expr 輸出過濾器,通過表示式,可以過濾出掉你不想要輸出

1. strace追蹤多個程序方法:

當有多個子程序的情況下,比如php-fpm、nginx等,用strace追蹤顯得很不方便。可以使用下面的方法來追蹤所有的子程序。

1

2

3

4

5

# vim /root/.bashrc //新增以下內容

functionstraceall"|sed's/\([0-9]*\)/-p \1/g')

} # source /root/.bashrc

執行:1

# traceall php-fpm

2. 追蹤web伺服器系統呼叫情況

1

2

# strace -f -f -s 1024 -o nginx-strace /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

# strace -f -f -o php-fpm-strace /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf

3. 追蹤mysql執行語句

1

2

# strace -f -f -ff -o mysqld-strace -s 1024 -p mysql_pid

# find ./ -name "mysqld-strace*" -type f -print |xargs grep -n "select.*from"

4. whatisdong---檢視程式在幹啥

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

# this script is from

nsamples=1

sleeptime=0

pid=$(pidof$1)

forxin$(seq1$nsamples)

dosleep$sleeptime

done|\

awk'

begin

/^thread/

/^\#/ else }

end '|\

sort|uniq-c|sort-r-n-k1,1

輸出:1

2

3

4

5

6

7

8

9

# profiler.sh mysqld

727pthread_cond_wait@@glibc_2.3.2,cache_thread,put_in_cache=true),handle_one_connection,start_thread,??

4pthread_cond_wait@@glibc_2.3.2,os_event_wait_low,os_aio_simulated_handle,fil_aio_wait,io_handler_thread,start_thread,??

4??,??

2read,my_real_read,my_net_read,do_command,handle_one_connection,start_thread,??

1pthread_cond_wait@@glibc_2.3.2,os_event_wait_low,srv_master_thread,start_thread,??

1pthread_cond_wait@@glibc_2.3.2,mysql_bin_log::wait_for_update,mysql_binlog_send,dispatch_command,do_command,handle_one_connection,start_thread,??

1do_sigwait,sigwait,signal_hand,start_thread,??

1

Linux 程序監控工具 Strace

最近在做蜜罐專案,因為要追蹤攻擊者的操作行為,所以想到通過攻擊者的ip獲取pid.那麼想知道程序都進行了哪些操作,讓我想到了strace工具。那麼strace都有哪些功能呢?總結如下 c 統計每一系統呼叫的所執行的時間,次數和出錯的次數等.d 輸出strace關於標準錯誤的除錯資訊.f 跟蹤由for...

strace實時檢視程序日誌輸出

在啟動程序的時候忘記重定向log到輸出檔案,或者terminal意外退出但是程式還在繼續執行,但我想看看程式執行的具體情況,看看程式輸出的log,這時候strace命令就派上用場了 strace命令 安裝方式 apt get install strace strace 來變通的看一下日誌,strac...

strace 跟蹤程序中的系統呼叫

strace常用來跟蹤程序執行時的系統呼叫和所接收的訊號。在linux世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置 比如讀取磁碟檔案,接收網路資料等等 時,必須由使用者態模式切換至核心態模式,通過系統呼叫訪問硬體裝置。strace可以跟蹤到乙個程序產生的系統呼叫,包括引數,返回值,執行消耗...