apache2.xx系をwindowsで使う場合の豆知識

ここ3週間ほど、サーバが数十分から数時間に1回不定期に停止するという悪夢のようなトラブルに見舞われました。色々調べた結果、windows+apache2.xx系を組み合わせた場合特有の相性問題であったようです。後に続く人のために、僕が遭遇した症状と、その解決法をここに記します。引っ掛けといてね♪>google


ウチの環境:
Windows 2000 server + Apache2.055
(Windows2000以降のOSとApache2.xxを組み合わせるとそこそこの確率で発生するそうです)


症状:
頻繁にネットワークが切断されて、Apacheが停止するor cgi(perl)が停止する。apacheのエラーログ(error.log)には
(OS 64)指定されたネットワーク名は利用できません。
(OS 121)セマフォタイムアウトしました。
の2つが連続して記述される。


原因:
ゲイツのドライバ不良、およびapacheゲイツドライバの相性


解決法:
1) NICの10-BASE/100-BASE切り替えをOFFに。僕の場合は100BASE-Duplex強制に設定します。
問題の設定は、コントロールパネル→ハードウェア→デバイスマネージャ→nicを選択→詳細設定内。通常はネットワークの種類を検出して切り替えるんですがこの機能は結構バグがあるので、100 baseTXのみのネットワークの場合は100 BASE duplex固定にするとネットワークの切断が減るそうです。


2)apacheのスレッド同時処理を切ります。
httpd.conf 内、
Win32DisableAcceptEx
を追加します。これを追加するとスレッド同時処理が切られ、パケ詰まりによるネットワークエラーがなくなります。原因はゲイツのドライバが(ryだそうで、いまだに修正されてないらしいです(汗。
これで上記apacheのエラーはゼロになりました。
ただ、それでも時々切断が起きているので、NICの寿命かもしれません。


以上、サーバを立ち上げている人たちの参考になれば幸いです。
最初にこの問題にあたった人はかなり考えたみたいです。その努力に感謝!