Linux

使用哪個 pid 來跟踪我的 apache

  • August 30, 2012

我的 apache2 執行緩慢。單個 PHP 文件需要很長時間來處理。伺服器是實時的。我不想重新啟動它。所以我想我附上strace它並檢查發生了什麼。

所以我跑

strace -p `cat /var/run/apache2.pid `

之後我載入了一些測試網址。然後載入多次。strace但是我在控制台上沒有看到任何輸出!

然後我記得有很多子程序。所以我檢查了他們

$ ps ax | grep apache[2] -i
1877 ?        Ss     0:02 /usr/sbin/apache2 -k start
2006 ?        S      0:00 /usr/sbin/apache2 -k start
2007 ?        S      0:00 /usr/sbin/apache2 -k start
2008 ?        S      0:00 /usr/sbin/apache2 -k start
2009 ?        S      0:00 /usr/sbin/apache2 -k start
2010 ?        S      0:00 /usr/sbin/apache2 -k start
9985 ?        S      0:00 /usr/sbin/apache2 -k start
9988 ?        S      0:00 /usr/sbin/apache2 -k start
9997 ?        S      0:00 /usr/sbin/apache2 -k start
9998 ?        S      0:00 /usr/sbin/apache2 -k start
9999 ?        S      0:00 /usr/sbin/apache2 -k start

現在我的問題是如何跟踪所有這些子程序?我怎麼知道現在哪個子程序正在處理請求?

簡短的回答:您無法預測哪個 apache 程序將處理請求。

解決這個問題的最簡單方法是為每個 apache 程序分配一個 xterm,並strace -p <pid>為每個 apache pid 在其中執行。

當我處於這種情況時,我通常在我的httpd.conf(在開發框中)執行此操作:

<IfModule prefork.c>
StartServers       1  <--------
MinSpareServers    1  <--------
#StartServers       8
#MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

這減少了我需要監控的程序數量……顯然這不是生產環境的好解決方案。

僅供參考,如果您需要strace一個在您啟動後會分叉的程序stracing(例如,一個wsgi程序),您可以使用strace -fp <pid_of_future_forker>它,它會strace自動分叉子代。

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