Apache-2.2

如何使用 netstat 和 httpd.conf 加速伺服器?

  • April 29, 2011

我正在使用 netstat 命令來幫助正確優化我的 httpd.conf。

結果如下:

netstat -an | grep -c :80
579
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
134 207.x.xx.134 //This was the highest result. Also this is my servers IP address

我知道我自己的 IP 地址返回 134 個 httpd 連接。我瀏覽了整個網站的腳本並刪除了所有以“http://”開頭的 css、js、php 連結——但我仍然獲得瞭如此多的連接!

我也在論壇上找到了這個命令,但不知道它顯示的是什麼:

ps auxww | grep httpd | wc -l
37

這是我的 httpd.conf:

Timeout 30
TraceEnable Off
ServerSignature Off
ServerTokens ProductOnly
FileETag None
StartServers 2
<IfModule prefork.c>
MinSpareServers 2
MaxSpareServers 4
</IfModule>
ServerLimit 250
MaxClients 800
MaxRequestsPerChild 50
KeepAlive On
KeepAliveTimeout 1
MaxKeepAliveRequests 10

我可以改變什麼來最大化我的混合伺服器?(執行 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz - 2GB Ram - MYSQL 重)。

謝謝。

一些評論,但請注意,鑑於要進行的資訊很少,其中大部分是有根據的猜測工作。如果它們不適合您,請隨意嘗試並忽略它們:

  • MaxRequestsPerChild非常低。除非您對此值有特定原因,否則將其設置為相當高的值(1000、10000 等)或 0 以完全禁用它。
  • 1 的AKeepAliveTimeout是合理的,儘管根據您的應用程序稍微高一點 (2-5) 或禁用 KeepAlive 可能會更好。
  • MaxClients800 和250對於ServerLimit2GB 伺服器來說太高了,更不用說執行 RAM 飢渴的 MySQL 了。例如,如果您希望將大約 1GB 的空間用於 Apache,則這些設置的更合理的值是 40-80。確切的值取決於每個 Apache 實例佔用多少記憶體。這些值非常高的危險在於,在高負載期間,機器將開始使用交換記憶體,這會將伺服器的性能降低到接近 0。
  • ps auxww | grep httpd | wc -l行僅計算正在執行的 Apache 子程序的數量(在本例中為 37 個)。mod_status擴展是一個更強大/有用的工具,可以確定有多少子程序正在執行以及它們在做什麼。
  • 我猜由於 MySQL 連接,您有 134 個來自您自己 IP 的連接,儘管取決於您執行的內容,可能還有其他來源。刪除其中帶有“http”的連結沒有意義,也不應該影響這個數字(除非您為此內容設置了一些特定的 Apache 代理)。
  • 使用時,netstat您可能希望包含一個grep ESTABLISHED僅列出目前建立的連接的管道,否則您會包含大量舊的 TIME_WAIT 連接。例如,在我的一台伺服器上,目前列出了 1300 個連接,其中實際上只有 3 個目前處於活動狀態。

netstat -anp |grep 'tcp\|udp' | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

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