Apache не отвечает на все запросы

Apache не отвечает на все запросы

Настройка: У меня около 1 млн телефонов, подключающихся к моему серверу.

Сервер выглядит нормально. Достаточно и ЦП, и ОЗУ - ЦП простаивает около 90% времени (1)

База данных не получает большой нагрузки — менее 100 запросов в секунду (2).

Когда я подключаюсь к серверу через прокси Apache, например «Android Lost», я получаю тайм-аут.

Когда я обращаюсь к серверу приложений напрямую через порт 8080, я сразу получаю ответ.

На данный момент я сделал следующее:

  1. Перезапустите все службы, базу данных, Apache, Jetty
  2. Перезагрузил сервер.
  3. Попробовал установить nginx вместо apache (3)
  4. Попробовал запустить Jetty на порту 80 и пропустить 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на число ядер процессора, которое у вас есть, и увеличивать его, worker_connectionпроверяя производительность сервера, пока не найдете число, которое ваш сервер может/должен обработать.

Связанный контент