簡介
本文檔描述了由於HTTP流數量巨大而導致sessmgr進入WARN狀態的問題。思科聚合服務路由器(ASR)5x00上報告此問題。
問題
Sessmgr狀態為WARN且記憶體利用率高。
******** show task resources *******
Thursday July 24 17:44:58 IST 2014
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- --------- ------------- --------- ------------- ------
4/0 sessmgr 3 26% 100% 1.86G 1.86G 34 500 1766 28160 I warn
這些錯誤日誌是在過程中生成的。此錯誤日誌不會造成訂閱伺服器的影響。根據設計,一旦呼叫從處於WARN狀態的sessmgr中拒絕,系統將在不同的會話嘗試並進行呼叫。
[sessmgr 10018 error] [4/0/6812 <sessmgr:3> sessmgr_func.c:44683] [software internal system syslog] Sessmgr-3 full (35200 effective number of calls, 1777 calllines in use, 51146 free flows, 31221 free aaa_sessions, 1777 used-mem-credits, 1777 used-sess-credits, 1948360 mem-usage, 1945600 mem-limit, 0 ecs-queue-usage, 70400 ecs-queue-limit, 16850 ecs-num-flows, 400000 ecs-max-flows, 2334720 ecs-mem-limit[ecs-flow/mem-values:valid], 0x86 limit-flags) - call rejected
疑難排解
捕獲show support details輸出並檢查命令輸出以進一步排除故障。
記憶體問題與sessmgr處理的流數量有關。在高記憶體消耗和高流量的sessmgr之間可以看到這種相關性。
******** debug acsmgr show memory usage *******
Thursday July 24 17:50:06 IST 2014
------------------------------------------------------------------------------
! ! Caches Count !
Instance Memory ! Flows ! Callline Data-Session TCP OOO !
! Current Max ! Total Free Total Free Total Free!
--------------------------------------------------------------------------------
1 865.68M 43365 64360 5500 1178 56140 12775 1102 1064
2 852.05M 43879 64767 5500 1178 60150 16271 1102 1067
3 1902.68M 17252 276519 4400 2631 44110 26858 551 541
對於受影響的sessmgr(以及未受影響的),請收集這些命令輸出,其中x是Sessmgr例項。
show messenger proclet facility sessmgr instance <x> heap
show messenger proclet facility sessmgr instance <x> system heap
task core facility sessmgr instance <x>
show active-charging flows instance <x>
show profile facility sessmgr active depth 8 head 201
show task resources faciltity sessmgr instance <x> max
檢查未最佳化的規則和規則組是否消耗大量記憶體。
debug acsmgr show rule-optimization-information
debug acsmgr show grp-of-rdef-optimization-information
根據命令輸出,最大記憶體消耗是由於這些功能造成的。
acs_http_pkt_inspection()
acsmgr_alloc_buffer()
snx_add_dbufs()
sn_aaa_alloc_session_block()
sgx_imsa_bind_user()
您還可以檢查呼叫線路獲得的同步HTTP流的最大數量
******** debug acsmgr show flow-stats max-simultaneous-flows http *******
Thursday July 24 17:50:04 IST 2014
Histogram of Max No of Simultaneous HTTP Flows attained by Calllines
No Of Flows No Of Calllines
1 to 10 964712518
11 to 20 384105002
21 to 40 232987189
41 to 100 148938918
101 to 200 115919586
201 to 500 86729303
501 to 1000 69975385
1001 to 2000 59635906
2001 to 5000 50743511
5001 to 10000 44566999
> 10000 1044671491
******** debug acsmgr show flow-stats cumulative http *******
Thursday July 24 17:50:03 IST 2014
Histogram of Total Cumulative HTTP Flows by Calllines
No Of Flows No Of Calllines
1 to 10 964712485
11 to 20 384104980
21 to 40 232987175
41 to 100 148938911
101 to 200 115919583
201 to 500 86729297
501 to 1000 69975377
1001 to 2000 59635907
2001 to 5000 50743509
5001 to 10000 44567004
> 10000 1044671452
您可以斷定HTTP會話數量巨大,這可能是由於HTTP流量過大造成的。此外,還有幾乎1044671491個Calllines,它們一次有10000於多個HTTP流。這導致高記憶體使用率。
解決方案
您可以使用CLI限制每個使用者的流數
flow limit-across-applications
思科建議按照所有受影響規則庫(可以看到大量HTTP流量)下的建議,將流跨應用限制配置為5000。
以下是設定命令的程式
In local context under Global configuration.
# active-charging service ECS
(config-acs)# rulebase GOLIVE
(config-rule-base)# flow limit-across-applications 5000
有關此命令的詳細資訊。
流動 跨應用程式限制
使用此命令可以限制傳送到規則庫的每個使用者/APN的併發流總數,而不管流類型,也可以根據會話控制功能下的協定型別限制流。
產品:
ACS
許可權:
安全管理員,管理員
模式:
Exec > ACS Configuration> Rulebase Configuration
active-charging service service_name > rulebase rulebase_name
Entering the above command sequence results in the following prompt:
[local]host_name(config-rule-base)#
語法
flow limit-across-applications { limit | non-tcp limit | tcp limit }no flow limit-across-applications [ non-tcp | tcp ] no
如果以前配置過,則從當前規則庫中刪除flow limit-cross-applications配置。
流動 跨應用程式限制
指定規則庫的所有應用程式的最大流數。
limit必須是介於1和4000000000之間的整數。
預設值:無限制
非tcp限制
指定非TCP型別流的最大限制。
limit必須是介於1和4000000000之間的整數。
預設值:無限制
tcp限制
指定TCP流的最大限制。
limit必須是介於1和4000000000之間的整數。
預設值:無限制
用法:
使用此命令可限制規則庫允許的總流數(不考慮流型別),或者根據協定(非TCP(無連線)或TCP(面向連線))限制流。
如果訂戶嘗試超出這些限制,系統將丟棄新流的包。此命令的此限制處理針對UDP、TCP、ICMP和某些豁免流量具有以下方面:
- UDP/ICMP:在更新計數器並將其從流數計數中刪除之前,系統會等待流超時。
- TCP:TCP流結束後,系統會等待很短的時間來容納來自一端的任何丟失資料包的重傳。已結束但仍在等待超時的TCP流可免於此限制處理。
- 豁免流量:在ACS計費操作配置模式設定為no時,系統免除使用flow limit-for-flow-type命令指定的所有其他流。
範例:
此命令定義規則庫的200000大資料流數:
flow limit-across-applications 200000