Почему средняя загрузка моего хостингового сервера Linux продолжает колебаться с 6 до 33?

В последнее время я заметил странное поведение на своем рабочем сервере веб-сайта 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

TOP снимок экрана при средней нагрузке 30+ enter image description here

0
задан 3 May 2020 в 19:48
2 ответа

Согласно вашему снимку экрана, показывающему 599% ЦП в mysqld , база данных является источником ваших проблем.

Я бы вернул все файлы, которые вы «настроили» их настройки по умолчанию. Скорее всего, вы изменили что-то после случайного поиска в Google, когда вы не знали, в чем была настоящая проблема.

После этого вам следует запустить MySQL Tuner , чтобы получить предложения о том, где вы должны настроить свой my Настройки .cnf (например, innodb кеш, скорее всего, слишком мал). После этого вы также захотите проверить журнал медленных запросов.

После внесения этих изменений, если у вас все еще есть проблемы, создайте новый вопрос с подробным описанием проблем с вашей базой данных (предполагая, что myslqd по-прежнему является источником проблем).

1
ответ дан 4 January 2021 в 09:33

Не могли бы вы проверить корреляцию между загрузкой ЦП, количеством сетевых подключений и исходящим трафиком?

Также будет полезно проанализировать статистику ввода-вывода. Возможно, вам придется увеличить счетчик worker_process , если ввод-вывод перегружен.

Другой хороший способ - запустить chkrootkit на всякий случай и взглянуть на auth.log на случай необычных действий.

Надеюсь, у вас есть защищенный wordpress REST API .

0
ответ дан 4 January 2021 в 09:33

Теги

Похожие вопросы