|
Добрый день.
Есть проблема с нагрузкой VPS сервера и нужен совет:
Сейчас выбран ТП с "SSD VPS 2G". Загрузка CPU по данным программы htop и top, составляет в среднем 15.00-18.99, а максимальная нагрузка составляет 28.00-32.89. В статистике Zabbix, который ведет удаленный сервер, нагрузка составляет практически 95% при этом сайты открываются очень долго. Спасает ситуацию пока что кеш, но админка сайта с медиафайлами грузится по минуте-по две. Создать большой кеш так же не получится, так как оперативки занято чуть больше половины + активирован swap, так как MySQL постоянно падала. Сейчас swap занят тоже чуть больше половины из выделенных ему 2 ГБ.
Что можете подсказать по улучшению ЦП и чтобы постоянно не прыгать с тарифа на тариф?
Проблема именно в ЦП, так как оперативка и диск не забиты.
|
|
А чем процессор больше всего занят? si, wa, или какой-то конкретной службой?
|
|
А чем процессор больше всего занят? si, wa, или какой-то конкретной службой?© Василий С.
На данный момент по статистике httpd (Apache2) нагружает процессор при посещении 8-10К (8000-10000) человек в день. В дальнейшем планируется нагрузка до 20К (20 000) человек в день (то есть нужен вариант, который позволит увеличить приток пользователей, но с наименьшим ущербом по скорости для VPS и для сайта). Nginx установлен, как прокси. Apache с пользователями не общается вообще, а получает ответы от nginx. Проект написан на CMS Wordpress с установленными плагинами для Landing Page. Установлен OPCache для попытки снизить нагрузку.
Настройки Apache2 оптимизированы под малый объем озу (2ГБ):
<IfModule itk.c> StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 35 #MaxClients 100 MaxClients 33 MaxRequestsPerChild 2048 KeepAlive On KeepAliveTimeout 30 HostnameLookups Off </IfModule>
Парамерты OPCache:
zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0 opcache.revalidate_freq=0 opcache.fast_shutdown=1 opcache.blacklist_filename=/etc/php.d/opcache*.blacklist ;opcache.force_restart_timeout=180
На сервере так же установлена почтовая служба для рассылки писем как раз тем, кто зарегался на сайте (это тоже около 5К-10К пользователей)
|
|
Какой версии у вас PHP? 7.x быстрее чем 5.x, так что если используете 5-ую - попробуйте перейти на седьмую версию.
Какой процент утилизации диска показывает iostat -xyz 1? Раз вы вынуждены использовать swap, то может задержки возникают из-за интенсивной работы диска?
Какой процент нагрузки приходится на MySQL? Пробовали повлиять на производительность с этой стороны?
|
|
StartServers 1
MinSpareServers 1© toxi
Очень маленькие показатели, это будет приводить к тому, что несколько одновременных запросов на apache будут приводить к порождению процессов httpd, что будет потреблять ресурсы.
Для анализа нужно смотреть /server-status под нагрузкой.
|
|
Какой версии у вас PHP? 7.x быстрее чем 5.x, так что если используете 5-ую - попробуйте перейти на седьмую версию.
Какой процент утилизации диска показывает iostat -xyz 1? Раз вы вынуждены использовать swap, то может задержки возникают из-за интенсивной работы диска?
Какой процент нагрузки приходится на MySQL? Пробовали повлиять на производительность с этой стороны?© Василий С.
PHP 5.6.38 (cli) (built: Sep 12 2018 08:52:18)
PHP 7.x попробую поставить и проверить работу на нем.
Процент утилизации диска посмотрю под нагрузкой. Swap вынужден использовать из-за нехватки памяти для MySQL, который падает при при 15-20 пользователях одновременно. Перенастройку MySQL проводили после падений. При текущих показателях MySQL, система живет достаточно долго при интенсивном посещении. С момента последней перенастройки прошел месяц примерно и swap занят на 1,2 ГБ из возможных 2 ГБ.
Очень маленькие показатели, это будет приводить к тому, что несколько одновременных запросов на apache будут приводить к порождению процессов httpd, что будет потреблять ресурсы.
Для анализа нужно смотреть /server-status под нагрузкой.© Илья
Какие минимальные показатели порекомендуете? Так как такие параметры брал с источника, который предоставляет параметры для low_memory и при этом держит на сервере до 5К-10К пользователей с 3 сайтами WP и 512 МБ RAM / 1 CPU. Ясное дело, что здесь скорее всего не используется ленденг страница и поэтому такой сильной нагрузки это не вызывает с пользователями до 5К-10К.
Анализ посмотрю, как будет следующая нагрузка.
|
|
пришлите еще конфиг MySQL. Так как использовать swap совсем неправильно.
|
|
пришлите еще конфиг MySQL. Так как использовать swap совсем неправильно.© Илья
Размер базы для одного сайта более 200 МБ. На VPS хостится 1 рабочий сайт и 5 субдоменов с такой же структурой сайта и копией оригинальной базы для технических нужд.
Первые настройки производил по подсказкам в phpmyadmin, которые он выдавал для более корректной работы базы.
Сначала был просто стандартный конфиг:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
[client] default-character-set=utf8
[mysql] default-character-set=utf8
[mysqld] collation-server = utf8_unicode_ci character-set-server = utf8
Текущая такая настройка (при которой база прожила достаточно долго без падений, ясное дело, что оно не совсем оптимизировано под малый объем памяти, так как результирующий объем использованной памяти по этим настройкам выходит далеко за 2 ГБ):
[mysqld] join_buffer_size = 128M sort_buffer_size = 128M read_rnd_buffer_size = 2M
innodb_log_file_size = 64M innodb_buffer_pool_size = 512M innodb_buffer_pool_instances = 1
max_heap_table_size = 256M tmp_table_size = 256M key_buffer_size = 400M table_open_cache = 1524288 open_files_limit = 500000
query_cache_size = 0 query_cache_type = 0 query_cache_limit = 4M
max_join_size = 1000000 thread_cache_size = 64
innodb_flush_log_at_trx_commit = 2
table_definition_cache = 2000
myisam_sort_buffer_size = 128M
symbolic-links=0
skip-name-resolve=1 performance_schema=on
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
[client] default-character-set=utf8
[mysql] default-character-set=utf8
[mysqld] collation-server = utf8_unicode_ci character-set-server = utf8
Настройки, которые рекомендуют попробовать для low_memory:
[mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking key_buffer = 16K max_allowed_packet = 1M table_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 64K # For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required skip-innodb # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [isamchk] key_buffer = 8M sort_buffer_size = 8M [myisamchk] key_buffer = 8M sort_buffer_size = 8M [mysqlhotcopy] interactive-timeout
|
|
Провел небольшое стерсс-тестирование. При 100 активных одновременных пользователях уже подвисает. При этом MySQL чувствует себя нормально. Провел изменения по данным настроек для low_memory. База не занимает больше 1,4 ГБ ОЗУ. Свап все равно оставил, так как в него кешируются данные, которые долгое время не используются и Свап теперь занят максимум до 500 МБ.
|
|
Что можете подсказать по этому вопросу еще?
Уже сам незнаю что делать: толи брать самый дорогой VPS, толи выделенный сервер либо ставить свой и на нем хостить сайт?
|
|
Есть одна идея. Отпишите на почту, а то здесь много писать.
|