Apache httpd の停止方法

Webサービスを停止する場合には、実行中のリクエストの処理をどう扱うかを考えた上で、適切な方法を採らなくてはなりません。扱いの考え方には次の2通しがあります。

実行中のリクエストの処理を中止して、即時停止する。 実行中のリクエストの処理が完了するのを待ってから停止する。

ここでは、それぞれの場合に、Apache httpd ではどのような方法を採るのかを整理しておきます。

実行コマンドは次の2通りです。それぞれにオプションがありますが、どちらのコマンドでも同じ処理を行います。

httpd -k オプション apachectl -k オプション

オプションは次の2通りです。

1.stop

httpd プロセスにTERMシグナル(SIGTERM)を送って、プロセスを即終了します。 処理中のリクエストはすべて中止して、すべての子プロセスを終了してから、親プロセスも終了します。

2.graceful-stop

httpd プロセスにWINCHシグナル(SIGWINCH)を送って、子プロセスを終了します。 ただし、子プロセスは実行中のリクエストの処理が完了してから終了します。親プロセスは、すべての子プロセスが終了したあとに終了します。

実行中のリクエスト処理の扱いと適切な停止コマンドオプション

実行中のリクエスト処理の扱いの違いによる実行コマンドオプションの対応を下表に整理します。

実行中のリクエスト処理の扱い 実行コマンドオプション 実行中のリクエストの処理を中止して、即時停止する。 httpd -k stopapachectl -k stop 実行中のリクエストの処理が完了するのを待ってから停止する。 httpd -k graceful-stopapachectl -k graceful-stop

Apache httpd の設定変更時の再起動・設定反映オプションの使い方

Apache httpd には起動関連の様々なコマンドオプションがあります。 状況や目的に応じて、使い分けることが必要になると思います。

ここでは、httpd.conf などの設定変更時の再起動・設定反映時にどのようなオプションを使うべきなのか整理しておきたいと思います。

まず、コマンド自体を確認しておきます。 下記の2通りあります。ここでの起動という目的を考えた場合には、いずれを使用しても同じです。

service httpd オプション /etc/init.d/httpd オプション

ここでは、service httpd オプション で説明します。 さて、このオプションを次のようにして確認してみます。

[root ~]# service httpd 使い方: httpd {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}

ここで、再起動に関係するオプションは次の4つです。

restart condrestart reload graceful

それぞれどのような処理になるのでしょうか。

1.restart

停止処理と開始処理を連続して行います。 開始処理の際に、変更した設定が反映されます。 停止処理は、TERMシグナル(SIGTERM)を送って、プロセスを即終了します。 処理中のリクエストはすべて中止して、すべての子プロセスを終了してから、親プロセスも終了します。 その後、起動処理を行います。 親プロセスIDは変更されます。

2.condrestart

restart の処理と同じですが、Apache httpd が起動しているときだけ再起動を行います。

3.reload

HUPシグナル(SIGHUP)を送って、子プロセスを終了します。 ただし、子プロセスのみを即終了して、親プロセスは終了しません。 処理中のリクエストはすべて中止されます。 すべての子プロセスが終了したあとに、親プロセスは設定を再読み込みし、変更した設定が反映されます。

変更後の設定の反映だけを行いたい場合に使用します。

4.graceful

USR1シグナルを送って、子プロセスを終了します。 ただし、子プロセスは実行中のリクエストの処理が完了してから終了します。 すべての子プロセスが終了したあとに、親プロセスは設定を再読み込みし、変更した設定が反映されます。

実行中のリクエストの処理を中止させたくない場合に使用します。

上記各オプションの用途表 続きを読む »

サーバ移行時の AWStats の移行方法

サーバの64bit化に伴い、httpdログの統計・分析/解析・レポートツールの AWStats も移行する必要がありました。

ここでは、AWStats の移行方法を整理しておきます。ポイントは、旧環境における過去ログ分析データを移行することです。

移行に必要な作業は次の通りです。

1.AWStats のインストール

yumでインストール可能なパッケージが rpmforgeリポジトリにありますので、それをインストールします。

まずは、パッケージ情報を確認します。

[root ~]# yum info awstats Loaded plugins: fastestmirror, priorities Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * epel: ftp.kddilabs.jp * extras: www.ftp.ne.jp * rpmforge: ftp-stud.fht-esslingen.de * updates: www.ftp.ne.jp 277 packages excluded due to repository priority protections Available Packages Name : awstats Arch 続きを読む »

httpdログの統計・分析/解析・レポート~AWStats のインストール・設定

httpdログの統計・分析/解析・レポートを行うために、AWStats を導入することにしました。

要件事項は次のようなものです。

(1) 対象ログはhttpdログだけで充分 (2) リアルタイムのログが対象にならなくてもかまわない (3) Webブラウザでレポートを参照したい (4) サーバリソースへの負荷を最小限にしたい (5) 開発プロジェクトが動いている

AWStats は、これらの要件事項をほぼ満たしていると判断できましたので、導入することにしました。

1.AWStats のインストール

yumでインストール可能なパッケージがあるはずだと考えられますので、検索してみます。

[root ~]# yum search awstats Loaded plugins: fastestmirror, priorities Loading mirror speeds from cached hostfile * addons: rsync.atworks.co.jp * base: rsync.atworks.co.jp * epel: ftp.iij.ad.jp * extras: rsync.atworks.co.jp * rpmforge: ftp-stud.fht-esslingen.de * updates: rsync.atworks.co.jp addons | 951 B 続きを読む »

Keepalive関連ディレクティブの調整

Apache Http Server (記事作成時バージョン2.2.3)のKeepalive関連ディレクティブの調整(チューニングとまでは行きませんが)を行いたいと思います。 Keepalive関連ディレクティブとは次の3つです。

Keepalive ・・・ On/Off、Keepaliveを有効にするしないかの指定 MaxKeepAliveRequests ・・・ 接続が開始されてから切断するまでに受け付ける最大リクエスト数の指定 KeepAliveTimeout ・・・ 接続しているセッションからのリクエストが途絶えてから、切断するまでの待ち時間の指定

よくよく考えると、当然のようにkeepaliveを「On」にしがちですが、もう少し有効性やより効果的な設定を考えてみる必要があると思います。

1つのWebページを表示するためには、そのWebページのhtmlファイルとそこに表示する画像ファイルやCSSファイルなどを別途リクエストして、サーバから送ってもらう必要があります。それらのファイルが多い場合には、1つのWebページを表示するために、htmlファイル以外に数多くのリクエストを行うことになります。ちなみに、画像は想像以上に多く使っているものです。アイコンやら、ちょっとした枠線、背景画像などよく考えるとみんな画像を使っています。

その際に、Keepaliveを無効にしていると、ファイル一つ一つについて、接続と切断を繰り返さなくてはならなくなります。 Keepaliveを有効にしていると、例え1つのWebページの表示に複数ファイルをダウンロードする必要があるとしても、1つの接続内ですべてのファイル処理を完了させることができるようになります。

ただ、動的htmlファイルの場合は、phpやjavaなどのスクリプト(プログラム)によって、基本的に1つのhtmlファイルとして生成されていると思われます。各種スクリプトを別ファイルではなく、インライン編集するケースも多いと思います。もちろん、動的htmlでも前述の画像ファイルは相応に存在するわけで、リクエストの多少は大きく変わらないかも知れません。

問題は、動的htmlファイルの生成では、

静的htmlファイルの送信よりもサーバ負荷が掛かるということ 比較的大きなファイルになるケースが多いということ

などを考えると、動的htmlファイルの生成~送信の処理を早く終わらせ、接続を切る、というのがベターだと考えます。

このようなことから、私の考えとしては、大規模Webサイトであれば、Webサーバを動的ファイル用と静的ファイル用に分割構成にして(バーチャルホストを分割する方法でも良い)、それぞれ次のように設定を分けるのが良いのではないかと考えます。

動的ファイル ⇒ Keepalive Off 静的ファイル ⇒ Keepalive On ←画像ファイルはこちら

ただし、当サイトは小規模ですので、動的ファイル用と静的ファイル用に分割する必要性まではありませんので、限られたリソースを有効に利用し、かつ無駄を最小限に止める方策を考えたいと思います。

そこで、次のように考えてみました。

1.当サイトの場合、1つのWebページを表示するために、概ね40~50程度の画像ファイルが必要です。 よって、動的に生成された1つのhtmlファイルとそれらの画像ファイル数を合計して、1つの接続でリクエストするファイル数は最大50と考えて良さそうです。それらの一連のリクエスト処理は1つの接続で完了させるようにして(Keepalive ⇒ On)、最大リクエスト数を50程度(MaxKeepAliveRequests ⇒ 50)にすればよい。

2.1つのWebページをサーバが処理するのに概ね0.5~1.0秒、長くても2秒以内に完了していることを別途確認しているので、すべてのファイルリクエスト処理が終わってから、1~2秒程度後にはセッションを切断して良さそうだと判断できます(KeepAliveTimeout ⇒ 2)。

以上のことから、次のような設定で良さそうだと考えられます。

Keepalive On MaxKeepAliveRequests 50 KeepAliveTimeout 2 続きを読む »