はじめに
このドキュメントでは、Cisco Catalyst 9800ワイヤレスLANコントローラ(WLC)でのメモリリークについて説明します。
メモリ リーク
プログラムまたはプロセスが一時的な使用のためにメモリを割り当て、必要がなくなったときに正しく割り当て解除しない場合、そのメモリはオペレーティングシステムの観点から使用されたままになります。プロセスが動作を続け、メモリの割り当て解除が繰り返し失敗すると、プロセスが使用するメモリの総量が増大し、他のプロセスやシステム機能で使用できるメモリ量が少なくなります。メモリリークは通常、ソフトウェアの不具合や、システムファームウェアまたは実行されているアプリケーションの問題が原因で発生します。
Cisco Catalyst 9800 WLCの場合、メモリリークは次のように発生する可能性があります。
- パフォーマンスの低下:メモリがますます少なくなると、WLCの速度が低下する可能性があり、その結果、管理機能の応答時間が遅くなったり、ネットワークに接続されているクライアントデバイスのパフォーマンスが低下したりします。
- システムの不安定性:重要なプロセスが失敗し始め、クライアント接続の切断、WLCの管理不能、またはその他の不安定な動作につながる可能性があります。
- システムクラッシュ:深刻な場合、特に重要な操作を行うためのメモリが不足している場合、WLCがクラッシュして再起動する可能性があります。
注:9800 WLCでは、突然のリブートまたはクラッシュが発生し、リークされたメモリが再利用されて自身が回復する場合があります。メモリリークはバグが多い動作であるため、リークの原因となる設定や機能を無効にしない限り、リブート後もリークが発生します。
Syslog
%PLATFORM-4-ELEMENT_WARNING:R0/0: smand: RP/0 Used Memory Value 91%が警告レベル88%を超過
このメッセージには、メモリを消費している上位3つのプロセスの名前が、traceky、callsite ID、およびdiffコールとともに表示されます。
%PLATFORM-4-ELEMENT_WARNING: Chassis 1 R0/0: smand: 1/RP/0: Used Memory value 91%が警告レベル88%を超えています。上位のメモリ割り当て子は以下の通りです:プロセス: sessmgrd_rp_0.トレースキー:1#258b8858a63c7998252e96352473c9c6コールサイトID:11B8F825A8768000(diff_call: 20941) プロセス:fman_fp_image_fp_0トレースキー:1#36b34d8e636a89f6397a3b12acab9706コールサイトID:1944E78DF68EC002(diff_call: 19887)。 プロセス:linux_Cisco IOSd-imag_rp_0トレースキー:1#8ec74901dc8e23a44e060e69d5820eceコールサイトID:E2AA338E11594003(diff_call: 13404)。
9800 WLCでメモリリークの問題が発生したことを特定する方法
メモリリークは、WLCが提供するネットワークサービスの安定性と信頼性を損なう可能性があるため、すみやかに対処することが重要です。WLCのメモリリークを診断するには、CLIでさまざまなコマンドを使用して、時間の経過に伴うメモリ使用量を監視します。メモリを解放せずに大量のメモリを使用しているプロセスや、メモリが期待どおりに解放されていないことを示すパターンを探すことができます。
プラットフォームに完全に割り当てられているメモリの量を確認します。
9800WLC#show version | in memory
cisco C9800-L-F-K9 (KATAR) processor (revision KATAR) with 1634914K/6147K bytes of memory.
32768K bytes of non-volatile configuration memory.
16777216K bytes of physical memory.
!! Determines Total platform memory available, Here it is 16GB
各プールに割り当てられているメモリの量を確認します。
9800WLC#show processes memory
Processor Pool Total: 1674013452 Used: 823578520 Free: 850434932
reserve P Pool Total: 102404 Used: 88 Free: 102316
lsmpi_io Pool Total: 6295128 Used: 6294296 Free: 832
メモリ使用量を含め、リソース使用率を確認します。警告レベルまたは重大レベルを超える場合は、メモリリークの可能性を示している可能性があります。
9800 WLCのメモリ使用率
コントロールプレーンリソースの全体的なメモリ使用量の監視
9800WLC#show platform software status control-processor brief
Slot Status 1-Min 5-Min 15-Min
1-RP0 Healthy 0.52 0.75 0.80
Memory (kB)
Slot Status Total Used (Pct) Free (Pct) Committed (Pct)
1-RP0 Healthy 16327028 4898110(30%) 114218918 (70%) 5387920 (33%)
上位プロセスの割り当て済みメモリと使用済みメモリのサイズを監視します。メモリの空き容量が固定されたままか少なすぎる状態でもメモリの使用量が増加し続ける場合、Cisco IOSdレベルでメモリリークが発生する可能性が高くなります。
プロセス単位のメモリ統計(最も高い保持プロセスから開始)
プラットフォームレベルのメモリリークの問題については、常駐セットサイズ(RSS)カウンタを監視してください。RSSは、実行中にプロセスに割り当てられたメモリの量を示します。この値が急速に増加する場合は、メモリリークの可能性を示している可能性があります。
プラットフォームは最も高い保持プロセスからメモリ使用量を処理
Cisco IOS®プロセスのメモリリークのトラブルシューティング
Cisco IOS XEでは、Cisco IOSはLinuxカーネル(Cisco IOSd)上で実行されるプロセス(デーモン)として動作します。通常、Cisco IOSdは使用可能なプラットフォームDRAMの合計の35 ~ 50 %の間で割り当てられます。
WLCからの基本ログ
timestampを有効にして、すべてのコマンドに対する時間参照を設定します。
9800WLC#term exec prompt timestamp
設定およびメモリ関連情報を確認するには、次の手順を実行します。
9800WLC#show tech-support wireless
9800WLC#show tech-support memory
コアダンプファイルまたはシステムレポート(生成された場合)を収集します。
GUI 経由
移動先: Troubleshooting > Core Dumps and System Report
.
コアダンプおよびシステムレポート
CLI の場合
9800WLC#show bootflash: | in core/system-report
9800WLC#copy bootflash:system-report/Core_file {tftp: | ftp: | https: ..}
プロセッサメモリプール用
プロセス単位のメモリを確認します。最も高い保持プロセスから開始します。
9800WLC#show process memory sorted
関連するプールの合計メモリ統計情報を確認します。また、ブート以降に最大の空きブロックと最小の使用可能メモリも表示されます。
9800WLC#show memory Statistics
大量のメモリを割り当てたプログラムカウンタ(PC)を確認します。
9800WLC#show memory allocation-process totals
リークされたブロックとチャンクを確認します。
9800WLC#show memory debug leak chunks
!!This is CPU intensive cli and use only if above CLI output is not helping.
IOメモリプールの場合
上部の割り当て子を確認します。
9800WLC#show memory io allocating-process totals
最上位のアロケータがパケットデータまたはプールマネージャ(PEM)の場合は、どのcaller_pcが大量のバッファを要求したかをチェックします。
9800WLC#show buffers
9800WLC#show buffers usage
最上位のアロケータがmananged_chunk_process()
またはChunk Manager
プロセスの場合は、1つ以上のチャンクが大量のメモリを割り当て中であることを意味します。
9800WLC#show chunk summary
9800WLC#show chunk brief
プロセスMallocLiteが上位アロケータの場合。
9800WLC#show memory lite-chunks totals
9800WLC#show memory lite-chunks stats
Polaris/プラットフォームレベルでのメモリリークのトラブルシューティング
プラットフォームで使用可能なメモリリソースのメモリ使用率を確認します。
9800WLC#show Platform resources
システムメモリ全体のスナップショットを確認します。
9800WLC#show platform software process slot chassis active R0 Monitor | in Mem
ソートされたすべてのプラットフォームプロセスのメモリを確認します。
9800WLC#show process memory platform sorted
9800WLC#show platform software process memory chassid active r0 all sorted
コールサイトの最新の1時間ごとのステータスを確認します。
9800WLC#show process memory platform accounting
前の2つのCLI出力から上位候補を選択し、個々のプロセスのデバッグを有効にします。
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc callsite stop
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc callsite clear
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc backtrace start
depth 10
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc callsite start
!! Running these debugs has no impact to device
デバッグを開始してから数分後(15分から1時間)に出力を収集します。
9800WLC#show platform software memory
chassis <1-2/active/standby> R0 alloc backtrace
!! Capture this output three times, with a 5-10 minutes interval between each capture, to identify the pattern.
call_diff、allocs、およびfreesの値を各プロセスのバックトレースで確認します。
9800WLC#show platform software memory
chassis <1-2/active/standby> R0 alloc callsite brief
注: call_diff = allocs – 解放
allocs =解放した場合、メモリリークなし
frees = 0の場合、メモリリーク
allocsが解放され!=場合は、メモリリークの可能性が高いか低いかも知れません(call_diffの方が高い場合は、メモリリークの可能性が高いことを示します)
個々のプロセスのデータベースメモリのデータをキャプチャします。
9800WLC#show platform software memory
chassis <1-2/active/standby>active R0 alloc type data brief
9800WLC#show platform software memory database
chassis <1-2/active/standby> chassis active R0 brief
システムマウント情報を確認して、一時的に作成された仮想ファイルシステムのメモリ使用量を確認します。
9800WLC#show platform software mount
推奨事項
メモリの推奨事項とスケール制限については、関連する設定ガイド、データシート、およびリリースノートを参照し、WLCが最新の推奨リリースにアップグレードされていることを確認します。
関連情報