天天看點

生産接口運作緩慢,莫慌-strace

面對以下問題:

生産服務突然卡住,接口響應緩慢

到底是什麼操作在消耗cpu

項目配置的檔案沒生效(如:spring boot多檔案根據優先級加載的)

針對以上問題,當束手無策的時候,strace他也許可以幫到你,他也在工作中幫我排除了衆多障礙。

strace 就是跟蹤程序行為的一大神器,你可以通過它知道正在執行的程序中到底發生了什麼,以及程式為什麼出現錯誤等等。

安裝方法

  • CentOS/EulerOS系統:# yum install strace
  • Ubuntu系統:# apt-get install strace –y

常用參數及示例

  • -c: 統計每一系統調用的所執行的時間、次數和出錯的次數等。示例:列印執行uptime時系統系統調用的時間、次數、出錯次數和syscall。# strace -c uptime
  • -i: 在系統調用時列印指令指針。
  • -e trace=file: 跟蹤所有以檔案名作為參數的系統調用。示例:列印執行ls時跟檔案有關的系統調用。# strace -e trace=file ls
  • -e trace=process: 跟蹤涉及過程管理的所有系統調用。這對于觀察程序的派生、等待和執行步驟很有用。
  • -e trace=network: 跟蹤所有與網絡相關的系統調用。
  • -e trace=signal: 跟蹤所有與信号相關的系統調用。
  • -e trace=ipc: 跟蹤所有與IPC相關的系統調用。

下面舉兩個實際使用的例子:

一:系統卡住問題排查

strace -tt -T -v -f -e trace=all -o strace.log -s 1024 -p [pid]

也可以随程序一起啟動此指令:

strace -tt -T -v -f -e trace=all -o strace.log -s 1024 lua test.lua

輸出服務所有的系統調用,檢視哪個系統調用消耗了大量的時間,我們先看線程阻塞在哪裡,以下發下是被write調用阻塞。

生産接口運作緩慢,莫慌-strace

我們再運作 strace -tt -T -v -f -e trace=all -o strace.log -s 1024 -p 19843

發現大量的write調用導緻系統運作緩慢(系統調用應該在微秒級别,如 0.000019秒,以下花費5s已經相當耗時了。)

生産接口運作緩慢,莫慌-strace

檢查代碼發現代碼裡print了較大的字元串。至于print标準出輸出為什麼會阻塞耗時,可以自行了解。

二:程式正在做什麼

通過strace -c -p [程序id] 連續運作幾次發現系統時間都花費在write操作上

生産接口運作緩慢,莫慌-strace

我們可以舉一反三,我們的系統基本都涉及到系統調用,可以使用此指令排查關于系統調用的大部分問題。至于每種系統調用的含義可以自行了解。

附上别的部落客寫的更詳細的使用方式:https://cloud.tencent.com/developer/article/2031834

繼續閱讀