O Apache não está respondendo a todos os pedidos

1

Configuração: tenho cerca de + 1 milhão de telefones que estão acessando meu servidor.

O servidor parece bem. Bastante CPU e RAM - a CPU está inativa em torno de 90% do tempo (1)

O banco de dados não está recebendo muita carga - menos de 100 solicita um segundo (2).

Quando acertei o servidor por meio de um proxy Apache como "Android Lost", recebi um tempo limite.

Quando acerto o servidor de aplicativos diretamente na porta 8080, recebo uma resposta imediatamente.

O que eu fiz até agora é:

  1. Reinicie todos os serviços, banco de dados, apache, jetty
  2. Reiniciou o servidor
  3. Tentou instalar o nginx em vez do apache (3)
  4. Tentei executar o Jetty na porta 80 e pular o Apache
  5. Tentou ajustar as configurações do servidor (4)

Para mim, parece que uma carga enorme de solicitações está tentando atingir o servidor e, em algum lugar, há um acelerador no Apache que precisa ser definido.

Portanto, qualquer sugestão ou sugestão seria muito apreciada.

Anúncio. 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   

Anúncio. 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

Anúncio. 3:

Do log de erros do 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

Anúncio. 4:

http://www.eclipse.org/jetty/documentation/current/high-load.html#d0e14090
    
por Theis 12.05.2014 / 21:32

1 resposta

2

Isso ocorre porque o nginx não possui conexões de trabalho suficientes. Você pode vê-lo no log de erros do 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

A quantidade máxima de clientes que o nginx pode atender é calculada com esta fórmula:

max_clients = worker_processes * worker_connections - keepalive connections

Em nginx.conf você pode definir o valor de worker_processes e worker_connections . Isso geralmente está no arquivo de configuração principal em algum lugar no topo (antes da diretiva http ):

worker_processes 1;
events {
    worker_connections 128
}

Você provavelmente terá esse conjunto. Eu recomendo definir worker_processes para o número de núcleos cpu que você possui e aumentar o valor de worker_connection durante a verificação do desempenho do servidor até encontrar o número que seu servidor pode / precisa manipular.

    
por 12.05.2014 / 21:58