MTOSの消費メモリをがつんと下げる
Movable Typeにはメモリーリークの問題がある。MT4以降ではメモリーリークが顕著になっていて、CGI環境(一リクエストごとにプロセスごとメモリ解放される)での利用には支障はないが、MT4とFastCGI環境の組み合わせではほとんど実用に堪えない。
MT4で「真の」Perl版ダイナミック・パブリッシングを実現するよ(ただしM専) - Ogawa::Memorandaのmt-view.cgiをFastCGI環境で使う場合を例にとると、Main Indexをシーケンシャルに繰り返しレンダリングする場合で、最初のリクエスト時はRSS (resident set size)が23,188kbytes程度だが、1000回のリクエストの処理後には285,252kbytes程度まで膨張する。
これは、主にMT::Builder, MT::Template, MT::Template::Tokens, MT::Template::Node, MT::Template::Contextオブジェクト間に相互に参照関係があり、リファレンスカウントによるPerlのメモリ管理では、不必要になったメモリが回収されないことに依っている。
データ構造の変更がシステムの互換性に与える影響を無視できないため、ドラスティックな変更はしづらいのだが、ひとまず以下のパッチを当てることで大幅なメモリ消費の抑制が期待できる。
オリジナルと同条件で測定してみると、初回は23,192kbytes、100回レンダリング後でも26,624kbytes、1000回では57,688kbytes程度まで抑制できることが分かった。
OrigがオリジナルのVSZとRSS、Fixが修正後のVSZとRSS。1リクエストあたりの増加量が12〜3%くらいにまで抑えられている。
まだまだ不満。そのうちテストコードを作ってmtos-devに投げる予定。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/583
Comments (0)