Armadilloフォーラム

Armadillo-640の開放不可キャッシュ増大についてのご質問

yuuki-takeguchi

2023年12月28日 17時13分

お世話になっております。竹口と申します。

Armadillo-640に開発したソフトを導入して、一週間程度挙動確認を行っています。
topコマンドを入力し、メモリ使用量の変動を監視していたところ、
2日目に起動時と比べてbuff/cashが38MB(うち解放可能キャッシュ30MB、開放不可キャッシュ8MB)増大していることを確認しました。
導入したソフトは起動1日目から2日目にかけてメモリ使用量が1MB増大していましたが、
実際に増大したメモリ使用量と辻褄が合わないため調査を行ったのですが、原因が不明です。
その後7日目まで監視を行ったところ導入ソフトのメモリ使用量は2日目以降変動していませんが、
buff/cashは増大し続け、起動時から7日後には87MB(うち解放可能キャッシュ78MB、開放不可キャッシュ9MB)の増大となっておりました。
開放不可キャッシュが増大傾向にあるため長期起動させた場合、メモリ不足に陥らないかを懸念しております。
こちらの原因はどういったものが考えられますでしょうか?ご教授いただければ幸いです。

よろしくお願いいたします。

コメント

at_dominique.m…

2024年1月4日 9時48分

竹口さん、

お世話になっています、
マルティネです。

> Armadillo-640に開発したソフトを導入して、一週間程度挙動確認を行っています。
> topコマンドを入力し、メモリ使用量の変動を監視していたところ、
> 2日目に起動時と比べてbuff/cashが38MB(うち解放可能キャッシュ30MB、開放不可キャッシュ8MB)増大していることを確認しました。
> 導入したソフトは起動1日目から2日目にかけてメモリ使用量が1MB増大していましたが、
> 実際に増大したメモリ使用量と辻褄が合わないため調査を行ったのですが、原因が不明です。
> その後7日目まで監視を行ったところ導入ソフトのメモリ使用量は2日目以降変動していませんが、
> buff/cashは増大し続け、起動時から7日後には87MB(うち解放可能キャッシュ78MB、開放不可キャッシュ9MB)の増大となっておりました。
> 開放不可キャッシュが増大傾向にあるため長期起動させた場合、メモリ不足に陥らないかを懸念しております。
> こちらの原因はどういったものが考えられますでしょうか?ご教授いただければ幸いです。

返事するまえにいくつかを確認させてください:
- Armadillo-640 で開発している OS は debian でしょうか、Armadillo Base OS でしょうか。
- 「開放不可キャッシュ」とは具体的にどこで観察しているか教えていただけますか?

よろしくお願いします。

yuuki-takeguchi

2024年1月9日 10時12分

マルティネ様

お世話になっております。遅れて申し訳ありません。竹口です。

> 返事するまえにいくつかを確認させてください:
> - Armadillo-640 で開発している OS は debian でしょうか、Armadillo Base OS でしょうか。
Armadillo-640でのOSはdebianを使用しております。

> - 「開放不可キャッシュ」とは具体的にどこで観察しているか教えていただけますか?
すみません、開放不可キャッシュは即時解放不可の誤りでした。
即時解放不可キャッシュについてはTOPコマンドのbuff/cache結果から算出しております。
TOPコマンド結果で出力されるavail memの値からfreeを引いた残量を即時解放可能なキャッシュとしており、
buff/cacheの値から上記で算出した即時解放可能なキャッシュを引いた残量を即時解放不可キャッシュとしております。

改めて動作を確認を実施したところ、ソフトを起動させた場合でも、起動しない場合でも同程度に即時解放不可キャッシュが増大し続けています。
開発ソフト自体はキャッシュ増大に影響がないことが分かりましたがやはり長期運用した場合、メモリ残量が枯渇するのではと考えております。
Armadillo-640にてメモリ残量が一定量以下になるとメモリの解放を実施するなどの処置は行われますでしょうか?

以上です、よろしくお願いします。

at_dominique.m…

2024年1月9日 11時34分

竹口さん、

マルティネです。

> Armadillo-640でのOSはdebianを使用しております。

了解しました。

> すみません、開放不可キャッシュは即時解放不可の誤りでした。
> 即時解放不可キャッシュについてはTOPコマンドのbuff/cache結果から算出しております。
> TOPコマンド結果で出力されるavail memの値からfreeを引いた残量を即時解放可能なキャッシュとしており、
> buff/cacheの値から上記で算出した即時解放可能なキャッシュを引いた残量を即時解放不可キャッシュとしております。

問題ないと思いますがこの説明で再び確認させてください:top で以下の出力の場合は(avail - free)「461.3 - 392.9 = 68.4 MiB」の「即時解放可能なキャッシュ」で、(buff/cache - その値)「82.1 - 68.4 = 13.7 MiB」の 「即時解放不可キャッシ」とします、でよろしいですね?

MiB Mem :    498.4 total,    392.9 free,     23.4 used,     82.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    461.3 avail Mem 

> 改めて動作を確認を実施したところ、ソフトを起動させた場合でも、起動しない場合でも同程度に即時解放不可キャッシュが増大し続けています。
> 開発ソフト自体はキャッシュ増大に影響がないことが分かりましたがやはり長期運用した場合、メモリ残量が枯渇するのではと考えております。
> Armadillo-640にてメモリ残量が一定量以下になるとメモリの解放を実施するなどの処置は行われますでしょうか?

そうですね、理由が分からないとメモリ残量がいつまでも減る可能性もありますので、確認しましょう。

まず、top の値の元ですが:
- buff/cache の値は /proc/meminfo の Buffers, Cached, SReclaimable (slab reclaimabe) 値が足された物です。
- avail は /proc/meminfo の MemAvailable 値です。
その値はカーネル内で計算されていて(mm/page_alloc.c の「si_mem_available」関数)、あくまでも予測なだけですね。
計算として、"totalreserve_pages"と、page cache + slab reclaimable の半分が引かれますので、そこだけでも差がでますね…

起動時に cache / slab がまだ充分に使われてないので、運用時(少し時間が立ててから)に増えつづけなければ問題ないと思います。

また、もう一つの原因は tmpfs 上のデーターだと思いますが、各 tmpfs の使用されている容量が安定しているかも確認していただければと思います。

例えば、debian OS の Armadillo では systemd の journal は /run/log/journal でログを保存していて、journald の仕様としてはある程度のサイズになってしまったら解放するようにできています。
また、Armadillo の Debian OS では overlayfs が有効されていると有効されていない物がありますので、有効されている場合は overlayfs に書込みされているデーターも対象となります。

お手数ですが、ひとまずは tmpfs の容量が増えてないかを確認していただければと思います。

よろしくお願いします。

yuuki-takeguchi

2024年1月13日 17時31分

マルティネさま

お世話になっております。竹口です。
>問題ないと思いますがこの説明で再び確認させてください:top で以下の出力の場合は(avail - free)「461.3 - 392.9 = 68.4 MiB」の「即時解放可能なキャッシュ」で、(buff/cache - その値)「82.1 - 68.4 = 13.7 MiB」の 「即時解放不可キャッシ」とします、でよろしいですね?
はい、こちらについてはご指摘の内容通りとなります。

>起動時に cache / slab がまだ充分に使われてないので、運用時(少し時間が立ててから)に増えつづけなければ問題ないと思います。
こちらについては継続運用での計測で確認したいと思います。ありがとうございます。

>お手数ですが、ひとまずは tmpfs の容量が増えてないかを確認していただければと思います。
ご指摘頂きました通り、クリーンインストールを実施したArmadillo-640を20時間稼働させ、
tmpfsの前後状況を確認しますと、容量が1.3MBほど増大していることを確認しました。
また、/run/log/journal内部に随時バイナリ形式でのログ保存がされていること、tmpfs容量増大も大半がログに起因していることが確認できました。
ありがとうございます。

こちらの知識不足のため初歩的な質問となりましたら、申し訳ありません。
ご指摘の中で、
>journald の仕様としてはある程度のサイズになってしまったら解放するようにできています。
とのことですが、Armadillo-640のデフォルト設定において、
/run/log/journalのサイズ上限設定など記載されているファイルや参照できるコマンドなどございましたらご教示いただけないでしょうか。

お手数をおかけしますがよろしくお願いします。

yuuki-takeguchi

2024年1月16日 17時59分

マルティネさま

お世話になっております。竹口です。

Armadillo-640のjournald.confの設定がコメントアウトされていたため混乱しておりましたが、以下リファレンスを確認し自己解決いたしました。
デフォルトでログによるディスク最大使用量がtmpfsの容量10%程度という事でしたら、こちら側が危惧していたメモリ不足に陥る危険性はなさそうです。
https://manpages.debian.org/testing/systemd/journald.conf.5.en.html
お手数をお掛けしました。
この度は色々ご教授頂きましてありがとうございました。

以上です、よろしくお願いします。