ふぁいるでぃすくりぷた

最近仕事で、apacheがtoo many open fileを吐いて止まるってことがあって、ファイルオープン数とかを調査することになった。

 

結局、HTTP、HTTPSあわせて1,100以上もVirtualHostがある環境で、VirtualHost毎のアクセスログ、エラーログ以外にも、同じtransferログを開くように設定されてた。

(これだけで3,300ファイル)

 

しかもよく見てみると、1プロセスで4,000ファイルぐらい(ログ+ソケット、ライブラリなど)開いてて、Apache全体だと、4,000×forkしたプロセス数分ぐらい開いてることになってた。

 

リクエストをどのプロセスが処理するってのは固定じゃないから、全プロセスが全部の必要なファイルを開いてるってことなのだろうか。。。。

 

ここら辺はLinuxの動作や、Apacheのプロセス生成方法とかが分からないと結論出ないっぽい。難しい。