[英]How to monitor processes on linux
當可執行文件在 Linux 上運行時,它會生成進程、線程、I/O... 等,並使用來自 C/C++ 等語言的庫,有時可能會出現計時器問題,是否可以對此進行監控? 如何深入了解這些軟件和流程以及后台發生的情況?
我知道這些東西是從我身上抽象出來的,因為作為普通用戶,我不應該擔心它,但我很好奇我會看到什么。
我需要看到的是:
頂呢?
在那個頁面上有不止一個 linux/Unix 命令,它們可能會派上用場。
您想要監控的不同事物可能需要不同的工具。 我將在下面提到的所有工具都有大量的手冊頁,您可以在其中准確找到如何使用它們。
此進程/線程的系統調用。
strace命令正是這樣做的——它准確地列出了您的程序調用了哪些系統調用。 ltrace工具類似,但側重於對庫函數的調用——不僅僅是系統調用(涉及內核)。
打開/關閉 sockets。
strace/ltrace 命令將列出套接字創建等內容,但如果您想知道哪些 sockets 已打開 - 已連接、正在偵聽等 - 現在,有netstat實用程序,它列出了所有已連接的(或帶有“ -a",也在監聽)系統中的sockets,以及它們屬於哪個進程。
Memory 管理和利用,正在訪問什么塊。 Memory 指令。
再次 ltrace 將讓您查看所有 malloc()/free() 調用,但要確切了解 memory 正在訪問的位置,您需要一個調試器,例如gdb 。 問題是您的程序所做的幾乎所有事情都是“內存指令”,因此您需要確切地知道您在尋找什么,包括斷點、跟蹤點、單步執行等等,而且通常不只是想要查看程序中的每個 memory 訪問。
如果您不想找到所有 memory 訪問,而是要搜索該區域中的錯誤- 例如在 memory 被釋放后訪問等等,有一些工具可以幫助您更輕松地找到這些錯誤。 其中一個稱為ASAN (“Address Sanitizer”)內置於 C++ 編譯器中,因此您可以啟用它進行構建並獲取有關錯誤訪問模式的消息。 您可以使用的另一個是valgrind 。
最后,如果通過“內存利用率”來檢查您的進程或線程正在使用多少 memory,那么ps和top都可以告訴您。
如果一個過程取決於另一個過程的結果。 如果一個進程/線程終止,為什么,它是否成功?
我提到的各種工具(例如 strace/ltrace)會在它們遵循的進程退出時通知您。 任何進程都可以打印其子進程之一的退出代碼,但我不知道有一種工具可以打印系統中所有進程的退出狀態。
輸入輸出操作
有iostat可以定期總結每個磁盤執行了多少 IO。 netstat -s為您提供網絡統計信息,以便您查看完成了多少網絡操作。 vmstat為您提供由換入/換出引起的 IO 的統計信息(以防您遇到問題)。
和數據庫讀/寫(如果有)。
這取決於你的數據庫,我猜,以及你如何監控它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.