わーくあうと!

日々の作業でためになったことをアウトプットすることで自分の成長につながればなと。

Too many open filesなどと言われる件

webアプリの負荷試験をしていたらhttpdのerror_logで、
・_mysql_exceptions.OperationalError: (2004, "Can't create TCP/IP socket (24)")
・socket.error: [Errno 24] Too many open files

詳細端折ってますがこんなエラーが大量にでていた。(mysqlやmemcache接続する処理で)
エラーの原因から言ってしまうと、httpdが開こうとしているファイル数が「Max open files」の値を超えてしまっていた事が原因だった。
なので制限を変更した。
その時のメモ。

httpdが開くことのできるファイル数を確認。

less /proc/{pid}/limits

これの「Max open files」の値。確認した所デフォルトの1024だった。

httpdが開いているファイル数を確認。

lsof -p {pid} | wc -l

apacheBenchで負荷を掛けながら確認したら900くらいで頭打ちしているようだった。

修正。

/etc/security/limits.conf に下記を追記。

 * soft nofile 8192
 * hard nofile 8192

確認。

httpdの再起動後、下記の値を確認。

less /proc/{pid}/limits

「Max open files」の値が設定した値になっていればOK。


その後もう一度apacheBenchで負荷試験をしたらエラーはでなくなった。