unicornのpreload_app

unicornの設定「preload_app」について。
ざっくりと、「workerのアプリケーションの先読み」の設定らしい。


このサイトに詳しい説明があったので訳してみた。英語は苦手なので怪しいがなんとなく雰囲気は合ってる気がする。

http://unicorn.bogomips.org/Unicorn/Configurator.html#method-i-preload_app

Enabling this preloads an application before forking worker processes.

workerをforkする前のアプリケーションの先読みを有効にします。

This allows memory savings when using a copy-on-write-friendly GC

これは、copy-on-write-friendlyに相性の良い環境では、メモリを節約できます。

but can cause bad things to happen when resources like sockets are opened at load time by the master process and shared by multiple children.

しかし、socketのようなリソースはmasterによってロード時に開いて複数のchildren(worker)で共有されているときに悪いことが起こる可能性があります。

People enabling this are highly encouraged to look at the before_fork/after_fork hooks to properly close/reopen sockets. Files opened for logging do not have to be reopened as (unbuffered-in-userspace) files opened with the File::APPEND flag are written to atomically on UNIX.

これを有効にするなら、before_forkもしくはafter_forkでsocketをの適切を開き直すことをおすすめします。
でもログファイルはUNIXによってアトミックに書き込まれるので問題なし。

In addition to reloading the unicorn-specific config settings, SIGHUP will reload application code in the working directory/symlink when workers are gracefully restarted when preload_app=false (the default).

preload_app=falseの時にHUPでunicornの再起動が正常に行われた場合、設定とアプリケーションをリロードし、リロードされたものへのシンボリックリンクが切り替わります。

■preload_appの設定によるSIGHUPでの再起動時の挙動の違い

preload_appの設定によって、SIGHUP(workerの処理の完了をもって再起動)を送ったときに挙動が違ってくる。

true

  • unicornの設定:再読み込みされる
  • アプリのリロード:されない。アプリはマスタでロード済みのものを使う。アプリをリロードしたければ、SIGUSR2を送って新マスタ&workerを立ち上げる方法をとる。
  • ダウンタイム:発生しない(マスタのアプリをそのまま使うので、workerがあがった時から処理が可能)

false

  • unicornの設定:再読み込みされる
  • アプリのリロード:される
  • ダウンタイム:発生する。(workerがそれぞれアプリをロードするので、ロード完了まで処理できない)

preload_appをfalseにする時って?

あえてpreload_appをfalseにする時ってなんだろう。
preload_appがtrueの時のデメリットは、
・SIGUSR2での再起動になり、手順的に多少複雑(古いmasterを後で落とすなど)
→でもcapistrano等で自動化可能な範囲。
・SIGUSRで新マスタ&workerを立ち上げる場合、一時的にマスタ&workerのセットが2セットできるからメモリ的に一瞬大きくなる事もある
→preload_appがfalseの場合はworker数分のアプリをメモリにロードするわけだし、そっちの方が大きくなるか。

何かの情報で、SIGUSR2が不安定という事を聞いたことはあるけど、そのへんの事情なのかな。
情報とつっこみ欲しい。