0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自宅サーバー98コンテナのメモリを実測したら、中央値と平均が7倍ずれた

0
Last updated at Posted at 2026-09-08

自宅の NAS で 98 本のコンテナを動かしています。
「そんなに動かしてメモリは大丈夫なのか」とよく聞かれるので、実際に測りました。

結論

  • 1 本あたりのメモリは中央値 39.3 MB / 平均 272.3 MB
    6.9 倍ずれます
  • 98 本のうち 89 本が 128MB 未満
  • 合計 26.1 GB のうち、上位 3 本だけで 20.3 GB(77.8%)

つまり「本数を減らす」はほぼ効きません。効くのは特定の 3 本だけです。

メモリを持っている順

平均が中央値の 6.9 倍になるのは、上位数本が桁違いに大きいからです。
平均で語ると判断を間違えます。「100 本動かしている」と聞いて想像するのは平均のほうですが、
実際は大半が数十 MB で、重いのはいつも同じ数本です。

メモリの上限を掛けていないコンテナが 67 本ある

98 本のうち 67 本は上限を設定していません。
それでも破綻していないのは、上限なしのコンテナが実際には数十 MB しか使っていないからです。
上限は「危ない数本」に掛ければ足りる、というのが実測から言えることです。

詰まり具合は「たまに重い」ではなく常態

この機体で効いているのはメモリより I/O でした。

I/O が詰まっていた割合

/proc/pressure/io の full は「全タスクが I/O 待ちで完全に止まっていた割合」です。
直近で 13.9%。体感の「たまに固まる」ではなく、常時この割合で止まっています

測り方(自分のサーバーでもできます)

特別な権限は要りませんでした。

  • コンテナの中からホストの /proc/pressure/proc/meminfo がそのまま見えます。
    --privileged/proc のマウントも要りません
  • コンテナごとの数字は Docker API の /containers/<id>/stats?stream=false&one-shot=true
    one-shot を付けないと Docker が 1 本ごとに約 1 秒待つので、98 本で 98 秒かかります。
    付ければ待たない代わりに CPU 割合が空で返るので、前回との差を自分で取ります
  • メモリの「作業実体」は usage - stats.cache(docker 本体と同じ勘定)

この計測そのものの重さは 1 周 257 ms(最大 331 ms)・
常駐 14MB 弱
でした。15 分に 1 回動かしています。
観測のために対象を重くしていないことは、測る側も測っておくべきだと思います。


自宅サーバーの実測を続けて書いています → https://lab.syutonton.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?