Top自宅サーバApache > 2005年11月
2005年11月26日

Apache のチューニング(その3)・DiceによるWindows再起動

November 26,2005 11:58 PM
Tag:[, ]
Permalink

Apache の再起動を周期的に行うことでメモリリークを回避する設定にしていますが、その2でお伝えした通り、再起動が正常に行われなかった場合、エラーが発生します。さらに Apache のプロセスが残る場合もあるようで(しかもそのプロセスが数十MBのメモリを喰ったまま)、あまりいい按配ではありません。

ということで Apache の方は現在の設定にして、Windows の再起動を行う方法を追加することにしました。Windows のタスクスケジューラで再起動できるようですが、Dice にプログラムスケジューラー機能があり、この中にシャットダウンや再起動も組み込まれていることを知りましたので、これを使って1日1回再起動を行ってみることにしました。以下 Windows XP での設定方法です。

DiceでのWindows再起動設定Dice の設定は「イベント」→「追加」で開いたダイアログをスクリーンショットのように設定します。
具体的には、メイン画面のメニューバーから「イベント」→「追加」を選択すると左のダイアログが開きます。ダイアログの「イベントタイプ」で「コマンド実行」を選択すると、その下のタブが切り替わるので、その中にある「シャットダウン」を選択。さらにプルダウンで「再起動」を選択して、右側のスケジュールを設定します。ここでは「1日に1回」で 5:00 に実行するようにスケジューリングしました。「イベントを有効」もチェックしておきます。

これだけでは再起動時のログインパスワード入力で止まってしますので Windows 再起動時にパスワード入力を不要にする設定を実施します。
「スタート」→「ファイル名を指定して実行」を選択して、

control userpasswords2

を入力して実行します。ユーザーアカウント画面が開くので「ユーザーがこのコンピュータを使うには、ユーザー名とパスワードの入力が必要」のチェックを外して「OK」をクリックします。その後自動ログオンの設定画面が開くので、ログオンする時のユーザー名とパスワードを設定して「OK」をクリックします。

参考サイトは下記です。ありがとうございました。

Dream SeedWindowsの定期再起動
Comments [2] | Trackbacks [0]
2005年11月21日

Apache のチューニング(その2)

November 21,2005 11:57 PM
Tag:[, , ]
Permalink

先日、その1で MaxRequestsPerChild でリクエスト数の上限を設定し、子プロセスを再起動するようにしましたが、下記のエラーが時々発生しています。

[crit] [Mon Nov dd hh:mm:ss 2005] file .\\server\\mpm\\winnt\\child.c, line 1060, assertion "(rv >= 0) && (rv < threads_created)" failed

ネットで同様の事象を検索したところ、下記の1件しかヒットしませんでした。

Another Apache error

対処は「バージョンを 2.1.8 にアップグレードする」と書かれています。Apache HTTP Server は現在 2.1.9-beta がリリースされていますが、Windows 版は 2.0.55 が最新のため、残念ながらこのエラーは回避できないようです。

Comments [0] | Trackbacks [0]
2005年11月16日

Apache のチューニング(その1)

November 16,2005 11:53 PM
Tag:[, , ]
Permalink

先日より続いているアクセス不具合についてチューニング(というほどのものではありませんが)を実施しました。何回か報告する機会がありそうなのでとりあえず「その1」に。

不具合に関連する事象で把握できているのは次の3点です。

  • Apache プロセスのメモリが増加し続け(メモリリーク)、1日で数百MBに膨れ上がる
  • 何らかの契機にレスポンスが突然遅くなる(お昼休み等、アクセスが集中すると×?)
  • Apache を再起動すればアクセスは正常になる

チューニング関連の記事を調べた結果、下記の2つのディレクティブについて httpd.conf に設定することにしました。

MaxRequestsPerChild

これは個々の子サーバが稼働中に扱うリクエスト数の上限で、このディレクティブに設定された値を超えると子プロセスは終了(再起動)します。デフォルトは 0(=子プロセスを終了しない)ですが、現在は 5000 に設定しています。記事によっては2桁?3桁で書かれているものもあり、どの程度の値にすればよいか悩みましたが、やや大きめの値にしています。

この設定で1日稼動させてみたところ、レスポンスが遅くなるという事象は収まったようです。ただログを確認するとプロセス再起動の周期がやや短いようなので、値の調節はもう少し必要かもしれません。

参考記事は下記です。

Win32DisableAcceptEx

もうひとつのディレクティブ Win32DisableAcceptEx は上記の検索をしている時にたまたまみつけたもので、Windows の winsock が原因で AcceptEx のエラー

指定されたネットワーク名は利用できません。  : winnt_accept: Asynchronous AcceptEx failed.
セマフォがタイムアウトしました。  : winnt_accept: Asynchronous AcceptEx failed.

が頻繁に発生するようです。VirtualHost 別のエラーログばかり見ていたので気がつかなかったのですが全体のエラーログに上記のエラーがかなり大量に頻繁に発生していました。

アクセス不具合との関連がないにしてもこれは回避しておきたいので、MPM_WinNT モジュール部分に Win32DisableAcceptEx を追加。これで上記のメッセージは止まりました。

参考記事は下記です。

まとめ

現在の httpd.conf の(該当箇所の)設定は次のようになっています。

<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 05000
Win32DisableAcceptEx
</IfModule>

MaxRequestsPerChild はデフォルト値 0 を書き換え、Win32DisableAcceptEx は1行追加。ThreadsPerChild はデフォルトで設定された値をそのまま利用しています。

また上記と併せてPHPやCGIエラー等もエラーログを参照しながら除去しました。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2021年
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3