メモリのトラブルシューティング

メモリのトラブルシューティングに関する詳細情報

ダイナミック ランダム アクセス メモリ(DRAM)は、すべてのプラットフォームで限られたリソースであり、使用率がチェックされるように制御またはモニタする必要があります。

Cisco NX-OS は、次の 3 つの方法でメモリを使用します。

  • Page cache :永続ストレージ(CompactFlash)からファイルにアクセスすると、カーネルはデータをページキャッシュに読み取ります。これは、将来データにアクセスするときに、ディスク ストレージに関連する遅いアクセス時間を回避できることを意味します。他のプロセスがメモリを必要とする場合、キャッシュされたページはカーネルによって解放されます。一部のファイル システム(tmpfs)は、純粋にページ キャッシュ内に存在します(たとえば、/dev/sh, /var/sysmgr, /var/tmp)。これは、このデータの永続的なストレージがなく、データが削除されたときを意味します。ページ キャッシュからは復元できません。 tmpfs-cached ファイルは、削除された場合にのみページキャッシュされたページを解放します。

  • Kernel :カーネルには、独自のテキスト、データ、およびカーネルロード可能モジュール(KLM)を保存するためのメモリが必要です。KLM は、(個別のユーザ プロセスではなく)カーネルにロードされるコードの一部です。カーネル メモリの使用例として、インバンド ポート ドライバがパケットを受信するためにメモリを割り当てる場合があります。

  • User processes Cisco NX-OS:このメモリは、カーネルに統合されていない Linux プロセス(テキスト、スタック、ヒープなど)によって使用されます。

高いメモリ使用率をトラブルシューティングする場合は、まず使用率の高いタイプ(プロセス、ページ キャッシュ、またはカーネル)を判別する必要があります。使用率のタイプを特定したら、追加のトラブルシューティング コマンドを使用して、この動作の原因となっているコンポーネントを特定できます。

プラットフォーム メモリ使用率の一般/高レベルの評価

次の 2 つの基本的な CLI コマンドを使用して、プラットフォームのメモリ使用率の全体的なレベルを評価できます。 show system resources および show processes memory .


(注)  


これらのコマンド出力から、プラットフォームの使用率が通常/予想よりも高いことがわかりますが、どのタイプのメモリ使用率が高いかはわかりません。



(注)  


show system resources コマンドの出力に空きメモリの減少が示されている場合は、Linux カーネル キャッシングが原因である可能性があります。システムがより多くのメモリを必要とするたびに、Linux カーネルはキャッシュされたメモリを解放します。show system internal kernel meminfo コマンドは、システムのキャッシュ メモリを表示します。


この項で説明している show system resources コマンドは、プラットフォームのメモリ統計情報を表示します。

switch# show system resources
Load average:   1 minute: 0.70   5 minutes: 0.89   15 minutes: 0.88
Processes   :   805 total, 1 running
CPU states  :   7.06% user,   5.49% kernel,   87.43% idle
                  CPU0 states  :   9.67% user,   6.45% kernel,   83.87% idle
                  CPU1 states  :   10.41% user,   7.29% kernel,   82.29% idle
                  CPU2 states  :   5.20% user,   4.16% kernel,   90.62% idle
                  CPU3 states  :   5.15% user,   2.06% kernel,   92.78% idle
Memory usage:   16399900K total,   6557936K used,   9841964K free 
Kernel vmalloc:   36168240K total,   18446744039385981489K free     >>>>>>>>>>>>
Kernel buffers:   10860132K Used>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.>>>>>>>
Kernel cached :   120072K Used >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> seeing these extra logs
Current memory status: OK

(注)  


この出力は、/proc/meminfo の Linux メモリ統計情報から取得されます。

  • total :プラットフォーム上の物理 RAM の量。

  • free :未使用または使用可能なメモリの量。

  • used :割り当てられた(永続的な)メモリとキャッシュされた(一時的な)メモリの量。

キャッシュとバッファは、カスタマー モニタリングには関係ありません。


この情報は、プラットフォームの使用率の一般的な表現のみを提供します。メモリ使用率が高い理由をトラブルシューティングするには、より多くの情報が必要です。

show processes memory コマンドは、プロセスごとのメモリ割り当てを表示します。

switch# show processes memory
Load average: 1 minute: 0.43 5 minutes: 0.30 15 minutes: 0.28
Processes : 884 total, 1 running
CPU states : 2.0% user, 1.5% kernel, 96.5% idle
PID 	MemAlloc MemLimit 	MemUsed 		StackBase/Ptr 				Process
---- -------- --------- --------- ----------------- ----------------
4662 52756480 562929945 150167552 bfffdf00/bfffd970 netstack

ユーザ プロセス

ページキャッシュとカーネルの問題が除外されている場合は、一部のユーザ プロセスが大量のメモリを使用しているか、実行中のプロセス数が多いため(使用可能な機能の数が多いため)、使用率が高くなっているという可能性があります。


(注)  


Cisco NX-OS は、ほとんどのプロセスのメモリ制限を定義しています(rlimit)。この rlimit を超えると、sysmgr によってプロセスがクラッシュし、通常はコアファイルが生成されます。rlimit に近いプロセスは、プラットフォームの使用率に大きな影響を与えない可能性がありますが、クラッシュが発生すると問題になる可能性があります。


大量のメモリを使用しているプロセスの特定

次のコマンドは、特定のプロセスが大量のメモリを使用しているかどうかを確認するのに役立ちます。

  • The show process memory コマンドは、プロセスごとのメモリ割り当てを表示します。
    
    
    switch# show processes memory
    PID   MemAlloc MemLimit   MemUsed  		StackBase/Ptr     Process
    ----- -------- ---------- ---------- ----------------- ---------
    4662  52756480 562929945  150167552  bfffdf00/bfffd970 netstack
    

    (注)  


    show process memory の出力 コマンドの出力は、現在の使用率の完全に正確な図を提供しない可能性があります(割り当てられていることを意味しません)。このコマンドは、プロセスが制限に近づいているかどうかを判断するのに役立ちます。


組み込みプラットフォームのメモリモニタリング

Cisco NX-OS には、システムのハング、プロセスのクラッシュ、およびその他の望ましくない動作を回避するために、カーネルによる、メモリ使用量のモニタリング機構が組み込まれています。プラットフォーム マネージャは、(搭載されている RAM の総量を基準とする)メモリの使用率を定期的にチェックし、使用率が設定されたしきい値を超えると、自動的にアラート イベントを生成します。アラート レベルに達すると、カーネルは不要になったページ(たとえば、アクセスされなくなった永続ファイルのページ キャッシュ)を解放することでメモリを解放しようとします。または、クリティカル レベルに達すると、カーネルは、メモリ使用率が最も高いプロセスを強制終了します。Cisco NX-OS の他のコンポーネントには、ボーダー ゲートウェイ プロトコル(BGP)のグレースフル ロー メモリ ハンドリングなどのメモリアラート処理が導入されており、プロセスがそれ自身の動作を調整してメモリの使用率を制御できるようなっています。

メモリしきい値

多くの機能が展開されている場合、ベースラインのメモリでは、次のしきい値が必要です。

  • MINOR

  • SEVERE

  • CRITICAL

デフォルトのしきい値は DRAM サイズに応じて起動時に計算されるため、その値はプラットフォームで使用されている DRAM サイズによって異なります。しきい値は、system memory-thresholds minor パーセンテージ severe パーセンテージ critical パーセンテージ を使用して設定できます。 コマンドを使用する必要があります。

Cisco NX-OS リリース 10.2(4)M 以降、デフォルトのシステム メモリしきい値は次のとおりです。

Cisco NX-OS リリース 10.3(1)F 以降、デフォルトのシステム メモリのしきい値は次のとおりです。

  • クリティカル:91

  • 重大:89

  • マイナー:88

拡張 BGP EVPN VxLAN VNI(サポートされている拡張については、Cisco Nexus 9000 シリーズ NX-OS 検証済み拡張性ガイドを参照)を含む拡張導入を実行しているスイッチでは、デフォルトのシステム メモリしきい値が Cisco NX-OS リリース 10.3(3)F リリースでサポートされています。システムがクリティカル メモリ アラートに反応しないようにするには、アップグレードする前に、システム メモリのしきい値をより高い値に構成します。たとえば、システム メモリのしきい値をマイナーの場合は 90、重大な場合は 94、クリティカルの場合は 95 に設定します。