Є така проблемка: є старий сервачок з 512М пам’яті, на якому крутиться apache2+php5+mysql. Останнім часом він не витримує навантаження: пам’ять фізична закінчується, починає юзатися кеш, при цьому сервер гальмує і до нього неможливо «достукатися» (netstat не показує ніякої підозрілої активності, себто це не DDOS, а природній процес).
Задача: як сконфігурувати апач так, щоб кількість одночасних з’єднань не перевищувала можливості сервера? Зараз це виглядає так (apache.conf, він же httpd.conf):
Timeout 60
#
# 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 50
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 10
##
## Server-Pool Size Regulation (MPM specific)
##
# 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
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 50
MaxRequestsPerChild 0
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2
MaxClients 50
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Як порадите встановити ці параметри? При цьому хочу, щоб ті, хто під’єднується, отримували помилку 500 в разі, якщо їх з’єднання перевищує норму (так, як на Твітері, наприклад).
Також вислухаю поради щодо конфігурування mysql в цьому випадку.