[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[webdav-jp:0987] mod_encoding 付き httpd の肥大化



若宮と申します。

mod_encoding について少々困った症状に遭遇しております。メモリリーク
の類かなと思いつつ、Apache API にも疎くて手に負えなかったので;)、
ひとまずここに報告させて頂きます。mod_dav のあるなしによらないので
オフトピ気味ですが、mod_encoding のユーザが一番多いと思われるので…。

EncodingEngine が On の状態で GET や PROPFIND を受け続けていくと、
httpd のプロセスがゆっくりですが大きくなって行き、そのまま放っておく
と (数万アクセス後) スワップも食いつぶしてシステムがハングしたかの
ように重くなり、ほとんど DoS 状態;)に陥ってしまうのです。その後、
アクセスが止まっても正常なレスポンスに戻るには10〜20分程度かかります。
dmesg には "Out of Memory: Killed process 10482 (httpd)" のように、
カーネルが httpd を kill した旨のメッセージがぽつぽつと出ています。

自分でちびちびと DAV のテストをしていた間は気が付かなかったのですが、
ユーザがローカル HDD と DAV の間で同期ソフトなどを走らせるようになって
明らかになってきました。過去ログを見ても話題になってなさそうですので
少し不安なんですけど(-.-;。

当方では以下のサーバ環境にて再現性を確認しました。
- Fedora Core 1   + Apache 2.0.49 + mod_encoding-20021209(+Apache2版)
- Red Hat Linux 9 + Apache 2.0.49 + mod_encoding-20021209(+Apache2版)
- Red Hat Linux 9 + Apache 1.3.29 + mod_encoding-20021209
ユーザクライアントは主に WinXP の WebDAV リダイレクタですが、Perl で
書いたテストスクリプト (PROPFIND しまくる:) で確認しました。
mod_encoding は技評の WebDAV 本にある手順で make し、httpd.conf には
以下の設定を記述しています。

EncodingEngine On
NomalizeUsername On
SetServerEncoding UTF-8
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding "cadaver/" EUC-JP

Apache 2/1.3 には付属モジュール (の一部) だけを組み込んでおり、prefork
で動かしています。マシンは Xeon2.4GHz x2 + Mem2GB + Swap1GB のサーバや
Athlon 1.2GHz + Mem512MB + Swap1GB の自作機などで試しました。1つ気に
なるのは、Apache/prefork にはメモリリークなどの影響回避のために
MaxRequestsPerChild という設定がありますが、これも効かず、ずっと同じ
PID の httpd たちが太りながら裁いていることです。

*BSD だとそうならない、など情報があれば教えて下さい(_ _)。もし本当に
仕様外のメモリリークだとしたら、改善されることを期待しています(_ _)m。
-- 
// Kenji Wakamiya
// wkenji@xxxxxxxxxxxxxx