Linux

Ubuntu HTTP 延遲陷入奇怪的分位數

  • October 26, 2011

我有一個 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

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