Рейтинг:0

Использование памяти MySQL приводит к сбою сервера

флаг cn

Я просто хочу предварить это тем фактом, что я новичок в такой работе администратора сервера, но мне очень интересно и я хочу учиться. Я размещаю небольшой сайт WordPress на Digital Ocean, сайт относительно новый и практически не имеет трафика. Капля работает с типичным стеком LAMP и имеет 1 ГБ памяти, чего, по моему опыту, было достаточно в прошлом, поскольку я обычно не использую много плагинов и использую довольно легкие темы. Единственный установленный мной плагин, который я раньше не использовал, — это WordFence. В любом случае, во время разработки я иногда получаю сообщение об ошибке «Ошибка установления соединения с БД», иногда сайт вообще не загружается, а подключение через SSH очень медленное. Сегодня я столкнулся с проблемой, и после того, как она разрешилась сама собой, я подключился по SSH, чтобы посмотреть, что я могу найти. Ниже то, что мне удалось собрать:

вершина постоянно перечисляйте mysql наверху, так как его использование велико

1724 mysql 20 0 1333488 405436 0 S 0,7 40,5 0:11,53 mysqld

grep -Ei 'oom|недостаточно памяти' /var/log/syslog

25 января 15:18:40 ядро ​​капли: [599977.961722] oom_kill_process.cold+0xb/0x10
25 января 15:18:40 ядро ​​капли: [599977.961936] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
25 января 15:18:40 ядро ​​капли: [599977.962031] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mysql.service,task= mysqld,pid=31337,uid=112
25 января 15:18:40 ядро ​​капли: [599977.962130] Недостаточно памяти: убитый процесс 31337 (mysqld) total-vm: 1342776kB, anon-rss: 439804kB, file-rss: 0kB, shmem-rss: 0kB, UID: 112 pgtables:1264kB oom_score_adj:0
25 января 15:18:40 ядро ​​дроплета: [599978.039990] oom_reaper: собран процесс 31337 (mysqld), теперь anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
25 января, 15:26:50 ядро ​​дроплета: [600468.028506] systemd вызвал oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), порядок=0, oom_score_adj=0
25 января 15:26:50 ядро ​​капли: [600468.028534] oom_kill_process.cold+0xb/0x10
25 января 15:26:50 ядро ​​капли: [600468.028658] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
25 января 15:26:50 ядро ​​капли: [600468.028754] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mysql.service,task= mysqld,pid=67924,uid=112
25 января 15:26:50 ядро ​​капли: [600468.028885] Недостаточно памяти: убитый процесс 67924 (mysqld) total-vm: 1310584kB, anon-rss: 385228kB, file-rss: 0kB, shmem-rss: 0kB, UID: 112 pgtables:1132kB oom_score_adj:0
25 января, 15:26:50 ядро ​​дроплета: [600468.092875] oom_reaper: собран процесс 67924 (mysqld), теперь anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

Будучи новичком в этом, я не уверен, вызывает ли это беспокойство (возможно, какая-то атака) или это просто конфигурация, которую делает установка WordPress в один клик Digital Ocean, или, возможно, 1 ГБ памяти уже недостаточно. Любая информация будет принята с благодарностью!

флаг ua
Все ли компоненты находятся в одной капле? Или MySQL находится в собственной капле? Каково значение `innodb_buffer_pool_size`?
флаг cn
@RickJames Все в одной капле — PHP 8.0, MySQL8, Apache2, Ubuntu20.04 и WordPress. Запуск ``mysql> SELECT @@innodb_buffer_pool_size``` дал мне 134217728.
флаг ua
Я думаю, вам придется получить большую каплю. Это слишком много, чтобы втиснуться в одну каплю.
Рейтинг:0
флаг gp
Tim

Я не эксперт в MySQL, но я потратил немного времени на сокращение использования памяти MySQL 8.0 на некритическом личном сервере, на котором я работаю, и он работает нормально. Другие могут публиковать лучшие ответы - идите с ними по этому поводу.

Я запускаю сервер AWS EC2 t3a.nano с пятью экземплярами Wordpress, MySQL 8.x., PHP 7.x и несколькими другими вещами с 512 МБ ОЗУ и 1 ГБ подкачки, поэтому 1 ГБ достаточно для сайта с небольшим объемом. Вы можете добавить немного пространства подкачки, если хотите, ваша ОС будет выгружать данные, которые ей не нужны, чтобы у запущенных процессов было больше доступной оперативной памяти.

Вам нужно настроить MySQL для работы с ограниченным объемом памяти, например, уменьшить размер ОЗУ, буферы и отключить схему производительности.Сокращение использования оперативной памяти PHP также поможет уменьшить вероятность срабатывания убийцы памяти. MySQL 8.0 по-прежнему использует намного больше оперативной памяти, чем MySQL 5.6, хотя эксперт может уменьшить ее больше, чем я.

Вот ключевые части моей конфигурации MySQL 8 — отмечая здесь, что я не эксперт по MySQL, и вам следует провести некоторое исследование, чтобы понять эту конфигурацию, прежде чем применять ее. Некоторые из них могут быть значениями по умолчанию, но я обычно устанавливаю большинство параметров на минимальное допустимое значение.

Ваши файлы конфигурации могут находиться в разных местах. Убедитесь, что вы сделали резервную копию всего сервера, прежде чем начинать какие-либо изменения, и сделайте резервную копию ваших файлов, прежде чем вносить в них изменения.

/etc/mysql/conf.d/mysql.cnf

# Глобальные настройки
представление_схемы = ВЫКЛ.

innodb_buffer_pool_size=50M
innodb_flush_method=O_DIRECT
innodb_log_buffer_size = 1048576
innodb_log_file_size=4194304
innodb_max_undo_log_size=10485760
innodb_sort_buffer_size=64K
innodb_ft_cache_size=1600000
innodb_max_undo_log_size=10485760
макс_подключения = 20
key_buffer_size=1M

# настройки для каждого потока
thread_stack=140K
thread_cache_size = 2
read_buffer_size = 8200
read_rnd_buffer_size=8200
max_heap_table_size=16K
tmp_table_size=128K
temptable_max_ram=2097152
bulk_insert_buffer_size=0
join_buffer_size=128
net_buffer_length=1K

/etc/mysql/mysql.conf.d/mysqld.cnf

key_buffer_size = 16M
thread_stack = 256 КБ

Вот некоторые изменения, которые я внес в конфигурацию PHP, чтобы уменьшить использование оперативной памяти.

/etc/php/7.4/fpm/pool.d/www.conf

pm.max_children = 3
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1
pm.process_idle_timeout = 20 с;
pm.max_requests = 50
php_admin_value[memory_limit] = 64M

Статистика сервера

Вот немного статистики от команды серверов 'top'

В целом

  • Память 448 МБ, 42 МБ свободно, 190 МБ используется, 216 МБ буфер/кэш
  • Swap 1024, 725 МБ свободно, 300 МБ занято

Процессы

  • MySQL Virt 1459020 Res 44696 ЦП 3% Память 10%
  • PHP FPM 7.x Virt 223124 Res 32464 CPU 0% Mem 7%
  • Nginx Virt 63932 Res 7520 ЦП 0% Память 2%

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.