9.3.1 及以前
ASA只支持lina 进程,不支持在ASA上运行其他进程。全局共享池使内存分配的唯一来源。lina为堆所需的内存都是在初始化期间为全局共享池保留的。
9.3.2 - 9.5.1
内存基础架构重新设计,以支持其他程序运行,因此在初始化旗舰不在为全局共享池保留内存,而是根据系统可用内存和全局共享池之间动态分配。系统内存只是运行lina允许使用最大地址空间,系统内存包含所有ASA可用内存。lina负责内存分配,因此一些内存将会从系统内存移动到全局共享池,然后全局共享池相应内存分配。随后内存释放时有可能被全局共享池保留,为了更快的相应分配请求,也可能会返回系统内润。

9.5.2 及以后
出于性能考虑添加了heapcache,heapcache始终是内润分配的首选,它是一个缓存,它预先分配并具有更好的性能,当heapcache耗尽时想从全局共享池进一步完成内存分配,全局共享池未预先分配,动态的从系统内存获取内存。heapcache池不向全局共享池获取或释放内存,因为它时预先分配的。

High Memory 询问故障

  1. 什么时候开始发生 High Memory
  2. 备机是否存在 High Memory (表明是否和流量相关/使用,与配置无关)
  3. 正常时内存消耗
  4. 是否更改配置或者进行拓扑重新设计
  5. ASA从正常情况到High memory需要多长时间

Memory 消耗

  1. 某些功能(威胁检测、VPN、web VPN)
  2. 容量(大量的并发连接、xlate、ACL)

Memory 泄漏解决流程

  1. show memory detail
    1. 查找消耗总内存最大的行,或计数特别高的行
  2. show memory binsize x
  3. ASA / FWSM Memory binsize Parser工具进行分析
  4. 查找相关内容
  5. 当内存已经很高的时候不要用内存跟踪。

memory-tracking

  1. 启用内存追踪 memory tracking enable
  2. show memory tracking 查看内存分配变化
  3. show memory tracking adress | i PC-Counter时增长最快的进程
  4. 上步输出中随机选取任意内存地址进行输出 show memory tracking dump

内存问题导致的症状

  1. 无法发送数据包(SNMP、Syslog)
  2. 无法通过ASA处理流量和转发数据包
  3. 无法保存配置
  4. 无法同步故障转移
  5. 无法对Web Sense服务器执行URL过滤
  6. 控制台输出process_create:out of stack memory
  7. 无法通过ASA建立新的连接
  8. ASA将重新加载并编写crashinfo
  9. 无法管理设备(Telnet、SSH、ASDM)
  10. 无法添加新的ACL

内存泄漏案例

calloc