В последнее время я заметил странное поведение на своем рабочем сервере веб-сайта WordPress с умеренным трафиком. (одновременный трафик в реальном времени около ~ 1500)
Сервер способен:
DigitalOcean 48GB Memory
16 Core Processor
480GB SSD Disk
Проблема в том, что средняя нагрузка (LA) остается на уровне 6 примерно в течение 30 минут, затем постепенно увеличивается до примерно 33, а затем остается на уровне 33 в течение примерно 30 мин. Затем возвращается к 6 (нормальный) и продолжается бесконечно.
Когда LA составляет 20+, сайт становится ужасно медленным для открытия. Очевидно, что мои посетители разочаровываются и покидают сайт, потому что он открывается бесконечно. И из-за этого я теряю посетителей. : (
Изменены некоторые настройки nginx, php-frm, sysctl.conf, mysql (my.cnf), но похоже, что ничего не работает.
nginx.conf
user www-data;
worker_processes 16;
worker_rlimit_nofile 100000;
pid /run/nginx.pid;
events {
worker_connections 4096;
multi_accept on;
}
Но мой ulimit -n
возвращает только 1024
php.ini
max_execution_time = 30
max_input_time = 60
max_input_vars = 5000
memory_limit = 128M
post_max_size = 100M
default_socket_timeout = 60
pdo_mysql.cache_size = 2000
www.conf
listen = 127.0.0.1:9090
listen.backlog = 65536
pm = static
pm.max_children = 500
pm.start_servers = 60
pm.min_spare_servers = 45
pm.max_spare_servers = 75
pm.max_requests = 5000
request_terminate_timeout = 300
sysctl.conf
fs.file-max = 2097152
# Do less swapping
vm.swappiness = 10
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for connections to keep alive
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
### TUNING NETWORK PERFORMANCE ###
# Default Socket Receive Buffer
net.core.rmem_default = 31457280
# Maximum Socket Receive Buffer
net.core.rmem_max = 12582912
# Default Socket Send Buffer
net.core.wmem_default = 31457280
# Maximum Socket Send Buffer
net.core.wmem_max = 12582912
# Increase number of incoming connections
net.core.somaxconn = 65536
# Increase number of incoming connections backlog
net.core.netdev_max_backlog = 65536
# Increase the maximum amount of option memory buffers
net.core.optmem_max = 25165824
# Increase the maximum total buffer-space allocatable
# This is measured in units of pages (4096 bytes)
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
# Increase the read-buffer space allocatable
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.udp_rmem_min = 16384
# Increase the write-buffer-space allocatable
net.ipv4.tcp_wmem = 8192 65536 16777216
net.ipv4.udp_wmem_min = 16384
# Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
my.cnf
#
# * Fine Tuning
#
max_connections = 1000
connect_timeout = 5
wait_timeout = 600
max_allowed_packet = 16M
thread_cache_size = 128
sort_buffer_size = 4M
bulk_insert_buffer_size = 16M
tmp_table_size = 32M
max_heap_table_size = 32M
query_cache_limit = 128K
query_cache_size = 64M
innodb_buffer_pool_size = 1024M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
Может ли кто-нибудь направить меня в правильном направлении?
EDIT
Согласно вашему снимку экрана, показывающему 599% ЦП в mysqld
, база данных является источником ваших проблем.
Я бы вернул все файлы, которые вы «настроили» их настройки по умолчанию. Скорее всего, вы изменили что-то после случайного поиска в Google, когда вы не знали, в чем была настоящая проблема.
После этого вам следует запустить MySQL Tuner , чтобы получить предложения о том, где вы должны настроить свой my Настройки .cnf
(например, innodb кеш, скорее всего, слишком мал). После этого вы также захотите проверить журнал медленных запросов.
После внесения этих изменений, если у вас все еще есть проблемы, создайте новый вопрос с подробным описанием проблем с вашей базой данных (предполагая, что myslqd
по-прежнему является источником проблем).
Не могли бы вы проверить корреляцию между загрузкой ЦП, количеством сетевых подключений и исходящим трафиком?
Также будет полезно проанализировать статистику ввода-вывода. Возможно, вам придется увеличить счетчик worker_process
, если ввод-вывод перегружен.
Другой хороший способ - запустить chkrootkit
на всякий случай и взглянуть на auth.log
на случай необычных действий.
Надеюсь, у вас есть защищенный wordpress REST API .