目錄

簡介

問題

疑難排解

解決方案

簡介

本文檔描述了由於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