У меня проблема, когда в mysqld заканчиваются потоки и возникают ошибки при большой нагрузке. Я проследил это до проблемы, когда pid кажется ограниченным мягким пределом в 1024 процесса (удалили другие ограничения для удобочитаемости):
[root@db1 limits.d]# cat /proc/`pidof mysqld`/limits
Limit Soft Limit Hard Limit Units
Max processes 1024 191967 processes
У меня есть файл в /etc/security/limits.d/ под названием 99-mysql.conf, который содержит:
mysql soft nofile 20000
mysql hard nofile 20000
mysql soft nproc 20000
mysql hard nproc 20000
Насколько я понимаю, проблема связана с запуском MySQL пользователем. Я не тестировал это, но предполагаю, что если MySQL запускается системой во время загрузки, то у нее должны быть правильные ограничения.
Есть ли способ увеличить мягкий предел для nproc для этого pid и для будущих процессов mysqld?
Найдите и удалите все записи в:
/etc/security/limits.d/90-nproc.conf
Также добавьте в свой файл limits.d:
root soft nofile 20000
root hard nofile 20000
root soft nproc 20000
root hard nproc 20000
Это будет касаться перезапуска из корневой подсказки.
Кажется, вы можете установить пределы работающего pid, используя:
echo -n "Max processes=20000:191967" > /proc/`pidof mysqld`/limits
Это решает непосредственную проблему, но если я снова перезапущу MySQL, мне придется сбросить ограничения (если я не добавлю это в сценарий запуска), что кажется проблемой.