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

Fumito Morishima email@hidden
2006年 1月 16日 (月) 16:50:39 JST


森島です。

> この固定にしてあるサイズとは、
> cp、envp等で確保している512でしょうか?

そうです。

TNN Makoto Nakamura wrote:
> いつもお世話になっています。
> 中村@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 mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo



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