VPS. Есть проблема с нагрузкой VPS сервера и нужен совет

toxi
6 років
0
Добрый день.
Есть проблема с нагрузкой VPS сервера и нужен совет:
Сейчас выбран ТП с "SSD VPS 2G". Загрузка CPU по данным программы htop и top, составляет в среднем 15.00-18.99, а максимальная нагрузка составляет 28.00-32.89. В статистике Zabbix, который ведет удаленный сервер, нагрузка составляет практически 95% при этом сайты открываются очень долго. Спасает ситуацию пока что кеш, но админка сайта с медиафайлами грузится по минуте-по две. Создать большой кеш так же не получится, так как оперативки занято чуть больше половины + активирован swap, так как MySQL постоянно падала. Сейчас swap занят тоже чуть больше половины из выделенных ему 2 ГБ.

Что можете подсказать по улучшению ЦП и чтобы постоянно не прыгать с тарифа на тариф?
Проблема именно в ЦП, так как оперативка и диск не забиты.
Василий С.
6 років
0
А чем процессор больше всего занят? si, wa, или какой-то конкретной службой?
toxi
6 років
0
А чем процессор больше всего занят? 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К пользователей)
Василий С.
6 років
0
Какой версии у вас PHP? 7.x быстрее чем 5.x, так что если используете 5-ую - попробуйте перейти на седьмую версию.
Какой процент утилизации диска показывает iostat -xyz 1? Раз вы вынуждены использовать swap, то может задержки возникают из-за интенсивной работы диска?
Какой процент нагрузки приходится на MySQL? Пробовали повлиять на производительность с этой стороны?
rudenko
6 років
0
StartServers 1
MinSpareServers 1
© toxi

Очень маленькие показатели, это будет приводить к тому, что несколько одновременных запросов на apache будут приводить к порождению процессов httpd, что будет потреблять ресурсы.
Для анализа нужно смотреть /server-status под нагрузкой.
toxi
6 років
0
Какой версии у вас 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К.
Анализ посмотрю, как будет следующая нагрузка.
rudenko
6 років
0
пришлите еще конфиг MySQL. Так как использовать swap совсем неправильно.
toxi
6 років
0
пришлите еще конфиг 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
toxi
6 років
0
Провел небольшое стерсс-тестирование. При 100 активных одновременных пользователях уже подвисает. При этом MySQL чувствует себя нормально. Провел изменения по данным настроек для low_memory. База не занимает больше 1,4 ГБ ОЗУ. Свап все равно оставил, так как в него кешируются данные, которые долгое время не используются и Свап теперь занят максимум до 500 МБ.

toxi
5 років
0
Что можете подсказать по этому вопросу еще?
Уже сам незнаю что делать: толи брать самый дорогой VPS, толи выделенный сервер либо ставить свой и на нем хостить сайт?
Artem.M
5 років
0
Есть одна идея. Отпишите на почту, а то здесь много писать.
Тема закрита.