- Linuxは物理メモリをキャッシュやバッファとして使用するため、「空き」RAMが少ないからといって必ずしも問題があるとは限りません。
- RAM、スワップ領域、仮想メモリ、ページキャッシュの組み合わせにより、プロセスの分離が可能になり、負荷が変動してもパフォーマンスが維持されます。
- free、htop、vmstat、pmap、cgroupv2などのツールを使用すると、プロセスやサービスによるメモリ使用量の診断と制限が容易になります。
- zram、zswap、EarlyOOM、systemd-oomdなどの技術は、メモリ負荷に対するシステムの応答性を向上させ、クラッシュを防ぎます。
Linuxベースのサーバーやデスクトップを扱う場合、メモリ管理は高速なシステムと低速なシステムを分ける重要な要素の一つです。Debian、Ubuntu、AlmaLinux、CentOSなど、どのディストリビューションであっても、LinuxがRAM、スワップ、その他の内部メカニズムをどのように処理するかを理解することは、クラッシュ、パフォーマンスの低下、安定性の問題を防ぐために不可欠です。
さらに、要求の厳しいデータベース、コンテナ、フルデスクトップ、重いアプリケーションを実行する現代の環境では、「RAM が多い」だけでは不十分です。 Linuxはどのようにメモリを使用するのか、そして各指標は実際には何を意味するのか 何が見えますか のようなツール top, htop, free o vmstatカーネル、スワップ、cgroups、あるいはzram、zswap、EarlyOOM、systemd-oomdといったメカニズムの動作を微調整するには、どのような選択肢があるのでしょうか?
Linuxにおけるメモリの基礎
Linuxは利用可能なメモリを最大限に活用するように設計されているため、カーネルがRAMをディスクキャッシュ、バッファ、一時ストレージとして使用し、データやアプリケーションへのアクセスを高速化するため、RAMが「空」に見えることはほとんどありません。そのため、多くの誤解が生じますが、「空き」メモリが少ないように見えるのは問題の兆候ではなく、システムが効率的に動作している証拠なのです。
コンピュータが管理できるメモリの総量は、オペレーティングシステムのアーキテクチャによって異なります。32ビットシステムは通常、アドレス指定可能なメモリが約4GBに制限されますが、64ビットシステムは数十GBから数百GBを容易に処理できます。理論的には、64ビットアーキテクチャは膨大な量(エクサバイト単位)に対応できますが、実際には、ハードウェアとカーネルによって実際の制限が決定されます。
Linuxは セグメンテーションとページネーション メモリを整理するため。メモリは固定サイズのページ(通常は4 KiB)に分割され、これは次のようにクエリできます。 getconf PAGESIZEカーネルは、仮想アドレスを物理アドレスに変換したり、権限を適用したり、各ページの状態を制御したりするために、ページテーブルと呼ばれる内部構造を管理します。
物理メモリ、つまりコンピュータに搭載されているRAMは、高価ではあるものの非常に高速なリソースです。Linuxは、プロセスの実行、データキャッシュ、共有メモリ、I/Oバッファ、およびカーネル内部構造にこれを使用します。プロセスがRAMをすべて使い切らない場合、システムはディスクキャッシュを使用して不足分を補い、低速なファイルやストレージデバイスへのアクセスを高速化します。
RAMには限りがあるため、Linuxは仮想メモリとスワップ機構を使用して利用可能な領域を論理的に拡張し、ページがRAMと二次記憶装置の間で再利用および移動されている場合でも、プロセスが広くて連続したアドレス空間を認識できるようにします。
仮想メモリ、物理メモリ、スワップ、ディスク
Linuxでは、「仮想メモリ」という用語は、各プロセスから見えるメモリ空間を指す場合によく使われます。プロセッサのMMUとカーネルのページテーブルの組み合わせにより、各プログラムは独自の隔離された保護されたアドレス空間を持つことができます。この空間は利用可能なRAMよりもはるかに大きく、物理メモリ、スワップファイル、およびマップされたファイルに依存しています。
物理メモリ(RAM)は、実際に使用されているページが格納される場所です。一般的なワークロードには十分なRAMを用意することが不可欠です。例えば、MongoDBのようなデータベースを搭載したサーバーは、データベースエンジンやその他のサービスが必要とする以上の物理メモリを必要とします。なぜなら、MongoDBがスワップを多用せざるを得なくなると、パフォーマンスが著しく低下するからです。RAMへのアクセスはナノ秒単位で計測されるのに対し、ディスクのスワップ処理はミリ秒単位で行われます。
スワップメモリは、RAMの低速な拡張機能として機能します。物理メモリがいっぱいになると、Linuxは使用頻度の低いページをスワップ領域に移動できます。スワップ領域は、専用のパーティションまたはファイルシステム内のファイルとして使用できます。どちらの方法も有効であり、選択は管理方針、管理の容易さ、およびハイバネーションの要件によって異なります。
スワップ領域の仕組みを正しく理解することが重要です。スワップ領域は悪者ではありません。それ自体がシステムの低速化の原因となるわけでも、システムがクラッシュした時だけ使用すべきリソースでもありません。適切に設定すれば、スワップ領域は非アクティブな匿名ページ(例えば、長期間使用されていないプロセスメモリの一部)からRAMを解放し、高速処理を必要とする新しい処理のための領域を確保することができます。
RAMとスワップ領域に加えて、ストレージデバイスも重要な役割を果たします。ディスクメモリには、再起動や停電後も保持される永続的なデータが保存されます。コンピュータの電源が入っている間は、このデータの大部分がRAM(ページキャッシュ)にキャッシュされ、カーネルは最近の使用状況に基づいて、どのページを保持し、どのページを削除するかを決定します。これは、コストのかかるディスクアクセスを最小限に抑えることを目的としています。
Linuxにおけるメモリ使用量の流れ
Linuxシステムにおける典型的なデータフローは、いくつかの要素から構成されます。ユーザーまたはアプリケーションが要求を生成し、システムはそれをメモリおよびディスクへのアクセスに変換します。ストレージから読み取られたデータは、まずRAMにロードされ、ページキャッシュに保持されます。再度要求された場合、カーネルは既にキャッシュされているかどうかを確認し、新たなディスクアクセスを回避します。
CPUとMMUもこのプロセスに関与しています。CPUは仮想アドレスで動作し、ページテーブルを使用して、ハードウェアは各アクセスをRAM内の物理アドレスに変換するか、アドレスがロードされていない場合はページフォールトメカニズムを使用して解決します。データを永続化する必要がある場合はディスクに書き込まれますが、処理中はパフォーマンス向上のため、高速メモリに保持することが優先されます。
RAMの残量が少なくなると、カーネルがメモリ解放アルゴリズムを実行します。使用頻度の低いページキャッシュを解放したり、メモリ領域を圧縮したり、優先度の低いページをスワップ領域に置き換えたり、状況が深刻になった場合は、OOMキラーを起動するなど、より抜本的な対策を講じることもあります。
Linuxにおけるプロセスのメモリマップ
Linux上で実行されるすべてのプロセスには、メモリマップまたはメモリレイアウトがあり、それによってアドレス空間の構成方法、つまり実行可能コード、グローバル変数、ヒープ、スタック、コマンドライン引数、環境変数、共有ファイルまたはライブラリのマッピングがどこに配置されるかが定義されます。
このマップは通常、いくつかの明確なセグメントに分割されます。仮想空間の最下部にはテキストセグメント(プログラムのバイナリコード)があり、その下に初期化済みおよび未初期化のデータセグメント(BSS)、さらに動的割り当てが格納されるヒープ、そして最上部にはプロセススタックが配置されます。引数と環境変数もアドレス空間の上部に配置されます。
このテキスト領域には、プログラムの実行命令と共有ライブラリの命令が含まれています。通常は読み取り専用であり、同じバイナリを実行する複数のプロセスで共有できるため、物理メモリを節約できます。この領域への書き込みを試みると、セグメンテーション違反が発生します。
初期化済みデータセグメントには、開始時にゼロ以外の値を持つグローバル変数と静的変数が格納されます。このセグメントは、データ型に応じて、概念的に読み取り専用部分と読み書き可能な部分に分けられます。一方、BSSセグメントには、コード内に明示的な値を持たない、またはゼロに初期化されたグローバル変数または静的変数が格納されます。
ヒープは動的メモリ管理に使用される領域であり、malloc、calloc、reallocなどのコマンドによって管理されます。プログラムがメモリを要求すると、ユーザーメモリマネージャはヒープからメモリを取得します。freeコマンドでメモリを解放すると、メモリはヒープに戻されますが、必ずしもオペレーティングシステムに戻されるとは限りません。そのため、内部的なメモリ断片化が発生する可能性があります。スタックはローカル関数変数、戻りアドレス、およびパラメータ用に予約されており、関数呼び出しと戻りごとにサイズが増減します。
実行中のプロセスのメモリマップを調べたい場合は、次のようなツールを使用します。 pmap これらは非常に役立ちます。 pmap <PID> マッピングされたさまざまな領域、そのサイズ、権限、匿名であるかファイルに関連付けられているか、RAM 内の常駐サイズ (RSS)、およびアプリケーションの実際のメモリ消費量を理解するのに役立つその他のメトリックを確認できます。
主要概念:ページ、ページフォールト、キャッシュ
Linuxにおけるメモリ管理の最小単位はメモリページであり、通常は4 KiBですが、特定のワークロード向けにはより大きなページ(巨大ページ)も利用可能です。カーネルが何を移動、解放、またはキャッシュするかに関するすべての決定は、個々のバイトレベルではなく、ページレベルで行われます。
ページテーブルは、カーネルによって管理される階層構造であり、仮想アドレスが物理アドレスにどのように変換されるかを示します。各エントリには、読み取り、書き込み、実行の権限、ページの状態(メモリ内、スワップ内、ダーティ、共有など)、およびMMUが変換中に使用するその他のメタデータに関する情報が含まれます。
ページフォルトは、プロセスが有効な仮想アドレスにアクセスしたが、対応するページが使用準備ができていない場合に発生します。ページがまだ割り当てられていない、ディスク上にある、または初期マッピングが必要な場合などが考えられます。カーネルは、そのページを見つけるか作成するために介入します。ページがRAM上に存在していても適切にマークされていない場合は、フォルトのコストは低くなります。ディスク(スワップ領域またはファイル)からフェッチする必要がある場合は、コストははるかに高くなります。
ページキャッシュは、Linuxの優れたパフォーマンスを支える大きな秘密の一つです。カーネルはファイルデータとメタデータをRAMに格納することで、読み書き速度を向上させ、ディスクアクセス回数を大幅に削減します。そのため、空きメモリが少ないように見えても、実際には多くのRAMが利用可能です。アプリケーションがより多くのメモリを必要とする場合、カーネルはキャッシュ領域を迅速に解放できるからです。
仮想空間内では、マップされたファイルにリンクされたファイルメモリ(例えば、バイナリやライブラリのコード、または明示的にマップされたファイル)も区別されます。 mmap)、および匿名メモリ。これは、ファイルバックアップのないヒープ、スタック、およびその他のマッピングに対応します。後者は、必要な場合にのみスワップアウトできます。 再生成できるファイルがありません.
メモリ負荷、スラッシング、およびメモリ不足
空きページ数が一定のしきい値を下回ると、システムはメモリ不足の状態に入ると言われます。この状態では、カーネルは解放、圧縮、またはスワップ領域への移動が可能なページを探すのに多くの時間を費やす必要があり、これがシステム全体のパフォーマンスに影響を与えます。
ウェブサーバーでは、メモリ負荷が高いとレイテンシが増加する可能性があります。ワーカーはリクエストの処理を続行する前にページが解放されるのを待つ必要があり、CPUはペイロードの処理ではなくメモリ管理タスクにサイクルを費やします。デスクトップでは、これはカクつき、マウスの反応の鈍さ、ウィンドウの応答停止、さらには一時的なフリーズといった形で現れます。
SSH、RDP、VNCなどのリモートアクセスでは、この状況はコマンドが「ハングアップ」したり、入力に時間がかかったり、全体的に動作が遅くなったりといった形で現れます。さらに、スワップ領域が多用されている場合は、システムが有用なコードを実行するよりも、RAMとストレージ間でページを移動することに多くの時間を費やすスラッシング状態になる可能性があります。
スラッシングは、アクティブな作業プロセスセットを維持するのに十分なRAMがない場合に発生します。スワップが有効になっている場合、匿名ページがRAMとスワップ領域の間を絶えず行き来し、ディスクI/Oを引き起こします。スワップがない場合、カーネルはこれらの匿名ページをダンプする場所がなく、唯一の解決策はOOMキラーを使用してプロセスを終了させることです。
スワップ領域がなくても、ファイルメモリのスラッシングは発生する可能性があります。ファイルキャッシュに属するページは、アプリケーションが必要とする速度でディスクから継続的に読み込まれ、I/Oアクティビティのループが発生して極度の低速化につながります。
カーネルがメモリ確保のためのあらゆる手段(キャッシュの解放、スワップ領域へのページ移動、圧縮、cgroupsポリシーの適用など)を使い果たすと、メモリ不足(OOM)状態になります。その時点で、OOMキラーはメモリを解放し、システムの残りの部分を保護するため、終了させるプロセスを1つ以上選択する必要があります。
どのプロセスを終了させるかを選択するために、カーネルは oom_score 各PIDについて、使用メモリ量、プロセスの重要度、その他の内部パラメータなどの要因に基づいて動作します。この動作は以下のように変更できます。 oom_score_adj特定のプロセスの重みを調整するツール。 choom これらを使用すると、これらの値を簡単に表示および変更できます。
スワップ:神話、ベストプラクティス、そして現代のバリエーション
スワップは、やや不当に悪い評判を受けています。多くのユーザーは、スワップは絶対に避けるべきものだと考えたり、RAMが非常に限られている場合にのみ意味があると考えたりしています。しかし、Linuxでは、スワップは仮想メモリ戦略全体の一部です。カーネルが非アクティブな匿名ページをRAMから移動させ、アクティブなデータとページキャッシュを優先できるようにするものです。
スワップを、他の手段がすべて失敗した場合にのみ使用する「最後の手段」と考えるのは誤りです。実際、十分なRAMを搭載したシステムであっても、スワップを使用することで、カーネルはメインワーキングセットをより柔軟に動作させ、物理メモリをより有効に活用するための余裕を持つことができます。ただし、スワップの使用頻度が非常に高く、かつ持続的な場合、パフォーマンスが著しく低下するのは事実です。
実際には、スワップ領域はRAMの1~2倍のサイズにすべきだという従来のルールは、もはや絶対的な法則ではありません。大容量メモリを搭載したサーバーでは、スワップ領域をRAMの容量に比例してはるかに小さく割り当てたり、 zramやzswapといった技術を用いてスワップ領域をRAMに圧縮して使用することで、パフォーマンスを向上させ、ディスクへの書き込み回数を減らすことが一般的になっています。
スワップのもう一つの用途はハイバネーションです。システムはRAMの内容をスワップ領域にダンプして完全にシャットダウンし、起動時に元の状態に戻すことができます。これには、保存するメモリ量以上のスワップ領域が必要であり、これはzram(ハイバネーションをサポートしない)や従来のディスクスワップといったソリューションの選択に影響を与える要因となります。
近年、一部のカーネルでは、OOM-killer の動作に問題があり、OOM-killer が効果を発揮する前にシステムがクラッシュするという報告も出ています。特定のケースでは、次のようなショートカットを有効にすると、 Alt+SysRq+F (パラメータを有効にした後) /proc/sys/kernel/sysrqこれにより、フリーズしたように見えるシステムをOOMキラーに強制的に復旧させることができます。さらに、EarlyOOM、nohang、systemd-oomdなどのデーモンは、カーネルが極端な状況に陥る前に対応するために登場しました。
メモリの監視と管理のためのツール
メモリの問題を回避するには、適切なツールを使用することが不可欠です。次のようなコマンド free, top, htop, vmstat, ps o sar 提供する システムの状態を非常に詳細に分析したX線写真リアルタイムでも、時間経過に伴う変化においても。
コマンド free メモリの総量、使用済みメモリ、空きメモリ、キャッシュメモリ、バッファ、そしてスワップ情報を素早く表示します。これは、実際に物理メモリが不足しているのか、それとも大部分がキャッシュされていて問題なく再利用できるのかを確認するのに非常に役立ちます。
クラシック top およびその改良型 htop これらを使用すると、プロセスごとのCPUとメモリの使用量、システム負荷、稼働時間、スワップ使用量、その他の指標をリアルタイムで確認できます。 htopはよりユーザーフレンドリーなインターフェースを提供します。カラーバーとキーボードショートカットを使って、プロセスを素早く並べ替えたり、フィルタリングしたり、強制終了したりできます。
コマンド vmstat メモリ統計、プロセス、ページング、割り込み、CPUスケジューリングなど、より技術的な視点を提供します。過剰なページフォルト、高いスワップアクティビティ、スラッシングパターンを検出するのに最適です。一方、 ps この機能を使うと、常駐メモリ(RSS)、仮想メモリ(VSZ)、および「トリガー」されたアプリケーションを特定するのに役立つその他のパラメータの列を含む、プロセスを非常に詳細に一覧表示できます。
Debian または AlmaLinux 環境では、次のようなパッケージがあります。 sysstat 次のような追加コマンドを提供します sar、 時間の経過に伴うメモリ使用量を記録するこれにより、消費量のピークをスケジュールされたタスク、デプロイメント、または特定のイベントと関連付け、それに応じてシステム構成を調整することが可能になります。
特定のプロセスのメモリマップを検査するには、 pmap擬似ファイルシステムを探索するのは常に良い考えです /proc各プロセスには、メモリ マップを含む詳細情報が入った独自のディレクトリがあります。 /proc/<PID>/maps 統計 /proc/<PID>/smaps.
基本的な最適化:スワップ、キャッシュ、スワップネス
理論を超えて、いくつかの簡単な実践的な行動があります Linuxにおけるメモリ管理の微調整 気が狂わないように。まず最初にすべきことの1つは、スワップの状態を確認することです。 swapon --show また、必要に応じて、パーティションだけに頼るのではなく、スワップファイルを作成してください。これにより、ディスクを再パーティションすることなくサイズを調整できる柔軟性が得られます。
パラメータ vm.swappiness これは、カーネルがスワップをどれだけ積極的に使用するか、キャッシュを解放するかを制御します。値が大きいほどスワップの使用頻度が高くなり、値が小さいほどスワップはより極端なケースのために確保され、RAM にデータを保持することが優先されます。設定例: 交換可能性=10 これらは多くのデスクトップ環境や軽量サーバー環境でうまく機能する傾向があり、一時的に適用できます。 sysctl を使用したカーネル最適化 または継続的に /etc/sysctl.conf.
キャッシュを手動でクリアしたい非常に特殊な状況(たとえば、既に完了した高負荷の読み取り処理の後など)では、次の設定を使用できます。 vm.drop_caches. 組み合わせる sync そして、そのパラメータに適切な値(1、2、または3)を書き込むことで、カーネルは特定のキャッシュを破棄します。ただし、慎重に使用するのが最善です。 キャッシュは「無駄なメモリ」ではないしかし、これは大幅な最適化である。
DebianやAlmaLinuxのようなディストリビューションでは、これらの設定に加えて、リソースを大量に消費するプロセスを適切に監視することが一般的です。 htop o psメモリを大量に消費するサービスやアプリケーションを特定し、必要に応じてそれらを再構成したり、消費量を制限したりする。
スワップ領域の作成と調整は比較的簡単な操作です。 fallocate正しい権限を割り当て、スワップとして初期化します。 mkswap そしてそれをアクティブにする swapon変更を永続的にするには、適切なエントリを追加します。 /etc/fstab これは、このファイルが起動時に毎回スワップとして使用されることを示しています。
高度な技術:zram、zswap、cgroupv2、およびユーザー空間でのOOM
最適化をさらに進めたい場合、zram、zswap、名前空間、cgroupsなどの高度なメカニズムに加え、EarlyOOM、nohang、systemd-oomdなどのデーモンが活用されます。これらのデーモンは、メモリを最大限に活用し、負荷がかかった状態でのシステム応答性を向上させるように設計されています。
zramはカーネルモジュールを使用して、RAM自体に圧縮ブロックデバイスを作成します。これらのデバイス上にスワップ領域をマウントできるため、ページは保存前に圧縮されます。実際には、圧縮にCPU時間を多少消費するものの、利用可能なメモリをより効率的に活用でき、ディスクへの書き込みも不要になります。ただし、ハイバネーション機能は利用できなくなります。
zswapは、ディスク上の実際のスワップ領域に対する圧縮キャッシュとして機能します。スワップ対象のページは、最初はRAMに圧縮されて保存され、そのキャッシュがいっぱいになった場合、またはページが追い出された場合にのみ、従来のスワップ領域に書き込まれます。これにより、ディスクI/Oが削減され、SSDの寿命が延び、スワップの使用量が中程度の状況でのパフォーマンスが向上します。
リソース制御の分野では、cgroupv2 はプロセスを階層化してメモリ、CPU、その他のリソースを割り当てるための強力なメカニズムを提供します。これは、次のようなパラメータによって実現されます。 memory.low または次のようなファイル memory.pressureカーネルに対してどのグループに優先順位を与えるかを指定したり、メモリ不足のためにタスクがブロックされている時間を監視したりすることで、問題が一部のタスクに影響しているのか、グループ全体に影響しているのかを区別できます。
システムのフリーズを何としても回避しなければならないシナリオでは、OOM 状況をより積極的に管理するために、いくつかのユーザー空間デーモンが登場しました。EarlyOOM は、RAM とスワップを定期的に監視し、両方が特定のしきい値を下回った場合 (デフォルトでは、10%未満が無料 (作用を開始する)より大きなプロセスに信号を送ります oom_score カーネルパニックが発生する前にメモリを解放するため。
nohangは、zramをサポートし、メモリ負荷を分析し、クラッシュリスクが検出された際にユーザーがカスタムアクションを定義できるなど、同様のアプローチをより柔軟に設定できる機能を提供しています。他のプロジェクトに比べて活動はやや低調ですが、どのプロセスをいつ強制終了するかを細かく制御したい上級ユーザーにとっては魅力的な選択肢であり続けています。
最後に、元々はFacebookが開発し、現在では多くのディストリビューションに最新のsystemdとともに統合されているsystemd-oomdは、大規模な展開環境とデスクトップ環境の両方に対応したソリューションを提供します。cgroupの制限、メモリ負荷、その他の指標を監視し、システムの使いやすさを回復するために停止すべきユニットやサービスを決定します。これは、従来のカーネルOOMキラーをより高度に補完する機能です。
記憶障害を避けるための良い習慣
日常的な使用においては、特定のパラメータを調整するだけでなく、 Linux におけるメモリ関連の問題を最小限に抑えるために、一連のベストプラクティスに従うことをお勧めします。まず、実際のワークロードに基づいて RAM とスワップのサイズを適切に設定することです。データベース、アプリケーションサーバー、負荷の高いデスクトップ環境、または複数のコンテナ負荷は、単純なサービスよりも多くのメモリを必要とします。
サーバー上では、実行中のサービスを定期的に確認し、使用していないサービスは無効化または停止することをお勧めします。Dockerなどのコンテナ環境では、テストや一時的なデプロイが完了した後、不要になったコンテナ、イメージ、ボリュームをクリーンアップして、残存プロセスがメモリを無意識に消費するのを防ぐのが賢明です。
RAMディスクは、特定の種類の一時的なタスクを高速化するための便利なツールとなり得ます。RAM上にファイルシステムを定義し、アプリケーションデータや頻繁にアクセスされる作業領域をキャッシュするために使用されます。RAMディスクは揮発性であるため、コンピュータの電源を切ったり再起動したりすると内容が失われることを理解しておくことが重要です。しかしその代わりに、SSDよりも数十倍高速になる可能性があり、集中的な一時的な読み書きタスクには非常に有利です。
セキュリティの観点から、開いているポートを監視し、厳密に必要なポートのみを公開することが重要です。クリプトマイナーなどのマルウェア攻撃は、大量のCPUとメモリを消費するプロセスという形で痕跡を残し、タスクをインストールすることができます。 crontab 継続するには、疑わしいcronジョブをレビューしてクリーンアップし、不要なポートを閉じることで、不要なプロセスによるメモリの消費を防ぐことができます。
最後に、ファイルシステムが全体的なパフォーマンスに与える影響も見過ごしてはなりません。XFSやBtrfsといった最新のファイルシステムは、特に負荷の高い処理時や高度な機能を利用する場合など、特定のシナリオにおいてext4よりも優位性を発揮する可能性があります。それぞれのケースでテストが必要ですが、ファイルシステムの選択はメタデータやディスクアクセスの処理方法にも影響を与え、ひいてはシステムのスムーズな動作にも間接的に影響を及ぼします。
Linuxにおけるメモリ管理をマスターするには、RAM、スワップ、ストレージの割り当て方法、ページ、ページキャッシュ、メモリプレッシャー、OOMといった概念の役割、そしてzram、zswap、cgroupv2、systemd-oomdなどの高度なツールやメカニズムの使い方を理解する必要があります。こうした知識があれば、小規模なノートPCから多数のサービスが稼働する本番サーバーまで、あらゆるマシンを細かく調整することが容易になり、メモリが問題の原因となるのではなく、ピーク時の負荷にも問題なく対応できる、俊敏で安定したシステムを実現するための強力な味方となるでしょう。
