Конфигурация Apache для просмотра больших страниц, пользователей с длинными сеансами - переменные KeepAlive и MaxRequest - PullRequest
2 голосов
/ 05 августа 2010

В настоящее время я запускаю веб-приложение, в котором несколько (~ 15) пользователей входят в систему один раз в день, а затем оставляют веб-приложение открытым, где оно автоматически обновляется новым контентом каждые 5 минут.Каждый пользователь имеет тенденцию открывать его в течение 15-18 часов.

Однако при критической массе (~ 30-40) пользователей все начинает резко замедляться, и процесс HTTPD начинает всплывать в использовании памяти.Я добавил работу cron, которая перезапускает apache раз в час, но это только помогает.Весь контент генерируется динамически и новое время вахты, поэтому кэширование страниц не вариант.

Я начал играть с параметрами Timeout, MaxRequest и KeepAlive, но любые рекомендации будут с благодарностью, так какЯ всегда оставлял их по умолчанию в прошлом.

Вот что у меня есть.Любые гении apache имеют идеи о том, как оптимизировать этот конфиг для сценария выше?Я полагал, что длительный тайм-аут хорош, потому что время загрузки может иногда быть ОЧЕНЬ высоким.

# Timeout: The number of seconds before receives and sends time out.

Timeout 200

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.

KeepAlive On

# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.

MaxKeepAliveRequests 100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.

KeepAliveTimeout 60

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       16
MinSpareServers    10
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

1 Ответ

2 голосов
/ 05 августа 2010

Это, вероятно, хороший вопрос, чтобы перейти к ServerFault .

Ваш сервер, вероятно, подкачки (нехватка оперативной памяти).

Ваша директива MaxClients должна выглядеть примерно так:

MaxClients ≈ (RAM - size_all_other_processes)/(size_apache_process)

Вы можете посмотреть несколько статей, в которых объясняется, как настроить apache .

Перезапуск Cron нет! хорошая идея. Может быть, один раз в день. Но не пытайтесь решить эту проблему таким образом.

Надеюсь, это поможет!

...