procmail で Out of memory
結局,最新の pkgsrc からビルドしたら直ったのですが。
procmail 3.22 のレシピでパイプ「|」を使っている人は要注意ッス。
NetBSD 1.6.1 procmail-3.22 Local mail delivery agentProcmail を使って,Subject でメールを振り分ける際 Subject が MIME エンコードされている場合には デコードしてからヘッダを判定しなければなりません。
そこで,Procmail の紹介とレシピの書き方の通りに nkf を使ったヘッダのデコードを行い,その後に振り分けるようにレシピを作ってみたのですが,なぜかきちんと振り分けされません。
原因究明のため,.procmailrc に LOGFILE と VERBOSE を設定して,ログを取ってみました。
そうすると, DECODED_SUBJECT=|echo "$MATCH"|nkf -meZ1|sed 's/[[:space:]]//g' の部分で処理がしばらく停止し,その後 Out of memory となることがわかりました。
Web を検索してみると,どうも過去に同じトラブルに遭遇した人がいて,回避策がでていました。 Re: Procmail 3.22 running out of memory
この記事にならい,Subject を変数に代入する部分を { DECODED_SUBJECT=`echo "$MATCH"|nkf -meZ1|sed 's/[[:space:]]//g'` } に変えたところ,一応動くようにはなったものの,キモチワルかったのでさらに原因を追求してみました。
どうも BSD で使う場合に発生する問題のようなので,ポーティングの問題である可能性が高いと判断して最新の pkg をチェックしたところ... 今年の始めに nb1 パッチが出ているようでした。
$NetBSD: patch-af,v 1.1 2004/01/11 06:55:00 simonb Exp $
--- src/pipes.c.orig Tue Sep 11 14:58:44 2001
+++ src/pipes.c
@@ -194,7 +194,7 @@ perr: progerr(line,excode,pwait==4
makeblock(&temp,Stdfilled);
tmemmove(temp.p,Stdout,Stdfilled);
readdyn(&temp,&Stdfilled,Stdfilled+backlen+1);
- Stdout=realloc(Stdout,&Stdfilled+1);
+ Stdout=realloc(Stdout,Stdfilled+1);
tmemmove(Stdout,temp.p,Stdfilled+1);
freeblock(&temp);
retStdout(Stdout,pwait&&pipw,!backblock);
なんだこれー!realloc の確保サイズに「長さ+1」を渡すべきところ,「長さの変数のアドレス+長さの変数のサイズ」を渡してたんじゃねーの?!BSD 系だけじゃなくて,全部ヤバイじゃん。ほかのプラットフォームで,よく動いてるなー。
で,さっそく cvs update して,procmail を make update したところ,あっさり直ってしまいました。
procmail-3.22nb1 Local mail delivery agentふー。かなり疲れました。
# あとで,pkgsrc ML のアーカイブを探したところ,修正に関する記事を見つけました。
# 本件,http://www.procmail.org/ には出ていないんだけど,本当にみんな大丈夫なのかな?
The comments to this entry are closed.


Comments
私も最近自宅でQube2JにNetBSDを入れて使い始めているのですが、PCに入れたFreeBSDに比べてSambaの応答がやたら遅いのです。
Load Averageは常に1.0を超えてるし…。
やっぱり、こんなものなんですかねぇ。ご意見をお聞かせ願えれば幸いです。
Posted by: take3 | 2004.02.09 02:08 PM
うちは気にならないですね...。
バージョンは
ja-samba-2.2.8.1.1.1nb1 Samba supporting I18N swat and L10N for Japanese
です。
ちなみに Load が高いのは, paneld が原因のようです。
止めたら低くなりました.
Posted by: cube | 2004.02.10 02:26 AM
そうそう,うちは物理メモリを MAX (256MB) まで増設してあります。
関係あるかなぁ...。
Posted by: cube | 2004.02.10 02:27 AM
情報ありがとうございました。特にpaneldの情報はありがたかったです。
sambaの方もWindows側でネットワークドライブとして接続すると、
なぜかレスポンスが向上しました。
物理メモリは64MBなんですけど、まぁなんとかいけそうかなぁ。
宅内サーバ利用なんで、特にきついこともないと思いますし。
これからもちょこちょこ覗かせていただきますね。
本当にありがとうございました。
#手がかかる分ちっこいこいつはかなり愛しげです
BGM: "Karn Evil #9 1st impression part1~part2" by Emarson, Lake & Parmer
Posted by: take3 | 2004.02.12 02:07 PM
Emarson, Lake & Palmerだ...
本文とは関係なくってすみません。
Posted by: take3 | 2004.02.12 02:09 PM