Linux
使用哪個 pid 來跟踪我的 apache
我的 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
自動分叉子代。