У меня есть выделенный сервер с этой информацией:
128G RAM
6 cores/12 threads CPU, 3.4GHz
512 SSD storage
WHM/Cpanel latest
Apache/MySQL
Centos 7.x
У меня есть единственный веб-сайт на этом сервере, который имеет большой трафик в определенное время каждого дня менее одного часа. При пиковом трафике около 6000 пользователей согласно статистике Google Analytics в реальном времени.
Среднее время загрузки страницы сервером примерно у 500 пользователей составляет около 0,15 секунды, а код веб-сайта очень оптимизирован для MySQL.
Проблема с сервером до 2000 одновременных пользователей никогда не возникает. После этого количества пользователей загрузка сервера иногда становится 100% и выше, а нагрузка mysql становится 600-900%, а веб-сайт загружается бесконечно и отображает страницу занятости сервера, и большую часть времени мне приходится перезапускать серверы mysql и apache.
Это мои текущие настройки в WHM для Apache:
Start Servers = 5
Minimum Spare Servers = 5
Maximum Spare Servers =10
Server Limit (Maximum: 20,000) = 5000
Max Request Workers = 5000
Max Connections Per Child = 10000
Max Keep-Alive Requests = unlimited
Timeout = 300
Это мои настройки для mysql в my.cnf, который по умолчанию WHM:
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[mysqld]
log-error=/var/lib/mysql/hosting.hostrose.com.err
performance-schema=0
default-storage-engine=MyISAM
innodb_file_per_table=1
innodb_buffer_pool_size=134217728
max_allowed_packet=268435456
open_files_limit=10000
max_connections=151
Мой вопрос, каковы наилучшие значения для этих варов, чтобы обслуживать такое количество пользователей без перегрузки или зависания сервера, особенно для номеров соединений apache и mysql.
Представленная информация противоречива:
2000 одновременных пользователей
max_connections = 151
Между тем, Apache ограничивает количество запросов до 20.
Предлагаю следующее:
Измените свои таблицы на InnoDB. MyISAM не подходит для параллелизма. После изменения увеличьте innodb_buffer_pool_size=134217728
к 90G
Больше обсуждения: http://mysql.rjweb.org/doc.php/myisam2innodb
Измените Apache на 30.
Оставьте 151 в покое; но проверьте
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Threads_running';
Первый говорит о том, сколько соединений было одновременно подключено к MySQL. Последний говорит, сколько человек что-то делали в данный момент.
загрузка mysql становится 600-900%, а веб-сайт загружается бесконечно и отображает страницу занятости сервера
Это означает, что у вас все еще есть некоторые запросы, которые нужно оптимизировать.
Для дальнейшего анализа (если настройки и запросы) следуйте инструкциям в http://mysql.rjweb.org/doc.php/mysql_analysis
Увеличьте максимальное количество подключений MySQL до> 4000 и проверьте производительность