Apacheでreloadとgracefulを試した動きのメモ

Apacheにおける reload コマンドと graceful コマンドの動きを見てみようと思いましたので、下記のようなPHPスクリプトを作成してみました。
ブラウザからアクセスすると30秒待って《OK》が表示されます。

<?php

sleep(30);
echo "OK";

?>

まずは reload を試す

reload は、『全ての処理中リクエストは終了される』とか聞きますが果たして?

とりあえずブラウザから test.php にアクセス。待ち状態に入ります。
そこですかさずサーバ側で reload を実施。

$ /etc/rc.d/init.d/httpd2 reload
httpd を再読み込み中:                                      [  OK  ]

切れない…

少し想定と違いました。
どうやら切れないようです。

続いて graceful を試す

graceful は『プロセスが終わるのを待ってから新しい設定を反映させる』とか聞きますが果たして?

先ほどと同様にブラウザから test.php にアクセス。待ち状態に入ります。
そこですかさずサーバ側で graceful を実施。

$ /etc/rc.d/init.d/httpd2 graceful

あれ?
30秒待たずにいきなり《OK》が表示されました‥。

PHPログにも何も出力されていません。
どうやら子プロセス(sleep)が強制的に終了させられて次の処理に移り、処理完了となったみたいです。

結論

結論として、 graceful は子プロセスが強制的に終了させられて進む。

reload は終了まで待たされる。

という感じになりました。なるほど。

1 COMMENT

いぬえもん

gracefulするとsleepが効かない原因を調べていたらここにたどり着きました。
“子プロセスが”というより”sleepが”無視されている感じなんですよねぇ…

返信する

コメントを残す

メールアドレスが公開されることはありません。