當可執行檔案在 Linux 上運行時,它會生成行程、執行緒、I/O ... 等,并使用來自 C/C 等語言的庫,有時可能會出現計時器問題,是否可以對其進行監控?如何深入了解這些軟體和流程以及后臺發生的情況?
我知道這些東西是從我身上抽象出來的,因為我不應該作為普通用戶擔心它,但我很好奇我會看到什么。
我需要看到的是:
- 此行程/執行緒的系統呼叫。
- 打開/關閉套接字。
- 記憶體管理和利用,正在訪問什么塊。
- 記憶體指令。
- 如果一個程序取決于另一個程序的結果。
- 如果一個行程/執行緒終止,為什么,它是否成功?
- I/O 操作和 DB 讀/寫(如果有)。
uj5u.com熱心網友回復:
您想要監控的不同事物可能需要不同的工具。我將在下面提到的所有工具都有大量的手冊頁,您可以在其中準確找到如何使用它們。
此行程/執行緒的系統呼叫。
strace命令正是這樣做的——它準確地列出了您的程式呼叫了哪些系統呼叫。ltrace工具類似,但側重于對庫函式的呼叫——不僅僅是系統呼叫(涉及內核)。
打開/關閉套接字。
strace/ltrace 命令將列出套接字創建等內容,但如果您想知道哪些套接字是打開的 - 已連接、正在偵聽等 - 現在,有netstat實用程式,它列出了所有已連接的(或使用 " -a",也監聽)系統中的套接字,以及它們屬于哪個行程。
記憶體管理和利用,正在訪問什么塊。記憶體指令。
ltrace 將再次讓您查看所有 malloc()/free() 呼叫,但要準確查看正在訪問的記憶體,您需要一個除錯器,例如gdb。問題是您的程式所做的幾乎所有事情都是“記憶體指令”,因此您需要確切地知道您在尋找什么,包括斷點、跟蹤點、單步執行等等,而且通常不只是想要查看程式中的每個記憶體訪問。
如果您不想查找所有記憶體訪問,而是要搜索該區域中的錯誤- 例如在釋放記憶體后訪問記憶體等等,有一些工具可以幫助您更輕松地找到這些錯誤。其中一個稱為ASAN(“Address Sanitizer”)內置于 C 編譯器中,因此您可以在啟用它的情況下進行構建并獲取有關錯誤訪問模式的訊息。您可以使用的另一個是valgrind。
最后,如果通過“記憶體利用率”您的意思是檢查您的行程或執行緒正在使用多少記憶體,那么ps和top都可以告訴您。
如果一個程序取決于另一個程序的結果。如果一個行程/執行緒終止,為什么,它是否成功?
我提到的各種工具(例如 strace/ltrace)會在它們遵循的行程退出時通知您。任何行程都可以列印其子行程之一的退出代碼,但我不知道有一種工具可以列印系統中所有行程的退出狀態。
輸入輸出操作
iostat可以定期匯總每個磁盤執行了多少 IO。netstat -s為您提供網路統計資訊,以便您查看完成了多少網路操作。vmstat為您提供由換入/換出引起的 IO 統計資訊(以防您遇到問題)。
和資料庫讀/寫(如果有)。
這取決于你的資料庫,我猜,以及你如何監控它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426440.html
上一篇:每次將每一行陣列傳遞給孩子
