Ubuntu HTTP 延迟陷入奇怪的分位数

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 缓存交换。测试从本地主机运行。

以下是我根据 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)

答案1

根据您的评论,这是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

相关内容