はじめに
このドキュメントでは、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% exceeds warning level 88%
このメッセージには、メモリを消費している上位3つのプロセスの名前が、トレースキー、コールサイト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_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%)
上位プロセスの割り当て済みメモリと使用済みメモリのサイズを監視します。空きメモリが固定されたままか非常に低い状態である間にメモリ使用量が増加し続ける場合、IOSdレベルでメモリリークが発生する可能性が高くなります。
プロセス単位のメモリ統計(最も高い保持プロセスから開始)
プラットフォームレベルのメモリリークの問題については、RSS(Resident Set Size)カウンタを監視します。RSSは、実行中にプロセスに割り当てられたメモリの量を示します。この値が急速に増加する場合は、メモリリークの可能性を示している可能性があります。
プラットフォームは最も高い保持プロセスからメモリ使用量を処理
IOSプロセスでのメモリリークのトラブルシューティング
IOS XEでは、IOSはIOSdと呼ばれるLinuxカーネル上で実行されるプロセス(デーモン)として動作します。通常、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
最上位のアロケータが「Packet Data or Pool Manager」の場合(または同様のメッセージが表示される)、どの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 <process> chassis <1-2/active/standby> R0 alloc callsite stop
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite clear
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc backtrace start <CALL_SITE> depth 10
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite start
!! Running these debugs has no impact to device
デバッグを開始してから数分後(15分から1時間)に出力を収集します。
9800WLC#show platform software memory <process> 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を確認し、プロセスごとに値を割り当て、それぞれのバックトレースで解放します。
9800WLC#show platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite brief
注: call_diff = allocs – 解放
allocs =解放した場合、メモリリークなし
解放= 0の場合、メモリリーク
割り当て!=解放された場合、メモリリークの可能性がある(またはメモリリークではない可能性がある)(call_diffの方が多い場合、メモリリークの可能性が高いことを示す)
個々のプロセスのデータベースメモリのデータをキャプチャします。
9800WLC#show platform software memory <process> chassis <1-2/active/standby>active R0 alloc type data brief
9800WLC#show platform software memory database <process> chassis <1-2/active/standby> chassis active R0 brief
システムマウント情報を確認して、一時的に作成された仮想ファイルシステムのメモリ使用量を確認します。
9800WLC#show platform software mount
推奨事項
メモリの推奨事項とスケール制限については、関連する設定ガイド、データシート、およびリリースノートを参照し、WLCが最新の推奨リリースにアップグレードされていることを確認します。