質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

2回答

3002閲覧

OSから認識されるメモリが減る?

metal777

総合スコア7

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

1グッド

0クリップ

投稿2021/09/28 04:53

さくらのVPSを使用していますが、インストールするOSによって free コマンドの結果が変わり、物理メモリの量が減ってしまいます。
ちょっと分かりにくいと思うので、以下の例をご覧ください。

現象

case 1) OSのバージョンを上げるとメモリ搭載量が減る例

さくらのVPSで、「1G(東京第2/V5)」プラン、OSは「標準OS(CentOS8)」にてお試しを申し込みます。
この状態で free が返すメモリ量は以下の通りです。

[root@tk2-***-***** ~]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) [root@tk2-***-***** ~]# free -b total used free shared buff/cache available Mem: 1028947968 178761728 481210368 13320192 368975872 692883456 Swap: 4294963200 0 4294963200

この後、 dnf update を実行して最新版に上げて再起動すると、以下のように返って来るメモリ量が10MB程度減ります。

[root@tk2-***-***** ~]# cat /etc/redhat-release CentOS Linux release 8.4.2105 [root@tk2-***-***** ~]# free -b total used free shared buff/cache available Mem: 1016778752 98779136 744222720 6787072 173776896 770322432 Swap: 4294963200 0 4294963200

なお、この後RockyLinuxに上げても free で返って来る物理メモリ量は 1,016,778,752byte のままでした。

case 2) カスタムOSとしてAlmaLinuxをインストールするとメモリ搭載量が減る例

さくらのVPSで、「1G(東京第2/V5)」プラン、OSは「カスタムOS(AlmaLinux)」にてお試しを申し込みます。
この状態で free で返って来るメモリ量は以下の通り828MB程度と、大幅に減少します。

[root@tk2-***-***** httpd]# cat /etc/redhat-release AlmaLinux release 8.4 (Electric Cheetah) [root@tk2-***-***** ~]# free -b total used free shared buff/cache available Mem: 848445440 370692096 134184960 43356160 343568384 291000320 Swap: 1999630336 5283840 1994346496

case 3) 他のハイパーバイザで確認した例

さくらのVPSはハイパーバイザにKVMを使用しているため、試しに手元のHyper-V環境にて「動的メモリ無効・RAM 1024MB」にてクリーンインストールしたところ、以下のように、いずれも物理メモリ量が変動し、かつ760MB程度となる結果でした。

ちなみにインストーラ(anaconda)にてrescue modeに入って free -b した時点で既にディストリビューション毎にメモリ認識量はバラバラなのですが、その時点では概ね 900MB 程度の結果を返します。

CentOS8.4
[root@localhost ~]# free -b total used free shared buff/cache available Mem: 781119488 179716096 361291776 5365760 240111616 474996736 Swap: 2168451072 0
AlmaLinux8.4
[root@localhost ~]# free -b total used free shared buff/cache available Mem: 781819904 176388224 351550080 5357568 254361600 479158272 Swap: 2172645376 0
RockyLinux8.4
[root@localhost ~]# free -b total used free shared buff/cache available Mem: 781127680 177455104 345628672 5361664 258043904 476631040 Swap: 2168451072 0

疑問点

case1~3のいずれにおいても以下のようになるため、物理メモリ自体は1GBで認識しているようです。

[root@localhost ~]# dmidecode -t memory | grep 'Size' | grep -v 'No Module' Size: 1 GB [root@localhost ~]# dmesg | grep Memory: [ 0.000000] Memory: 261120K/1048120K available (12293K kernel code, 2225K rwdata, 7712K rodata, 2476K init, 14048K bss, 324664K reserved, 0K cma-reserved)

これは free コマンドのバグ(実際にメモリ量は減ってない)なのか、それとも別の要因によるもの(実際にOSが使用できるメモリ量が減る)のどちらなのでしょうか?

また、過去に作成した他のゲストマシンを見ると、ゲストに割当てるメモリ量が同一であっても、free で返って来るメモリ量にバラつきがあることを確認しました。(CentOS6/7等で確認)
ただし、そのバラつきは1GBのメモリ量を割り当てているゲスト間でも、せいぜい数MB程度の差しかなかったのですが、今回は200MB程度の差が発生するなど、ちょっと意味が良く分からない状態です。

実はOSから認識されるメモリ量が減ることは「よくあること」なのでしょうか?
その場合、オンプレミス環境でもよくあることなのでしょうか?

Ko-xps👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Linuxのfree コマンドの見方とオプション availableやbuff/cacheの定義には以下のように書かれています。

plain

1メモリの空き状況を確認したいのであれば、free を見るよりも available を見ましょう。 2 3Linux の特性として「空きメモリを無駄にしない」という設計思想の元、free の領域は徐々に、 4でも着実に buff/cache の領域に割り当てられてしまうからです。 5

ということで、freeの値は何もしていなくても変化します。

投稿2021/09/29 23:41

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

metal777

2021/09/30 01:28

byte単位で確認したかったため `free -b` を使用しましたが、質問の意図としてはOSが認識するメモリ量が搭載量よりも減るのは何故かということについての質問でした。 /proc/meminfo にも reserved で減った分は出てこないようです。 ``` # dmesg | grep Memory: [ 0.000000] Memory: 216560K/1048160K available (12293K kernel code, 2225K rwdata, 7712K rodata, 2476K init, 14048K bss, 87028K reserved, 0K cma-reserved) # grep MemTotal /proc/meminfo MemTotal: 992948 kB ```
guest

0

ユーザが使用できるメモリ、というのは、マシンに搭載されてるメモリ量に、OS自体が使用する作業用のメモリ量を引いた残りとなります。

OSのアップデートなどを行ってもOSの作業領域となるエリアは増減しますし、他のOSともなるとまたそれは変わってきます。
数十MByte程度の差であるなら、イマドキの搭載メモリ量なら無視できる程度かと思います

投稿2021/09/28 05:02

編集2021/09/28 05:03
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

metal777

2021/09/28 05:05

以下サイトを見て、`dmesg | grep Memory:` で返って来る `Reserved` の分だけ減ることが分かりました。 https://qiita.com/ikwzm/items/9b5fac2c1332147e76a8 1GB搭載の仮想マシンで200MB予約されるのは流石に厳しいので、reserved memoryの量を減らしたいのですが、この設定を変更するにはkernelの再構築しかないでしょうか?
y_waiwai

2021/09/28 05:12

あなたが使う作業内容から、不要な作業領域を削減するような設定を行った上で再構築を行うなら作業領域は減らせるでしょう、けど、OSの内部構造にかなり精通していないと難しいかと思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問