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が起動時にシステムによって起動された場合、正しい制限があるはずだと思います。
このpidおよび将来のmysqldプロセスのnprocのソフト制限を増やす方法はありますか?
以下を使用して、実行中のpidの制限を設定できるようです。
echo -n "Max processes=20000:191967" > /proc/`pidof mysqld`/limits
これで当面の問題は解決しますが、MySQLを再起動すると、制限をリセットする必要があります(これを起動スクリプトに追加しない限り)。これは苦痛のようです。
次のエントリを探して削除します。
/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
これは、ルートプロンプトからの再起動をカバーします。