「OpenSSLの中でmemcpyがSIGBUSしてます」「な、なんだってー!」
って調べたのですが、理由は以下のとおりだった。
- HTTPSの場合、デフォルト設定だとファイル読込にmmap(2)が使われる
- mmapされたファイルのサイズが変更されてもApacheはそれを検知しようがない
- そして、ファイル末尾以降のデータを読もうとするとセグメンテーションエラー(SIGBUS)が発生し、Apacheのサーバプロセスは異常終了する
- HTTPの場合は、ローカルファイルシステムの場合sendfile(2)が使われるので、ファイルサイズが変更になってもApacheは異常終了しない
- ただし、mod_deflateのような出力フィルタを使っている場合は、HTTPS同様に異常終了する可能性がある注1
この動作はApacheの「仕様」のようです注1。日本語版だとNFS特有の現象のように読めるけど、英語版は以下のように書かれています。
Deleting or truncating a file while httpd has it memory-mapped can cause httpd to crash with a segmentation fault.
EnableMMAP Directive - core - Apache HTTP Server
言われてみれば当然だけど、mmapやsendfile等を自動的に使い分けているサーバの場合、これが原因だとは気づきにくいですよね。
というわけで、Apacheを使う場合はEnableMMAP Offにしておきましょう注1、さもないとアラートが上がってきたりしてウザいですよという話でした。本当は配信ファイルを全てアトミックに更新できばいいのですが、運用的にできないこともありますからね。
Apache以外のサーバでも同様の問題があるかどうかは知りません。
というわけで、Apacheを使う場合はEnableMMAP Offにしておきましょう注1、さもないとアラートが上がってきたりしてウザいですよという話でした。本当は配信ファイルを全てアトミックに更新できばいいのですが、運用的にできないこともありますからね。
Apache以外のサーバでも同様の問題があるかどうかは知りません。
注1: HTTPSに限らない問題なので加筆修正 (17:06)。参照: Bug 46688 – Child segfault when mmaped file truncated
hermes bags
ReplyDeletekd 8 shoes
rolex watches for sale
nfl jerseys wholesale
kate spade
christian louboutin outlet
ralph lauren outlet online
true religion jeans outlet
louis vuitton outlet store
coach outlet online
zhi20161216
Baja karbon perkakas (carbon tool steel)Agen Besi Pipa Baja Schedule 80
ReplyDeleteJual Stainless steel
Supplier besi cnp baja
Toko besi beton krakatau steel
Agen besi cnp baja
Agen besi cnp baja
undangan pernikahan cantik dan murah
Agen besi h beam baja
Good Post! Thank you so much for sharing this pretty article.
ReplyDeletehappy birthday quotes for friend