[Armadillo:00790] Re: Armadillo-Jのメモリ管理について

TNN Makoto Nakamura email@hidden
2006年 1月 16日 (月) 16:38:55 JST


いつもお世話になっています。
中村@TNNシステムです。

調査ありがとう御座います。

> 固定にしてあるサイズは、利用するcgiに合わせて適切な値に変更した
> 方がよいでしょう。
この固定にしてあるサイズとは、
cp、envp等で確保している512でしょうか?


Fumito Morishima <email@hidden>さん:
> 森島です。
> 
> やっと原因が分かりました。
> 
> まず、一度減ったメモリが戻らない件ですが、
> これは cache として使用されていました。
> なので、システムとして使えるメモリがなくなると、
> この領域は開放されます。
> 
> 次に、thttpd で cgi を動作させるとメモリを消費し続ける件ですが、
> vfork() したあとで子プロセスがメモリのアロケートを行っているのが
> 原因でした。
> 
> fork()では、子プロセスは別のプロセス空間を持つことができるので、
> アロケートしたあと放置しても、子プロセスの終了時に開放されますが、
> vfork()は同じプロセス空間のため、開放されないようです。
> 
> exec系関数のソースコードに以下のような記述があったので、
> 参考までに記載しておきます。(MMUが無いシステム向けの部分です)
> 
> /* We do not have an MMU, so using alloca() is not an option.
>  * Less obviously, using malloc() is not an option either since
>  * malloc()ed memory can leak in a vfork() and exec*() situation.
>  * Therefore, we must use mmap() and unmap() directly.
>  */
> 
> thttpdでは、cgiのパラメータなどのためにメモリを動的に確保していますが、
> これをすべて固定にして動作させたところ、メモリの消費はとまりました。
> 
> パッチを以下のURLにおいておきます。
> http://download.atmark-techno.com/misc/libhttpd_for_cgi.patch
> 同じフォルダにある thttpd.tar.gz のコードにあててください。
> 
> 固定にしてあるサイズは、利用するcgiに合わせて適切な値に変更した
> 方がよいでしょう。
> 
> TNN Makoto Nakamura wrote:
> > お世話になっています。
> > 中村@TNNシステムズです。
> > 
> > 
> >>私のところでは、cgi の呼び出し以外にこの現象が発生しないのですが、
> >>詳しく発生方法とその確認方法を教えてもらえませんか?
> > 
> > 手順は
> > 1.アルマジロの起動
> > 2.telnetからログイン
> > 3.cat /proc/meminfo
> > 4.ls -al
> > 5.cat /proc/meminfo
> > を行うと、3で表示したMemFreeの値が5では4byte程減ります。
> > その後は戻りません。
> > また、その後にlsコマンドを実行しても減らないようです。
> > ただ、減った4byteは戻らないようです。
> > 
> > こちらで作成しているアプリケーションは
> > 3常駐プロセスがおり、makefileにてFLTFLAGS=-zとして圧縮していました。
> > このプロセスのうち、1つだけ64kのグローバル領域を使用しているのですが
> > FLTFLAGS=-zを外すと機器が固まる減少が軽減されました。
> > 
> > 圧縮をすると何らかの影響が出るのですかね・・・?
> > 
> > Fumito Morishima <email@hidden>さん:
> > 
> >>森島です。
> >>
> >>当初thttpdを調べていましたが、
> >>プロセスをkillしても、メモリが開放されないようなので、
> >>どうやらカーネルの問題のようです。
> >>
> >>
> >>>munmap : non munmap 〜
> >>>といったメッセージがたまにthttpdから出力されているようです。
> >>>何か影響はあるのでしょうか・・・?
> >>
> >>これは uClibc のバグようですが、
> >>プロセスが終了したときには、すべてリソースを開放しなければ
> >>ならないので、今回の原因ではないと考えています。
> >>
> >>
> >>>>ただ、ls や mallocを行うプログラム、また通常のhtmlファイルの
> >>>>ブラウズではメモリが消費されなかったので、
> >>>>どこか環境に異なる部分があるのかもしれません。
> >>>
> >>>□減り続けるのではなく、一旦減ったメモリが元に戻りませんでした。
> >>> こういうものなのでしょうか?
> >>
> >>私のところでは、cgi の呼び出し以外にこの現象が発生しないのですが、
> >>詳しく発生方法とその確認方法を教えてもらえませんか?
> >>
> >>単純なプログラムで発生するのであれば、原因を絞って調査できるので
> >>ありがたいです。
> >>
> >>TNN Makoto Nakamura wrote:
> >>
> >>>いつもお世話になっています。中村@TNNSystemsです。
> >>>
> >>>調査ありがとう御座います。
> >>>
> >>>thttpdの調査を宜しくお願いします。
> >>>
> >>>こちらでも調べていたのですが、
> >>>kmsg上に
> >>>munmap : non munmap 〜
> >>>といったメッセージがたまにthttpdから出力されているようです。
> >>>何か影響はあるのでしょうか・・・?
> >>>
> >>>
> >>>
> >>>>ただ、ls や mallocを行うプログラム、また通常のhtmlファイルの
> >>>>ブラウズではメモリが消費されなかったので、
> >>>>どこか環境に異なる部分があるのかもしれません。
> >>>
> >>>□減り続けるのではなく、一旦減ったメモリが元に戻りませんでした。
> >>> こういうものなのでしょうか?
> >>>
> >>>_______________________________________________
> >>>armadillo mailing list
> >>>email@hidden
> >>>http://lists.atmark-techno.com/mailman/listinfo/armadillo
> >>
> >>_______________________________________________
> >>armadillo mailing list
> >>email@hidden
> >>http://lists.atmark-techno.com/mailman/listinfo/armadillo
> >>
> > 
> > 
> > _______________________________________________
> > armadillo mailing list
> > email@hidden
> > http://lists.atmark-techno.com/mailman/listinfo/armadillo
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo
> 




armadillo メーリングリストの案内