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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

3回答

2832閲覧

パソコンのメモリが90%の時に動作が重くなる仕組みが知りたい

iromay

総合スコア19

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

6グッド

4クリップ

投稿2022/06/20 13:06

編集2022/07/16 20:31

いつもお世話になっております。

プログラミングというよりオペレーティングシステムの仕様/実装の質問になり申し訳ありません。
Mac OSでのメモリ管理の仕組み/仕様/実装について知りたく、質問させて頂ければと思います。

[現象]
現在メモリ16GBのMacBookを使っています。
幾つかのアプリケーションを利用していると
パソコン自体の動作が緩慢になることがあります。
特に今回はChromeで大量のタブを開いていた為、
大量のプロセスを作成されており、それらがメモリを多く消費していました。
Chromeのタブを閉じることでメモリが解放され、
動作が元通りに安定しましたが、そこでMac OSのメモリ管理について少し気になったことがあります。

[疑問]
というのも動作が遅くなった際に、大体の場合メモリは90%を少し超えた位で
99%や100%にはなっていないのです。
つまり多少の空きがあると考えられます。
パソコンのメモリは16GBなので90%の使用率では1.6GBの空きがあると考えられます。
これだけあればもっとスムーズに動作が出来そうな気がするのですが、
実際は文字の入力にも4,5秒のラグが出たり、クリックの反応が遅くなったりします。

またChromeで大量のタブを閉じ、メモリの解放を行った後に、それを奪うように他のアプリがメモリを確保するということもありませんでした。

通常メモリが不足している際(メモリに空きが無い=使用率100%?)にアプリケーションから新たなメモリの使用要求があった際には
OSがそれに基づいて利用可能メモリの探索やメモリの圧縮を行い、
最終的に利用可能なリソースが見つからなかった場合にスワップアウトを実行し、
SSDやHDを仮想メモリとして利用され、物理メモリと仮想メモリのI/Oの速度差や
スワップイン/アウトの処理に伴う待ち時間の発生により、
処理が緩慢になるという事象が発生するという理解です。

ただ今回は使用率が100%になっておらず、メモリには空きがあったと考えられるので
上記のメモリ管理の仕組みと差がある為、それが何か知りたく質問させて頂きました。
(自分でもインターネットの記事を探してみたのですが、それを示す回答が見つからず。)

実行されているプロセスやリソース使用状況次第で色んな要因が考えられる上、Mac OSはOSSでは無いので
その詳細は仕様や動作は不明なところがあると思われますので、
今回の現象の真の原因が知りたいというよりも、

Mac OSのメモリ管理の仕組み上で想定出来る動作を知りたいと考えています。
(例:システム上の重要な動作を保証する為、メモリを完全に使い切り、使用率が100%になることはメモリリークなどが発生しない限りはないが
それ故に90%の時点で可処分メモリ枠が無くなっており、スワップイン/スワップアウトが頻発し動作が遅くなっている等)
何かアイデアをお持ちの方がいらっしゃいましたら、ご教示頂けますと幸いです。
(調べていた中ではWindows OSでもメモリ使用率が90%以上で動作が遅いという意見があったので、
Mac OSだけの動作では無いのかも知れません。)

[質問を受けての補足]
Mac OSのリソース状況を確認出来るActivity Monitorのメモリタブに表示される
メモリの逼迫状況をグラフィカルに表示するメモリプレッシャーについてですが、
発生時に確認し忘れていた為、その時点で何色を示していたか不明です。申し訳ありません。

glyzinieh, uky, nakanakasi, NKJSM, Bongo, a22r1345👍を押しています

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

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

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

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

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

iromay

2022/06/20 13:40

ご返信ありがとうございます。 すみません、実は既に大量のタブを閉じてしまった為、メモリが84%程度まで下がり その時点のメモリプレッシャーの状況が分からなくなっております。
jbpb0

2022/06/20 14:04

次回 > 動作が遅くなった際に、大体の場合メモリは90%を少し超えた位 となった時に確認してみてください
iromay

2022/06/20 14:06

承知いたしました。お忙しいところ、ありがとうございました。
guest

回答3

0

ベストアンサー

ファイルシステムキャッシュの影響があるのではないかと思います。

ディスクの読み書きは低速なので、OSは一度読み書きした内容を「空いているメモリ」にキャッシュすることで、ディスクの読み書きを高速化しています。この時に使う領域がファイル システム キャッシュです。

このキャッシュ領域として、OSは「空いているメモリ」を使います。キャッシュなのでいつでも解放して他のプロセスに渡せるため、OSはキャッシュに使っていても常に「空いてるメモリ」換算しており、他のプロセスがメモリを要求したら、キャッシュに使っていた領域を減らしてその部分を割り当てます。

実際のメモリ管理はかなり複雑なのでちょっと乱暴な計算例になりますが、例えば空きメモリが20%あれば、OSはファイル システム キャッシュとして20%使えます。でも、空きメモリが10%になってしまうと、ファイル システム キャッシュに使える領域は半分になってしまい、空きメモリがまだ10%あるにも関わらず、ディスクアクセス速度が悪化してパフォーマンスが低下します。

拙作のメモリ管理入門でも最後の方でこの話に触れていますので、もしよろしければご参照ください。
https://qiita.com/segavvy/items/9a9f8aa5cc4e6760307a

投稿2022/06/20 15:25

segavvy

総合スコア958

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

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

iromay

2022/06/20 15:32

お忙しいところ、ご回答ありがとうございます。 ファイルシステムキャッシュの事は初めて知ったので大変勉強になりました。 メモリ管理入門の記事もありがとうございます。しっかり読んでOSのメモリ管理の動作について理解していきたいと思います。ありがとうございました。
segavvy

2022/06/20 16:00

いえいえ、参考になりましたら幸いです。 あと、ご紹介したメモリ管理入門は超概要で、しっかり読むような内容ではないので、ざっくり把握していただく際の参考程度でお願いします(^^;
iromay

2022/06/22 14:46

紹介頂いた記事、初学者でもイメージしやすい身近な例で説明してあって、すごく分かり易かったです(^^)/
segavvy

2022/06/22 16:04

ありがとうございます!
guest

0

短めに答えます:
多くの(UNIX系)仮想記憶OSは、常時空きページ(フリーメモリ)をある最低限は確保するように動いています。
つまり、空きメモリが減ってくると,プロセスが使用中のメモリをHDDのページング領域(スワップ領域)に追い出す(ページアウト)などして空きメモリを作ります。ですので、メモリ使用率が100%には届いていなくても一部のページがスワップ領域に追い出され済みと言うことは起こります。
逆にメモリがたくさん空いているときは、バッファキャッシュにドンドン使いますので見た目の「フリーメモリ」は減ります。が、読み出しキャッシュはいつでも内容を破棄してプロセスのメモリに転用できるので、「フリー」にはカウントされないほぼフリーなメモリが存在したりします。
仮想記憶OSでは「空きメモリ量」はメモリが足りているかどうかの指標としては不適切です。macでしたらアクティビティモニターのメモリプレッシャーを用いるようです。

おまけ
UNIXは当初、仮想記憶ではなくスワッピングによるマルチタスクを行っていました。そのため仮想記憶システムになっても「スワップ」などスワッピング時代の言葉を使い続けています。が,実はOSの教科書の「スワッピングによるマルチタスク」で説明されているようなプロセススワップは行っていません。Macが行っているのはページングによる仮想記憶です。各プロセスの使用するメモリは「ページ」単位で管理され、ページ単位でページング領域(スワップ領域)に追い出されたり戻されたりします。Macにも「スワップアウトされたプロセス」という概念がありますが、その説明は省略。

投稿2022/07/01 02:14

a_saitoh

総合スコア702

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

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

iromay

2022/07/16 10:15

返信が遅くなり申し訳ありませんでした。やはり空きメモリを確保する為にページアウトが行われ、その結果動作が遅くなっていたということなのですね。おまけの方も大変勉強になりました。
guest

0

最近OSのメモリ管理は大きく、「スワップ」「圧縮」「キャッシュ/プリフェッチ」の3つのはずです。

スワップについて。メインメモリ4GBに対して、6GB使いたいということがあるはずです。これを実現するために、残メモリが減ってくると、HDD/SSDへメモリの一部(使用頻度が低いと判断した部分)を退避させます。再度使いたくなったときは、HDD/SSDからメインメモリへ書き戻します。HDD/SSD(特にHDD)はメインメモリに比べて桁違いに遅いので、これが発生すると、目に見えて遅くなります。

圧縮について。上記HDD/SSDが遅すぎるので、それを減らすためにメインメモリ上で何とかしようとするのが圧縮です。圧縮/展開するのにCPUを食いますが、スピードとしては上記よりマシです。これが発生すると、なんか遅いかな?引っかかりを感じるな?くらいだと思います。

キャッシュ/プリフェッチについて。メインメモリが潤沢に積まれているマシンの場合、メモリが余り気味になります。これがもったいないので、一回読んだ物を置いておく、またはこれからいるてあろう物を先読みしておく仕組みです。
メモリが不足気味になると、この領域は適宜捨てられます。
解放の遅いメインメモリのマシンの場合、引っかかりを感じたり、数秒待たされたりしますが、デスクトップ/ノートPCに搭載されているメインメモリだと体感出来ないと思います。

というわけで、数秒待たされるのは、スワップが発生していると思います。

投稿2022/06/28 00:15

ttb

総合スコア67

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

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

iromay

2022/06/28 17:25

やはりスワップが発生しているという事なんですね。 私の様な初学者だと単純に100%で無い = メモリを使い切っていないと考え、まだ余裕があるのだから、 スワップは起きていないと思い込んでしまい、今回の質問の様な疑問を抱いてしまいますね。 ご教授頂きありがとうございました。
ttb

2022/06/29 02:05

そう、その辺りがややこしいんですよね。 私も100%理解出来ている訳ではないのですが、アプリケーションは「これくらい使う可能性があるよ」とかなり大きめのメモリを要求(予約)します(コミットサイズ)。 でも、実際はそこまで使っていない事が多いです(ワーキングセット)。 さらに、OSの機能の一部を使う場合、他アプリと共用出来るメモリ領域があれば、共用したりします。 なので、だいたいの残メモリ量は表せても、真の残メモリ量がいくらなのかは、一言では表せないんですよね・・・。 こういう原因で、残メモリ量がまだあるのにスワップが発生するという事なのかなと。 Macは詳しくないですが、Windowsならタスクマネージャで、その辺りの値を監視出来たりします。
iromay

2022/07/16 11:31

メモリの管理について、現代の快適なマルチタスクを実現する為に、思った以上に複雑な操作が行われているのですね。とても勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問