Linux
Ubuntu HTTP 延遲陷入奇怪的分位數
我有一個 Ubuntu 10.10 伺服器,具有大量 RAM、頻寬和 CPU。在從 Apache 和 nginx 提供靜態文件時,我在延遲分佈中看到了一種奇怪的、可重複的模式。因為這個問題對兩個 http 伺服器都很常見,所以我想知道我是否配置錯誤或調整不當 Ubuntu 的網路或記憶體參數。
ab -n 1000 -c 4 http://apache-host/static-file.jpg
:Percentage of the requests served within a certain time (ms) 50% 5 66% 3007 75% 3009 80% 3011 90% 9021 95% 9032 98% 21068 99% 45105 100% 45105 (longest request)
ab -n 1000 -c 4 http://nginx-host/static-file.jpg
:Percentage of the requests served within a certain time (ms) 50% 19 66% 19 75% 3011 80% 3017 90% 9021 95% 12026 98% 12028 99% 18063 100% 18063 (longest request)
結果始終遵循這種模式 - 50% 或更多的請求按預期服務,然後其餘部分落入離散帶,最慢的幾個數量級慢。
Apache 是 2.x 並且安裝了 mod_php。nginx 是 1.0.x 並且安裝了Passenger(但是兩個應用伺服器都不應該在靜態文件的關鍵路徑中)。執行每個測試時,平均負載約為 1(伺服器有 12 個物理核心)。5GB 可用記憶體,7GB 記憶體交換。測試是從 localhost 執行的。
以下是我對 Ubuntu 伺服器 10.10 預設值所做的配置更改:
/etc/sysctl.conf: net.core.rmem_default = 65536 net.core.wmem_default = 65536 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_mem = 16777216 16777216 16777216 net.ipv4.tcp_window_scaling = 1 net.ipv4.route.flush = 1 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1 net.core.somaxconn = 8192 /etc/security/limits.conf: * hard nofile 65535 * soft nofile 65535 root hard nofile 65535 root soft nofile 65535 other config: ifconfig eth0 txqueuelen 1000
請讓我知道這種問題是否敲響了警鐘,或者有關配置的更多資訊是否會有所幫助。謝謝你的時間。
**更新:**這是我在增加後看到的內容,
net.netfilter.nf_conntrack_max
如下所示:Percentage of the requests served within a certain time (ms) 50% 2 66% 2 75% 2 80% 2 90% 3 95% 3 98% 3 99% 3 100% 5 (longest request)
取消您的評論,這是
nf_conntrack
完整的問題,您可以增加 conntrak 表:
sysctl -w net.netfilter.nf_conntrack_max=131072
或者,如果您已經在防火牆後面,您可以免除 HTTP 流量的連接跟踪:
# iptables -L -t raw Chain PREROUTING (policy ACCEPT) target prot opt source destination NOTRACK tcp -- anywhere anywhere tcp dpt:www NOTRACK tcp -- anywhere anywhere tcp spt:www Chain OUTPUT (policy ACCEPT) target prot opt source destination NOTRACK tcp -- anywhere anywhere tcp spt:www NOTRACK tcp -- anywhere anywhere tcp dpt:www