Назад | Перейти на главную страницу

Производительность Apache очень высокая

У моей компании сайт с интенсивным трафиком, около 150 тысяч в день.

Каждый раз после перезапуска apache загрузка сайта происходит очень быстро. Проблема всегда возникает через пару часов.

Конфигурация сервера:

Intel Core i3-2100 (3.1 GHz)
8 GB RAM

Серверный apache запускает процессы:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
35986 apache    20   0 1046m  15m 6912 D 24.9  0.1   0:00.86 httpd                                                                                                      
35984 apache    20   0 1046m  15m 6916 D 21.9  0.1   0:00.78 httpd                                                                                                      
35987 apache    20   0 1046m  15m 6916 D 21.6  0.1   0:00.76 httpd                                                                                                      
35774 apache    20   0 1054m  35m  19m D  7.6  0.2   0:04.76 httpd                                                                                                      
35947 apache    20   0 1061m  43m  29m D  7.6  0.3   0:02.05 httpd                                                                                                      
35949 apache    20   0 1061m  44m  29m D  7.6  0.3   0:02.42 httpd                                                                                                      
35951 apache    20   0 1046m  15m 6912 D  7.6  0.1   0:01.69 httpd                                                                                                      
35952 apache    20   0 1046m  15m 6912 D  7.6  0.1   0:01.70 httpd                                                                                                      
35953 apache    20   0 1045m  15m 6900 D  7.6  0.1   0:01.48 httpd                                                                                                      
35983 apache    20   0 1046m  15m 6912 D  7.6  0.1   0:01.00 httpd                                                                                                      
35418 apache    20   0 1067m  84m  64m D  7.3  0.5   1:14.12 httpd                                                                                                      
35761 apache    20   0 1054m  36m  19m D  7.3  0.2   0:10.78 httpd                                                                                                      
35770 apache    20   0 1066m  59m  39m D  7.3  0.4   0:04.12 httpd                                                                                                      
35771 apache    20   0 1056m  36m  19m D  7.3  0.2   0:05.51 httpd 

Это результат ab сразу после перезапуска apache:

ab -n 300 -c 30 http://www.vibiznews.com/

Server Software:        Apache
Server Hostname:        www.vibiznews.com
Server Port:            80

Document Path:          /
Document Length:        182372 bytes

Concurrency Level:      30
Time taken for tests:   40.708 seconds
Complete requests:      30
Failed requests:        15
   (Connect: 0, Receive: 0, Length: 15, Exceptions: 0)
Write errors:           0
Total transferred:      5475675 bytes
HTML transferred:       5471175 bytes
Requests per second:    0.74 [#/sec] (mean)
Time per request:       40708.364 [ms] (mean)
Time per request:       1356.945 [ms] (mean, across all concurrent requests)
Transfer rate:          131.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        5    6   1.4      5       8
Processing: 17815 28229 9292.6  33340   40703
Waiting:    17731 28121 9339.8  33295   40666
Total:      17820 28235 9292.4  33345   40708

Percentage of the requests served within a certain time (ms)
  50%  33345
  66%  35458
  75%  37776
  80%  38302
  90%  39178
  95%  39302
  98%  40708
  99%  40708
 100%  40708 (longest request)

Вот моя текущая конфигурация Apache:

Apache API Version  20120211

StartServers 5
MaxClients 220
ServerLimit 220
MinSpareServers 8
MaxSpareServers 16
MaxRequestsPerChild 4000

Через пару часов ab привел к apr_pollset_poll: The timeout specified has expired (70007

Я рассчитал Max Client следующим образом: 8196 (физическая память) / 35 (среднее использование памяти Apache) = 234,17, округленное до 230, чтобы освободить место для других процессов, кроме apache.

У меня вопрос, оптимальна ли конфигурация apache для данного условия?

Я обычно вижу, что другие настройки StartServer и MinSpareServer составляют около 10, а MaxRequestsPerChild - 0.

Безопасна ли эта конфигурация, особенно значение MaxRequestsPerChild равным 0? Если да, то в чем польза?

Любая мысль будет принята с благодарностью.

Спасибо!

Это не ответ, но он слишком длинный для комментария, и на вопрос нельзя ответить в его текущей форме.

около 150к ежедневно

150 тыс. какие? Единственные действительно важные показатели - это количество одновременных обращений / средняя продолжительность.

Вы не предоставили подробностей о том, что такое трафик - очевидно, что он НЕ обслуживает статический контент. Вы не предоставили никаких подробностей.

1,3 секунды на запрос - это очень медленно.

ServerLimit 220

Кажется очень низким.

35 (среднее использование памяти Apache)

Как ты это получил?

Это неправильный способ расчета serverlimit / maxclients. Попробуйте измерить свободную память (меньше буферов / кеша) на разных уровнях нагрузки и построить график зависимости от количества серверов.

На то, чтобы решить, какие правильные вопросы о производительности здесь, потребуется как минимум пара часов для того, кто знает, что делает, - поиск ответов займет больше времени.

Вы должны иметь возможность запускать намного больше серверов, чем это, но ваша проблема с производительностью не в конфигурации httpd.