動手之前應該想清楚,要用哪些工具來做,以及工具的使用順序又是怎麼樣的?
初步想法:top->iostat->pidstat
步驟1、top輸出
iowait很高,可能運行了io密集型應用
查看內存使用,Buffer/cache的內存佔用高達6G多,需要確認下緩存的使用是否合理?
步驟2、iostat輸出
每秒寫磁盤請求數是 64 ,寫大小是 32 MB,寫請求的響應時間爲 7 秒, 而請求隊列長度則達到了 1100。 超慢的響應時間和特長的請求隊列長度,進一步驗證了 I/O已經飽和的猜想。此時,sda 磁盤已 經遇到了嚴重的性能瓶頸。
步驟3、pidstat或iotop
輸出中顯示只有python的寫量比較大,此時我們把python進程的pid號記住。
前面講過,讀寫文件必須通過系統調用完成。觀察系統調用情況,就可以知道進程正在寫的文件。可採用strace工具
lsof 專門用於查看進程打開的文件列表,這裏的文件包括目錄、塊設備、動態庫、網絡套接字等。
lsof -p pid
FD:表示文件描述符
TYPE:文件類型
NAME:文件路徑
從而能定位到進程打開了哪些文件,和我們strace中尋找到的已打開日誌文件名稱是否符合?