我正试图通过SNMP从Cisco交换机获得每个进程的内存使用。
我找到了一篇文章,建议您可以减去CISCO-PROCESS-MIB.cpmProcExtMemAllocatedRev
和CISCO-PROCESS-MIB.cpmProcExtMemFreedRev
(思科进程内存使用情况),但这似乎不会导致合理的值。
这些值通常是相同的(结果为零),有时所释放的值大于分配的值(导致一个负数)--尽管我认为这可能是因为在我提取分配的结果时和我提取释放的结果之间释放了内存。
开关上的show processes memory
输出显示的结果与我通过SNMP看到的结果相同(如果分配的释放逻辑是正确的,则是疯狂的值),但它也显示了一个Holding
列,它看起来符合我的需要。
Switch1#show processes memory
Processor Pool Total: 175382376 Used: 47922940 Free: 127459436
I/O Pool Total: 16777216 Used: 13591380 Free: 3185836
Driver te Pool Total: 4194304 Used: 40 Free: 4194264
PID TTY Allocated Freed Holding Getbufs Retbufs Process
0 0 118863872 66054580 48365728 0 0 *Init*
0 0 12476 2411645460 12476 0 0 *Sched*
0 0 3937788032 4286508576 3540184 15562527 1490354 *Dead*
0 0 0 0 394476 0 0 *MallocLite*
1 0 348672 187988 175856 0 0 Chunk Manager
2 0 232 232 4160 0 0 Load Meter
3 0 76 0 9236 0 0 hulc_entropy_thr
4 0 0 0 10080 0 0 Connection Mgr
5 0 4712 4520 11692 0 0 Check heaps
6 0 16741228 29720504 38796 14834428 22351307 Pool Manager
我在Holding
上找不到任何关于CISCO-PROCESS-MIB
的参考资料,我在网上搜索也没有运气。
有人知道如何通过SNMP获取这个Holding
字段吗?
发布于 2018-10-24 19:52:05
我刚刚花了半个小时来研究这个问题,我认为没有办法从SNMP中获得准确的数字。
这是从cpmProcess中的3个表中获得的数据(还有更多的OID,但它们似乎不在我正在查看的设备上填充)
CISCO-PROCESS-MIB::cpmProcessPID.1.5 = Gauge32: 5
CISCO-PROCESS-MIB::cpmProcessName.1.5 = STRING: Pool Manager
CISCO-PROCESS-MIB::cpmProcessuSecs.1.5 = Gauge32: 215 microseconds
CISCO-PROCESS-MIB::cpmProcessTimeCreated.1.5 = Timeticks: (267) 0:00:02.67
CISCO-PROCESS-MIB::cpmProcessAverageUSecs.1.5 = Gauge32: 215 microseconds
CISCO-PROCESS-MIB::cpmProcExtMemAllocated.1.5 = Gauge32: 23223664 bytes
CISCO-PROCESS-MIB::cpmProcExtMemFreed.1.5 = Gauge32: 1784383920 bytes
CISCO-PROCESS-MIB::cpmProcExtInvoked.1.5 = Counter32: 418471
CISCO-PROCESS-MIB::cpmProcExtRuntime.1.5 = Counter32: 90380 microseconds
CISCO-PROCESS-MIB::cpmProcExtUtil5Sec.1.5 = Gauge32: 0
CISCO-PROCESS-MIB::cpmProcExtUtil1Min.1.5 = Gauge32: 0
CISCO-PROCESS-MIB::cpmProcExtUtil5Min.1.5 = Gauge32: 0
CISCO-PROCESS-MIB::cpmProcExtPriority.1.5 = INTEGER: critical(1)
CISCO-PROCESS-MIB::cpmProcExtMemAllocatedRev.1.5 = Gauge32: 23223664 bytes
CISCO-PROCESS-MIB::cpmProcExtMemFreedRev.1.5 = Gauge32: 1784383920 bytes
CISCO-PROCESS-MIB::cpmProcExtInvokedRev.1.5 = Counter32: 418471
CISCO-PROCESS-MIB::cpmProcExtRuntimeRev.1.5 = Counter32: 90380 microseconds
CISCO-PROCESS-MIB::cpmProcExtUtil5SecRev.1.5 = Gauge32: 0 percent
CISCO-PROCESS-MIB::cpmProcExtUtil1MinRev.1.5 = Gauge32: 0 percent
CISCO-PROCESS-MIB::cpmProcExtUtil5MinRev.1.5 = Gauge32: 0 percent
CISCO-PROCESS-MIB::cpmProcExtPriorityRev.1.5 = INTEGER: critical(1)
我编写了一个脚本来获取所有的值以防止计时问题,并根据释放的分配对它们进行排序:
(中间位被移除)
PDU DISPATCHER 3446519088
IP SNMP 1742301596
SNMP ENGINE 792807060
IP Input 635031724
Logger 27247348
TCP Protocols 15053688
Per-Second Jobs 10510488
...
SSM connection manager 0
Crypto IKE Dispatcher -472
IP Background -1880
DHCPD Timer -47424
TTY Background -103736
LOCAL AAA -126696
Transport Port Agent -181900
IP Cache Ager -1120096
crypto sw pk proc -2327016
TCP Timer -606529520
Pool Manager -1761160256
带有负值的进程似乎没有多少共同点,奇怪的是PDU DISPATCHER和in使用的内存最多。
我认为这可能是由于共享内存和在IOS中的现代内存管理之前的原始OID。
可能所需的数据包含在OID中,Cisco似乎并不经常填充:
1.3.6.1.4.1.9.9.109.1.2.3.1.15 cpmProcessTextSegmentSize
1.3.6.1.4.1.9.9.109.1.2.3.1.16 cpmProcessDataSegmentSize
1.3.6.1.4.1.9.9.109.1.2.3.1.17 cpmProcessStackSize
1.3.6.1.4.1.9.9.109.1.2.3.1.18 cpmProcessDynamicMemorySize
我找不到任何其他思科MIB包含更好的数据,所以我不认为有一个可靠的方法来获取这些信息。
https://networkengineering.stackexchange.com/questions/53210
复制相似问题