1.背景
Linuxメモリに関しては、多くの場合、freeやtopなどの基本的なコマンドに注意を払います。システムで異常な状況が発生した場合、メモリの問題の根本原因がさかのぼり、オンサイト診断は詳細なデバッグ機能の欠如です。このページでは詳細については説明しません。すべてのSREが現在のシステムの問題を明確に説明する必要があるのは、最も基本的な機能です。
2.無料
2.1フリーコマンドの原則
無料は/ proc / meminfoをチェックしてメモリ使用量を取得することです。しかし、ファイル/ proc / meminfoはどこから来たのですか?最初に/ procディレクトリを理解しましょう:
- / procは仮想ファイルシステムです。このディレクトリ内のすべてのファイルは疑似ファイルです。このタイプのファイルはメモリにのみ存在し、スペースを占有しません。du-shを使用して、モールドパスの下のディスクがすべてIs0を占有していることを確認できます。 。
- / procの下のすべてのファイルは、proc_create()インターフェースを呼び出すカーネルによって作成された仮想エントリです。
- / proc内のほとんどのファイルは、システム情報(プロセス、メモリ、CPU、デバイス情報など)のリアルタイムステータスをフィードバックします。
結論:/ proc / meminfoは、メモリ関連の情報を/ procファイルシステムに保存する「疑似ファイル」です。
2.2コマンド出力の概要
各ディストリビューションの出力には特定の違いがあります。例としてdebian84.19.xディストリビューションを取り上げましょう。
root@4f996feeb851:~# free -m
total used free shared buffers cached
Mem: 1991 1909 81 4 155 836
-/+ buffers/cache: 917 1073
Swap: 1023 1 1022
コマンド出力の意味のほとんどは、manドキュメントで分析を見つけることができます。ここでは、詳細については説明しません。
- 使用済み:使用済みメモリ使用済み=合計空きバッファ-キャッシュ
- 無料:/ proc / meminfoの未使用メモリmemFreeとswapFree
- 共有:/ proc / meminfoのtmpfsshmemによって使用されるメモリ
- buffers:使用するカーネルによってバッファリングされたメモリ
- キャッシュ:ページキャッシュとスラブによって使用されるメモリ
- buffers / cache:バッファとキャッシュの合計を表します
- スワップ:スワップパーティションの使用法
2.3バッファとキャッシュはメモリを使用しますか?
答えは「はい」です。まず、バッファとキャッシュについて理解しましょう。
- キャッシュ(キャッシュ)の公式定義は、高速デバイスと低速デバイス間のアクセス速度の不一致を補い、リソースアクセスを高速化するためにスペースのセクションを予約するために使用されます。簡単に言えば、より速く読んでください。
- バッファ(バッファ)は、リソース書き込みシェーピング用です。コンピュータが多数の「小規模IO」に遭遇すると、書き込み数を減らすために少量の「大規模IO」にシェーピングされます。「ライティングリソース」の合理的な使用の効果を達成するために。
ただし、freeコマンドで表示されるバッファとキャッシュの意味はやや狭いです。freeで表示されるバッファはブロックデバイスが占有するキャッシュを表し、freeで表示されるキャッシュは通常のファイルが占有するページキャッシュ(キャッシュページ)を表します。
つまり、バッファとキャッシュで使用されるメモリは、Linuxの読み取りと書き込みのパフォーマンスを高速化するために使用されます。新しいプロセスでメモリが必要な場合、システムはバッファとキャッシュで占有されているメモリを再利用し、プロセスに再割り当てします。
2.4その他のメモリの概念
RSS&VSZ&PSS&USS
- RSS(常駐セットサイズ):sharedMemを含む、プロセスによって使用される実際の物理メモリサイズ。
- VSZ(仮想メモリサイズ):ページフォールトの中断によってスワップアウトされたメモリサイズやsharedMemを含む、プロセスがアクセスできるすべてのメモリサイズ。
- PSS(Proportional Set Size):メモリサイズをRSSに比例して追加します。
- USS(Unique Set Size):プロセス専用の物理メモリのサイズ。
usedMemはアクティブと非アクティブに分けられます
- アクティブ:メモリのこの部分が特定のプロセスによって使用されており、再利用される可能性が低いことを示します。
- 非アクティブ:メモリのこの部分が、実行状態ではなく、リサイクルされる可能性のあるプロセスに割り当てられていることを示します。
Linuxは、アクティブページと非アクティブページの回復を管理するためにLRUリストを維持します。簡単に言えば、リストの最後に近いほど、ページがリサイクルされる可能性が高くなります。逆に、リストの一番上に近いほど、ページがリサイクルされる可能性は低くなります。Linuxカーネルは、アクティブリストと非アクティブリストの2種類のLRUListを維持しています。アクセスされたばかりのページはアクティブリストに配置され、長期間アクセスされていないページは非アクティブリストに配置され、カーネルスレッドkswapdが配置されます。アクティブリストのページを非アクティブリストに定期的に移動します。
システムの非アクティブなメモリが大きすぎる場合は、次の操作で再利用できます。sync; echo 3 > /proc/sys/vm/drop_caches
3.仮想メモリ
最新のx86システムでは、コンピューターが使用できるメモリは、仮想メモリメカニズムに依存して、物理メモリの上限を超えています。Linuxは、仮想メモリメカニズムとリアルモードメカニズムをサポートしています。
リアルモードでは、コンピュータは物理メモリを直接適用します。仮想メモリメカニズムでは、システムはディスクをメモリの拡張として扱い、使用可能なメモリサイズが増加します。そして、マッピングマップのメカニズムを通じて、物理メモリとの真の対応を保存します。
ディスクとメモリ間でページを転送するアクティビティはスワッピングまたはページングと呼ばれ、仮想メモリとして使用されるディスクパーティションはスワップと呼ばれます。
オンラインでスワップを追加することにより、メモリ不足の問題を一時的に軽減できますが、通常、オンラインでスワップ操作を直接減らすことはできず、プロセスがクラッシュする可能性があります。特定のスワップ構成方法については、5.1スワップ関連の構成を参照してください。
4.おじさん
1. OOMとは何ですか?
メモリ不足キラーはLinuxのシステム保護メカニズムです。システムメモリが不足している場合は、システムがスタックしないようにいくつかのプロセスを強制終了します。システムは、スコアリングメカニズムを介してプロセスの強制終了操作を実装します。デフォルトのメカニズムは、すべてのプロセスのメモリ使用量、CPU使用率、およびその他の要因をスキャンしてから、スコア(不良)を実行することです。スコアが高いほど、強制終了されるプロセスの優先度が高くなります。
2.システムがプロセスをスコアリングするのはどのような動作ですか?
- プロセスはfork(2)を使用して呼び出します。多くの子プロセスを作成すると、ポイントが追加されます(+)
- プロセスが長時間実行されているか、CPU時間を大量に使用すると、ポイントが失われます(-)
- プロセスの良い値が比較的低い場合、ポイントが追加されます(+)
- プロセスが特権プロセス(特権)の場合、ポイントが差し引かれます(-)
- プロセスがハードウェアデバイスに直接アクセスできる場合、ポイント(-)が失われます。
3.プロセスのスコアはどこで確認できますか?/proc/<pid>/oom_score
4.スコアを手動で調整し
ます/ proc // oom_adjこのファイルを使用して、oomが発生したときに強制終了するプロセスを調整できます。範囲は-16〜 + 15で、デフォルト値は0です。
特別な値-17:プロセスが強制終了されないことを示します。
5.システムがOOMをトリガーしたかどうかを確認するにはどうすればよいですか?
/ var / log / messages、/ var / log / syslogシステムログまたはdmesgシステムログ診断ツールが見つかります。
ネットワーク図は次のとおりです。
5.メモリ関連の構成
5.1スワップ関連の構成
- システムパラメータを調整することにより、スワップパーティションの重みを使用するようにコンピュータに指示します
1. 简介
swappiness范围0-100,默认60
0: 表示禁止使用swap
60: 默认
100: 疯狂使用swap
2. 操作方法
# sysctl vm.swappiness=VALUE
# sysctl vm.swappiness=20
或者
# echo VALUE > /proc/sys/vm/swappiness
# echo 30 > /proc/sys/vm/swappiness
- スワップパーティションのサイズをオンラインで増やして、メモリリークやメモリ不足などの異常を一時的に制御します。
1. 需要root用户
2. 创建存储文件
# dd if=/dev/zero of=/home/swap2G bs=1024 count=2M
3. 安全设置
# chown root:root /home/swap2G
# chmod 0600 /home/swap2G
4. 创建liunx交换分区
# mkswap /home/swap2G
5. enable 交换分区
# swapon /home/swap2G
6. 更新fstab文件【注意: 部分操作系统不需要】
# vim /etc/fstab
/home/swap2G none swap sw 0 0
7. 检查是否生效
#free -m
8. 卸载swap分区
# swapoff /home/swap2G
5.2キャッシュ関連
sync; echo 3 > /proc/sys/vm/drop_caches
0:不释放
1:释放页缓存
2:释放 dentries 和 inodes
3:释放所有缓存
5.3OOM関連
- vm.panic_on_oom
oomメカニズムがトリガーされたときにカーネルパニックをトリガーするかどうか。0はオフ(推奨)を意味し、1はオンを意味します。カーネルパニックとは、コンピューターで致命的なエラーが発生し、その対処方法がわからない場合のアクションを指します。これは、Windowsのブルースクリーンに類似している可能性があります。もちろん、コンピュータの電源が入るたびにブルースクリーンが発生することは望ましくありません。0に設定することをお勧めします
- vm.overcommit_kbytes:
プロセスが適用できる最大メモリを制限するために使用されます。0は設定されないことを意味します。400などの他の値を設定した場合、プロセスが適用できる最大メモリはswap + 400kBytesです。
- vm.overcommit_ratio:
プロセスが使用できる最大メモリ(パーセンテージモード)を定義します。デフォルトは50です。50の構成後、プロセスがスワップ+ 50%*物理メモリの合計量を超えて適用することは許可されないことを示します
- vm.oom_kill_allocating_task(Linux 2.6.24以降のサポート)
これにより、メモリが不足している場合にOOMトリガータスクを強制終了することが有効または無効になります。0は無効(デフォルト)を意味し、1は有効を意味します。これは、デフォルトで無効になっているoomメカニズムのスイッチとして理解できます。つまり、oomトリガーは正常に実行される必要があります。
- あなたが興味を持っているなら、あなたは自分でprocをすることができます
6.結論
エラーがあれば訂正してください。
私たちはAlibabaCloudインテリジェントグローバルテクニカルサービス-SREチームです。テクノロジーベース、サービス指向、高可用性のビジネスシステムエンジニアチームになることをお約束します。プロフェッショナルで体系的なSREサービスを提供し、お客様がより有効に活用できるよう支援します。クラウド、クラウドをベースに、より安定した信頼性の高いビジネスシステムを構築し、ビジネスの安定性を高めます。
この記事はAlibabaCloudのオリジナルのコンテンツであり、許可なく複製することはできません。