目录

简介

背景信息

一般信息

MEMPOOL_HEAPCACHE_X

了解Heapcache内存警报

MEMPOOL_GLOBAL_SHARED

警报情景

MEMPOOL_DMA和MEMPOOL_DMA_ALT1

DMA内存池概述

DMA内存的使用

DMA内存池的行为

何时需要担心？

SNMP 监控

简介

本文档介绍对自适应安全设备(ASA)/Firepower威胁防御(FTD)中各种内存组件的理解。

背景信息

如果您收到任何与内存相关的通知，本文将确定何时采取预防措施以及何时忽略这些措施。简单网络管理协议(SNMP)轮询通常用于启动与内存相关的警报。此SNMP将使用show memory detail命令的结果来收集数据并触发警报。

一般信息

本文讨论下述存储器元件

- MEMPOOL_HEAPCACHE_X

- MEMPOOL_GLOBAL_SHARED

- MEMPOOL_DMA和MEMPOOL_DMA_ALT1

MEMPOOL_HEAPCACHE_X

了解Heapcache内存警报

1. Heapcache分配行为

- Heapcache是内存分配的首选池。

- 一旦Heapcache池耗尽，将从全局共享池中进行进一步分配。

- 全局共享池本身根据需要从系统内存提取内存。

2. Heapcache内存警报

- 接收Heapcache内存警报是正常的，并不表示有问题。

- Heapcache内存预期使用率较高，因为Heapcache内存是分配用于使用的第一个池。

3. 监控要点

- 关注系统内存使用。

- 如果系统内存足够，则无需担心MEMPOOL_HEAPCACHE_0或MEMPOOL_GLOBAL_SHARED池的警报。

- 使用SNMP工具监控系统内存，以了解任何临界阈值或性能下降。

4. 警报和预期行为

- 内存保留行为是正常。

- 系统会根据需要动态地保留和分配内存。

- 您可以放心地忽略与Heapcache或全局共享池相关的警报，除非系统内存本身变得非常高。

MEMPOOL_GLOBAL_SHARED

- 动态内存处理

MEMPOOL_GLOBAL_SHARED不会在引导时预分配所有内存。相反，它会根据需要从操作系统请求内存。

- 内存释放

当释放大量内存时，MEMPOOL_GLOBAL_SHARED会将内存返回给操作系统。

- 弹性增长/收缩

MEMPOOL_GLOBAL_SHARED的大小会根据工作负载进行动态扩展和收缩。此自适应行为可确保高效的内存利用率。

- 速度方面的最小缓存

在MEMPOOL_GLOBAL_SHARED中仍分配少量内存，以加快将来的内存分配请求并避免延迟。

警报情景

如果此警报出现，则会描述MEMPOOL_GLOBAL_SHARED的预期行为。由于它动态地增长、缩减和管理内存，因此行为是正常的，不会指示任何问题。您可以安全地忽略此警报，除非观察到与内存相关的性能问题。

MEMPOOL_DMA和MEMPOOL_DMA_ALT1

DMA内存池概述

Cisco ASA/FTD中的直接内存访问(DMA)内存系统包含两个关键内存池：

1. MEMPOOL_DMA

2. MEMPOOL_DMA_ALT1

这两个池协同工作以确保平滑的内存可用性：

- MEMPOOL_DMA是主池。

- 当主池耗尽时，MEMPOOL_DMA_ALT1用作备份。

DMA内存的使用

DMA内存池主要用于需要高速数据访问和内存密集型操作的任务。它通常用于VPN相关功能和其他流程，包括：

1. 虚拟专用网络(VPN)服务：

- IPSec(IKEv1/IKEv2)

- 传输层安全(TLS)代理

- WebVPN（AnyConnect/无客户端VPN）

2. 安全和日志记录服务：

- 入侵防御系统 (IPS)

- Syslogging(“logging host ...”)

- 安全外壳(SSH)连接

3. 管理和其他服务：

- 自适应安全设备管理器(ASDM)（ASA HTTPS服务器）

- 动态主机配置协议 (DHCP) 服务器

DMA内存池的行为

1. 引导时间分配：

启动时，ASA根据启用的功能分配DMA内存。

2. 动态内存使用：

- 根据需要处理从MEMPOOL_DMA请求的内存。

- 当进程完成时，内存会返回到空闲池（稍有延迟）。

3. 回退到MEMPOOL_DMA_ALT1:

- 如果MEMPOOL_DMA得到充分利用，则系统会自动使用MEMPOOL_DMA_ALT1。

- 这可确保连续运行，不会出现与内存相关的中断。

何时需要担心？

- 如果MEMPOOL_DMA利用率高（接近100%），则只要MEMPOOL_DMA_ALT1有足够的内存，就不会立即出现问题。

- 如果MEMPOOL_DMA_ALT1也开始填满，则表示存在内存耗尽问题，需要进一步调查。

- 需采取的行动：

- 监控MEMPOOL_DMA_ALT1的用法。

- 如果两个池都接近完全利用率，请调查功能使用情况、日志记录活动和内存消耗量大的进程。

如果观察到DMA内存相关问题较多，请检查：

HTTP服务器：如果配置了HTTP，它将分配4、80、1550、2048和2560字节块，并会使用大约7Mb的DMA。尝试暂时禁用ASDM访问。

URL服务器：如果已配置，这将添加另一个81Kb的DMA内存。

Internet密钥交换(IKE)和WebVPN:启用任何形式的VPN都将从DMA内存池中抽取内存。

如果您使用的是VPN，则它可能也会使用此内存。请检查VPN利用率以确保它不超过机箱容量。

日志记录:用于日志记录的DMA由队列大小和日志记录主机数量控制。

#sh run logg

不使用日志记录队列0

不使用日志记录队列8192

请勿配置多个日志记录服务器

不配置巨帧

SNMP 监控

图中所示的管理信息库(MIB)用于SNMP内存监控。

了解这些MIB中的Counter64值以及如何使用它们：

MIB中的Counter64值

1. MIB .1.3.6.1.4.1.9.9.221.1.1.1.1.18: — 此MIB表示cempMemPoolHCUsed对象，这是用于所用内存池的高容量计数器。它提供池中所用的内存量（以字节为单位）。

2. MIB .1.3.6.1.4.1.9.9.221.1.1.1.1.20: — 此MIB表示cempMemPoolHCFree对象，它是内存池空闲的高容量计数器。它提供池中的可用内存量（以字节为单位）。

特定MIB的用途：

1. MEMPOOL_MSGLYR_HB: — 表示消息层心跳的内存池。这用于监控系统中为心跳消息分配的内存。

2. MEMPOOL_MSGLYR: — 表示消息层的内存池。这用于监控系统中为常规消息层操作分配的内存。

3. MEMPOOL_HEAPCACHE_1: — 表示堆缓存1的内存池。这用于监视系统中为第一个堆缓存分配的内存。

4. MEMPOOL_HEAPCACHE_0: — 表示堆缓存0的内存池。这用于监视为系统中的主堆缓存分配的内存。

5. MEMPOOL_DMA_ALT1: — 表示DMA备用1的内存池。用于监控系统中为第一个备用DMA操作分配的内存。

6. MEMPOOL_DMA: — 表示DMA的内存池。这用于监控系统中为DMA操作分配的内存。

7. MEMPOOL_GLOBAL_SHARED: — 表示全局共享内存的内存池。这用于监控系统中为全局共享操作分配的内存。