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

Fumito Morishima email@hidden
2006年 1月 16日 (月) 16:30:08 JST


森島です。

やっと原因が分かりました。

まず、一度減ったメモリが戻らない件ですが、
これは 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 メーリングリストの案内