简介
本文档介绍针对sessmgr实例的解决方案,这些实例由于高而进入WARN状态 acsmgr_icsr_frwk_instance_chkpt_falied()
进程使用。
问题说明
平台ASR5500
软件版本:21.27.4和21.19.10
会话管理器实例处于警告状态,因为在 acsmgr_icsr_frwk_instance_chkpt_falied()
禁用会话恢复时的功能:
[local]ASR5500# show task resources | grep -v good
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
1/0 sessmgr 13 26% 100% 930.8M 900.0M 37 500 4643 12000 I warn
1/0 sessmgr 36 32% 100% 938.8M 900.0M 39 500 5155 12000 I warn
1/0 sessmgr 53 29% 100% 937.8M 900.0M 40 500 4916 12000 I warn
1/0 sessmgr 56 29% 100% 930.2M 900.0M 41 500 4649 12000 I warn
1/0 sessmgr 83 35% 100% 970.2M 900.0M 40 500 5382 12000 I warn
1/0 sessmgr 90 24% 100% 931.3M 900.0M 42 500 4621 12000 I warn
1/0 sessmgr 130 28% 100% 935.0M 900.0M 40 500 4907 12000 I warn
1/0 sessmgr 141 26% 100% 936.7M 900.0M 37 500 4917 12000 I warn
1/0 sessmgr 145 23% 100% 933.9M 900.0M 39 500 4883 12000 I warn
1/0 sessmgr 174 26% 100% 927.4M 900.0M 37 500 4620 12000 I warn
1/0 sessmgr 188 31% 100% 963.0M 900.0M 40 500 5305 12000 I warn
1/0 sessmgr 223 26% 100% 933.5M 900.0M 38 500 4631 12000 I warn
Aggregate consumption per proc:
-------- ------------------------------------------ -------------- -------------- -------------- --------- ---------
| Nr | Process | Similar | Total Bytes | Human Bytes | Percent | % Acum |
======== ========================================== ============== ============== ============== ========= =========
| 1 | acsmgr_icsr_frwk_instance_chkpt_falied() | 757 | 108301860 | 103.3 MB | 13.95% | 13.95% |
| 2 | egtpc_allocate_peer_rec() | 89 | 77599472 | 74.0 MB | 10.00% | 23.95% |
| 3 | sn_slist_dnode_alloc() | 471 | 64427392 | 61.4 MB | 8.30% | 32.25% |
| 4 | sessmgr_allocate_callline() | 156 | 48601944 | 46.4 MB | 6.26% | 38.51% |
| 5 | sn_aaa_buffer_alloc_more_type() | 45 | 34836120 | 33.2 MB | 4.49% | 43.00% |
[local]ASR5500# show task resources | grep -v good
Session Recovery Status:
Overall Status : Not Enabled
Last Status Update : 8 seconds ago
分析
为了查明用户总数过高是否触发了此过程 acsmgr_icsr_frwk_instance_chkpt_falied()
要过度使用,将执行sessmgr实例忙,并确认未降低sessmgr内存利用率:
[local]ASR5500> show task resources facility sessmgr instance 10
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
8/0 sessmgr 10 20% 100% 981.8M 900.0M 43 500 4142 12000 I warn
Total 1 20.20% 981.8M 43 4142
[local]ASR5500> task sessmgr instance 10 busy-out
[local]ASR5500> show task resources facility sessmgr instance 10
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
8/0 sessmgr 10 19% 100% 979.7M 900.0M 42 500 3946 12000 B warn
Total 1 19.35% 979.7M 42 3946
[local]ASR5500> task sessmgr instance 10 enable
[local]ASR5500> show task resources facility sessmgr instance 10
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
8/0 sessmgr 10 17% 100% 979.8M 900.0M 40 500 4141 12000 I warn
Total 1 17.33% 979.8M 40 4141
从日志中,当对受影响的sessmgr实例之一执行忙出时,会减少已使用的会话数,但已使用的内存分配仍然很高,并显示会导致sessmgr实例处于WARN状态。
在进一步调查中, acsmgr_icsr_frwk_instance_chkpt_falied()
在处理检查点信息时调用函数。禁用会话恢复时,此函数中存在一些列表添加/更新/删除操作,这些操作无法按预期工作,这是内存消耗增加的原因。此处使用的内存在此场景中随时间累积。此行为仅发生于 require session recovery
未配置。要处理的累积内存 acsmgr_icsr_frwk_instance_chkpt_falied()
不会释放以下内容(否 require session recovery
),从而可能导致内存泄漏。”
解决方案
实施会话恢复以解决此问题。
步骤
步骤1: 在执行模式提示符下,验证会话恢复功能是否已通过系统上的会话和功能使用许可证启用。 show license info
命令。 如果会话恢复功能的当前状态为Disabled,则只有在系统中安装了许可证密钥后,才能启用此功能。
第二步: 使用此配置示例启用会话恢复。
configure
require session recovery
end
重新启动系统后,此功能才会生效。
第三步: 按照验证和保存配置中所述保存配置。
第四步: 执行系统重新启动 reload
命令。出现以下提示:
系统重新启动后,将启用会话恢复并创建所有镜像的“备用模式”任务,自动执行数据包处理卡保留和其他操作。
第五步: 重新启动系统后,必须验证系统的准备情况,以支持此功能,如查看会话恢复状态中所述。 更高级的用户可选择插入 require session recovery
命令语法输入已经通过文本编辑器或其它方式存在的配置文件中,然后手动应用配置文件。执行此操作时,请谨慎操作,以确保此命令位于任何已存在的配置文件的前几行中;它必须在创建任何非本地上下文之前显示。