Apache-2.2

如何配置 Apache 以使用更多 CPU?

  • January 20, 2012

Apache 執行緒堆積在我的一台 Web 伺服器上(300-500 個並發請求,有些需要 3-8 秒處理!),但 CPU 使用率非常低(~10%)。結果,頁面載入時間正在減慢。我有大量空閒的 CPU 資源。我怎樣才能更多地使用它來更快地處理這些執行緒?

這是頂部的頂部…

Tasks: 469 total,   1 running, 468 sleeping,   0 stopped,   0 zombie
Cpu(s):  8.1% us,  1.7% sy,  0.0% ni, 90.3% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   9181012k total,  7998772k used,  1182240k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                 
11351 apache    15   0  364m  30m  17m S 11.9  0.3   0:00.73 httpd                                                                                                                                                                                                                                                    
7527 apache    15   0  365m  36m  23m S  8.6  0.4   0:01.76 httpd                                                                                                                                                                                                                                                    
7607 apache    16   0  364m  35m  22m S  2.3  0.4   0:01.47 httpd                                                                                                                                                                                                                                                    
11498 apache    17   0  359m  19m  11m S  2.3  0.2   0:00.07 httpd                                                                                                                                                                                                                                                    
11497 apache    16   0  362m  23m  13m S  1.7  0.3   0:00.05 httpd                                                                                                                                                                                                                                                    
1840 apache    15   0  366m  44m  29m S  1.3  0.5   0:03.74 httpd                                                                                                                                                                                                                                                    
5358 apache    15   0  364m  36m  24m S  1.3  0.4   0:02.58 httpd                                                                                                                                                                                                                                                    
8090 apache    15   0  365m  31m  17m S  1.3  0.3   0:01.10 httpd                                                                                                                                                                                                                                                    
11346 apache    15   0  361m  28m  18m S  1.3  0.3   0:00.12 httpd                                                                                                                                                                                                                                                    
4051 apache    16   0  365m  40m  27m S  1.0  0.5   0:01.72 httpd                                                                                                                                                                                                                                                    
32575 apache    16   0  365m  42m  28m S  0.7  0.5   0:03.62 httpd                                                                                                                                                                                                                                                    
5145 apache    16   0  365m  37m  24m S  0.7  0.4   0:02.23 httpd                                                                                                                                                                                                                                                    
8173 apache    16   0  363m  35m  23m S  0.7  0.4   0:00.29 httpd                                                                                                                                                                                                                                                    
5466 apache    15   0  365m  31m  18m S  0.3  0.4   0:01.18 httpd                                                                                                                                                                                                                                                    
7420 apache    16   0  364m  36m  23m S  0.3  0.4   0:01.24 httpd                                                                                                                                                                                                                                                    
11485 apache    16   0  362m  23m  12m S  0.3  0.3   0:00.04 httpd                                                                                                                                                                                                                                                    
   1 root      15   0 10272  612  584 S  0.0  0.0   0:02.78 init                                                                                                                                                                                                                                                     
30129 root      16  -4 12536  400  396 S  0.0  0.0   0:00.00 udevd                                                                                                                                                                                                                                                    
30402 root      16   0  5840  580  480 S  0.0  0.0   0:14.01 syslogd                                                                                                                                                                                                                                                  
30414 rpc       18   0  7992  408  404 S  0.0  0.0   0:00.00 portmap                                                                                                                                                                                                                                                  
30439 root      18   0 10088  548  544 S  0.0  0.0   0:00.00 rpc.statd                                                                                                                                                                                                                                                
30478 memcache  15   0  141m 5364  516 S  0.0  0.1   1:16.34 memcached                                                                                                                                                                                                                                                
30496 root      16   0 60604  744  636 S  0.0  0.0   0:07.31 sshd                                                                                                                                                                                                                                                     
30507 root      15   0 21572  796  688 S  0.0  0.0   0:04.56 xinetd                                                                                                                                                                                                                                                   
31817 root      15   0  166m  932  860 S  0.0  0.0   0:00.03 httpsd                                                                                                                                                                                                                                                   
31820 psaadm    15   0  175m 7992 4596 S  0.0  0.1   0:02.31 httpsd                                                                                                                                                                                                                                                   
31924 root      15   0 19704  924  552 S  0.0  0.0   0:02.50 crond                                                                                                                                                                                                                                                    
13316 root      16   0 98528 3628 2796 S  0.0  0.0   0:00.01 sshd                                                                                                                                                                                                                                                     
1655 root      19   0  8600 1180  972 S  0.0  0.0   0:00.00 mysqld_safe                                                                                                                                                                                                                                              
1695 mysql     16   0 4268m 464m 4684 S  0.0  5.2  10:05.19 mysqld                                                                                                                                                                                                                                                   
32564 root      16   0 98528 3612 2780 S  0.0  0.0   0:00.00 sshd                                                                                                                                                                                                                                                     
28489 root      15   0 98528 3628 2796 S  0.0  0.0   0:00.00 sshd                                                                                                                                                                                                                                                     
32152 root      16   0 98528 3612 2780 S  0.0  0.0   0:00.01 sshd                                                                                                                                                                                                                                                     
5781 root      15   0 98528 3628 2796 S  0.0  0.0   0:00.01 sshd                                                                                                                                                                                                                                                     
7801 root      17   0  356m  11m 5472 S  0.0  0.1   0:05.74 httpd                                                                                                                                                                                                                                                    
7804 apache    16   0  366m  36m  21m S  0.0  0.4   0:00.35 httpd                                                                                                                                                                                                                                                    
7805 apache    16   0  370m  31m  13m S  0.0  0.4   0:00.11 httpd                                                                                                                                                                                                                                                    
8172 apache    15   0  366m  34m  19m S  0.0  0.4   0:00.62 httpd                                                                                                                                                                                                                                                    
9430 apache    16   0  365m  45m  32m S  0.0  0.5   0:02.67 httpd                                                                                                                                                                                                                                                    
11393 apache    16   0  363m  37m  25m S  0.0  0.4   0:00.75 httpd                                                                                                                                                                                                                                                    
11551 apache    17   0  360m  31m  22m S  0.0  0.4   0:00.24 httpd                                                                                                                                                                                                                                                    
32345 apache    16   0  364m  39m  27m S  0.0  0.4   0:02.86 httpd                                                                                                                                                                                                                                                    
32472 apache    16   0  394m  70m  27m S  0.0  0.8   0:03.77 httpd                                                                                                                                                                                                                                                    
32488 apache    16   0  364m  42m  29m S  0.0  0.5   0:02.38 httpd                                                                                                                                                                                                                                                    
32501 apache    16   0  365m  41m  28m S  0.0  0.5   0:01.71 httpd                                                                                                                                                                                                                                                    
32644 apache    16   0  365m  36m  23m S  0.0  0.4   0:01.79 httpd                                                                                                                                                                                                                                                    
32765 apache    15   0  364m  39m  26m S  0.0  0.4   0:02.65 httpd                                                                                                                                                                                                                                                    
1334 apache    16   0  368m  42m  26m S  0.0  0.5   0:02.77 httpd                                                                                                                                                                                                                                                    
1339 apache    15   0  362m  39m  29m S  0.0  0.4   0:01.84 httpd                                                                                                                                                                                                                                                    
1351 apache    15   0  364m  43m  30m S  0.0  0.5   0:02.59 httpd                                                                                                                                                                                                                                                    
1553 apache    16   0  363m  41m  29m S  0.0  0.5   0:02.74 httpd                                                                                                                                                                                                                                                    
1555 apache    16   0  365m  37m  24m S  0.0  0.4   0:01.59 httpd                                                                                                                                                                                                                                                    
1564 apache    15   0  365m  40m  27m S  0.0  0.5   0:01.88 httpd                                                                                                                                                                                                                                                    
1569 apache    16   0  364m  35m  22m S  0.0  0.4   0:00.63 httpd                                                                                                                                                                                                                                                    
1573 apache    15   0  367m  39m  24m S  0.0  0.4   0:01.66 httpd                                                                                                                                                                                                                                                    
1575 apache    16   0  363m  36m  24m S  0.0  0.4   0:01.88 httpd                                                                                                                                                                                                                                                    
1583 apache    16   0  364m  34m  21m S  0.0  0.4   0:01.92 httpd                                                                                                                                                                                                                                                    
1594 apache    15   0  367m  44m  29m S  0.0  0.5   0:03.71 httpd                                                                                                                                                                                                                                                    
1689 apache    15   0  365m  38m  24m S  0.0  0.4   0:01.47 httpd                                                                                                                                                                                                                                                    
1690 apache    15   0  365m  39m  26m S  0.0  0.4   0:01.18 httpd                                                                                                                                                                                                                                                    
1710 apache    16   0  363m  34m  23m S  0.0  0.4   0:00.99 httpd                                                                                                                                                                                                                                                    
1725 apache    15   0  364m  39m  26m S  0.0  0.4   0:01.80 httpd                                                                                                                                                                                                                                                    
1726 apache    16   0  365m  40m  26m S  0.0  0.5   0:00.90 httpd                                                                                                                                                                                                                                                    
1737 apache    16   0  364m  30m  17m S  0.0  0.3   0:00.46 httpd                                                                                                                                                                                                                                                    
1919 apache    15   0  363m  34m  22m S  0.0  0.4   0:00.83 httpd                                                                                                                                                                                                                                                    
1930 apache    16   0  364m  33m  21m S  0.0  0.4   0:00.50 httpd                                                                                                                                                                                                                                                    
1934 apache    15   0  364m  40m  27m S  0.0  0.5   0:02.20 httpd

和關鍵的 httpd.conf 設置:

Timeout 120
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 3

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

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

要將 Apache 配置為使用更多 CPU,您需要擺脫目前阻止 Apache 使用更多 CPU 的瓶頸。因為請求需要 3-8 秒才能完成,所以您知道存在某種瓶頸,您需要找到它。

要看的東西是:

  • 確定 Apache 主機是否是瓶頸。如果您uptime在請求需要 3-8 秒時執行,負載是否顯示為高(兩位數或三位數)?您無法對此進行深入了解,因為高負載可能意味著問題存在於其他地方,但如果負載低而請求需要 3-8 秒,則可能是一個遠端問題。
  • 如果您在其他機器上有此服務所需的資源,例如數據庫,請檢查那裡的系統負載。
  • 查看伺服器上“vmstat 1”的輸出。這將顯示系統使用率統計資訊,每秒更新一次。要查看的內容是“cpu wa”(如果是兩位數,則可能意味著磁碟已飽和)和“swap si/so”(如果這些非零,則表示您的記憶體不足)和“cpu id “(空閒 CPU 時間,如果它小於 10,則您的 CPU 已飽和)。如果“cpu sy”時間很高,這可能表明您分叉太多(也許 Apache MaxRequests 太低?)或其他核心級成本。按 Control-C 結束“vmstat 1”輸出。
  • 你可以執行“strace -p$$ AN APACHE PROCEED ID $$” 了解 Apache 程序在做什麼。這顯示了它們正在執行的系統呼叫,但如果您不熟悉系統呼叫,您有時可以通過讀取文本形式的輸出來獲取資訊。例如,上週我有一個和你的伺服器一樣的伺服器,strace 會暫停幾秒鐘,最後顯示的是一條日誌消息,我將它追踪到一個 PHP 文件,該文件正在向 syslog 發送一堆日誌消息。

如果你沒有安裝“munin”,你可能應該安裝。如果您這樣做,請查看圖表以了解當系統響應緩慢和執行良好時系統使用率如何變化。如果您在圖表中看到跳躍,則可能表明瓶頸在哪裡。如果您在所有圖表中看到空白區域,則可能意味著系統已飽和。如果只有 Apache 圖表為空白,則可能意味著 Apache 已達到其最大連接數,這可能是性能問題的副作用。

另請注意,如果您有多個 CPU,但在 Apache 後面有一個像 Zope 這樣的單執行緒應用程序,則可能是您的一個 CPU 已飽和,而其他 CPU 則處於空閒狀態。如果您在頂部按“1”,則會顯示每個核心的使用率。尋找一個始終處於 0% 空閒狀態的設備,而其他設備則空閒得多。

使用這些技術,我已經能夠隔離並解決與此類似的大多數性能問題。

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