Apache 未响应所有请求

Apache 未响应所有请求

设置:大约有+100 万部手机正在访问我的服务器。

服务器看起来不错。CPU 和 RAM 充足 - CPU 大约 90% 的时间处于空闲状态 (1)

数据库负载不大——每秒请求数少于 100 个(2)。

当我通过“Android Lost”之类的 Apache 代理访问服务器时,会出现超时。

当我直接访问应用程序服务器的 8080 端口时,我立即得到了回复。

到目前为止我所做的是:

  1. 重启所有服务、数据库、apache、jetty
  2. 重启服务器
  3. 尝试安装 nginx 而不是 apache (3)
  4. 尝试在端口 80 上运行 Jetty 并跳过 Apache
  5. 尝试调整服务器设置 (4)

对我来说,这听起来好像有大量请求试图袭击服务器,而 Apache 中的某个地方需要设置节流阀。

因此,我们将非常感谢任何提示或建议。

广告1:

top - 20:44:33 up 44 min,  2 users,  load average: 2.44, 1.86, 2.80
Tasks: 165 total,   2 running, 163 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.4%sy,  0.0%ni, 90.6%id,  7.5%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  12296928k total, 12154152k used,   142776k free,    83228k buffers
Swap:  6287292k total,        0k used,  6287292k free, 10461776k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
  447 root      20   0 7587m 841m  14m S    9  7.0   0:39.81 java                                                                   
 1287 mongodb   20   0  120g 272m 247m S    3  2.3   1:38.12 mongod                                                                 
   10 root      20   0     0    0    0 S    0  0.0   0:07.57 rcu_sched                                                              
  364 root       0 -20     0    0    0 S    0  0.0   0:00.96 kworker/0:1H                                                           
  381 www-data  20   0 1966m 8188 2164 S    0  0.1   0:00.72 apache2                                                                
15562 root      20   0 7706m 105m  11m S    0  0.9   0:13.56 java                                                                   
32636 www-data  20   0 1966m 8012 2236 S    0  0.1   0:00.72 apache2   

广告2:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 
     3     17      2      0       0       6       0  58.2g   120g   293m     11      1.7          0       0|0     0|0     3k     9k    43   20:49:40 
    11     46      8      0       0      24       0  58.2g   120g   295m      6      5.1          0       0|0     0|0    12k    21k    43   20:49:41 
    12     63     13      0       0      26       0  58.2g   120g   294m      3      1.3          0       0|0     0|0    17k    35k    43   20:49:42 
     5     45      6      0       0      12       0  58.2g   120g   296m      6      0.9          0       0|1     2|1    13k    22k    43   20:49:43 
     5     49      5      0       0      11       0  58.2g   120g   298m      5      0.1          0       0|0     0|0    13k    22k

广告 3:

来自 nginx 错误日志:

2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough

广告4:

http://www.eclipse.org/jetty/documentation/current/high-load.html#d0e14090

答案1

这是由于 nginx 没有足够的工作连接。你可以在 nginx 错误日志中看到它:

2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough 
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough

Nginx 可以服务的最大客户端数量使用以下公式计算:

max_clients = worker_processes * worker_connections - keepalive connections

nginx.conf可以设置worker_processes和的数量worker_connections。这通常位于主配置文件的顶部某处(http指令之前):

worker_processes 1;
events {
    worker_connections 128
}

您很可能已经设置了这些。我建议设置worker_processes为您拥有的 CPU 核心数,并在检查服务器性能时增加值,worker_connection直到找到您的服务器可以/需要处理的数字。

相关内容