Kernel

使用 ftrace 監視正在創建的文件?

  • February 4, 2019

我們在這種情況下:https ://stackoverflow.com/questions/7304826/how-to-debug-a-multithreaded-hung-process-in-linux

當我們嘗試查看一個流氓程序(消耗 100% CPU)時,它處於以下狀態:

ls -l /proc/XXXX/fd 
lrwx------ 1 root root 64 Feb  1 16:08 9 -> /tmp/.ZendSem.sdiU42 (deleted)

我們想知道文件中的內容(現在已被刪除),以嘗試追踪導致問題的原因。我認為 ftrace 可能能夠做到這一點(或者可能是另一個工具),但我不知道如何去做。

在此處輸入圖像描述

在此處輸入圖像描述

/tmp/.ZendSem.sdiU42是一個鎖定文件,在創建後立即被有意刪除。這足以防止這個鎖被其他執行緒取出。它還具有一旦程序消失就消失的好特性。查看 php 原始碼,ext/opcache/zend_shared_alloc.c


您需要收集更多關於您的應用程序正在做什麼以及它如何與軟體堆棧和核心互動的上下文。

辨識 Web 伺服器日誌中的 PID 並查看您是否可以辨識任何內容,可能是在工作人員被分叉時。

分析執行。在 Linux 上,執行perf top並查看最耗時的位置。為這個程序和核心安裝調試符號,直到你能理解函式名。ltrace另外,如果您想要類似strace但用於使用者庫呼叫的東西,請嘗試。

引用自:https://serverfault.com/questions/951818