目录

简介

问题诊断

解决方案

简介

本文档有助于诊断高流量时的性能问题，并调整思科策略套件(CPS)参数，以在更高的每秒事务数(TPS)时获得最佳性能。

问题诊断

1. 分析2001-DIAMETER_SUCCESS以外的直径结果代码的整合引擎日志。
示例：

[root@pcrfclient01 broadhop]#zcat consolidated-engine_07Apr15_16_06_37.1.log.gz| grep

"Result-Code" | grep -v 2001|cut -c16-19|sort -u

3002

5002

5012

注意：此输出显示3002-DIAMETER_UNABLE_TO_DELIVER、5002-DIAMETER_UNKNOWN_SESSION_ID和5012-DIAMETER_UNABLE_TO_SUBLINCE。

您可以在RFC 3588中检查直径结果代码的详细信息。

对于未配置为最佳性能的CPS，您大多会发现5012- DIAMETER_UNABLE_TO_COMMUNCITE的计数较高。

2. 查看Diameter结果代码5012的事件计数的consolidated-engine日志。
示例：

[root@pcrfclient01 broadhop]#zcat consolidated-engine_07Apr15_23_16_35.1.log.gz|

grep "Result-Code" | grep 5012|wc -l

6643

[root@pcrfclient01 broadhop]#zcat consolidated-engine_07Apr15_16_06_37.1.log.gz|

grep "Result-Code" | grep 5012|wc -l

627

[root@pcrfclient01 broadhop]#zcat consolidated-engine_07Apr15_16_26_37.1.log.gz|

grep "Result-Code" | grep 5012|wc -l

2218

[root@pcrfclient01 broadhop]#zcat consolidated-engine_07Apr15_16_46_35.1.log.gz|

grep "Result-Code" | grep 5012|wc -l

0

如果在较高的TPS下以高速率观察5012直径结果代码，请继续此过程中的其他日志验证。

3. 在统一引擎日志中，验证在策略和计费规则功能(PCRF)发送DiameterResponseMessage时，观察到“连接等待超时0毫秒”错误，结果代码为：5012.
示例：

<snip>

INFO   : (balance) Error found,  rolling back transaction

ERROR  : (core) Error processing policy request: com.mongodb.DBPortPool$Connection

WaitTimeOut: Connection wait timeout after 0 ms

com.mongodb.DBPortPool.get(DBPortPool.java:222)

com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:413)

com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:238)

com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)

com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)

com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273)

com.mongodb.DBCollection.findOne(DBCollection.java:728)

com.mongodb.DBCollection.findOne(DBCollection.java:708)

com.broadhop.balance.impl.dao.impl.MongoBalanceRepository$6.findOne(MongoBalance

Repository.java:375)

<snip>

注意：在CPS 5.5版及更高版本中提供的top_qps.sh命令出现问题时，您可以在CPS系统上检查TPS。

解决方案

1. 将策略生成器中的线程配置从默认值20更改为50。为此，请登录策略生成器，然后选择“参考数据”>“系统”> system-1 > “插件配置”>“线程配置”。

默认情况下（当“线程配置”字段为空），策略生成器配置中mongo连接的线程数为20，因此它可以在低TPS上运行时处理该数量的请求。随着TPS的增加，这些线程处于繁忙状态，因此需要更多的线程才能满足请求。

线程数为50足以处理约5000 TPS，因为有更多线程可用来处理更多请求。

这些是策略引擎线程，使用名称“rules”定义，应仅使用该名称进行配置。

2. 将Dmongo.client.thread.maxWaitTime=5000添加到/etc/broadhop/pcrf/qns.conf。
示例：

cat /etc/broadhop/pcrf/qns.conf

QNS_OPTS="

-DbrokerUrl=failover:(tcp://lb01:61616,tcp://lb02:61616)?randomize=false

-DjmsFlowControlHost=lb02

-DjmsFlowControlPort=9045

-Dcc.collectd.ip.primary=pcrfclient01

-Dcc.collectd.port.primary=27017

-Dcc.collectd.ip.secondary=pcrfclient01

-Dcc.collectd.port.secondary=27017

-DudpPrefix=lb

-DudpStartPort=5001

-DudpEndPort=5003

-DqueueHeartbeatIntervalMs=25

-Dcom.broadhop.memcached.ip.local=lbvip02

-Dmongo.client.thread.maxWaitTime=5000

?

Dmongo.client.thread.maxWaitTime是线程等待连接变为可用的时间（以毫秒为单位）。如果未指定此参数，则会考虑默认值0毫秒。因此，在测试处于较高TPS时观察到错误。在/etc/broadhop/pcrf/qns.conf中添加此参数可增加测试在高TPS上时新线程等待mongo连接的时间。

2000是QA推荐值，已针对高TPS进行测试。对于大于5000的TPS，您可以将其配置为5000毫秒以优化性能。

3. 将-Dspr.mongo.socket.timeout=5000添加到/etc/broadhop/pcrf/qns.conf。
默认值为60000毫秒。（60秒）。 因此，对其他线程可用需要更长的时间。

建议的配置为5000毫秒（5秒），以便加快超时，并允许其他线程快速处理。

4. 在策略生成器中，将每台主机的连接数值从默认的5更改为20。为此，请登录到Policy Builder，然后选择Reference Data > Systems > System - 1 > Plugin Configurations > USuM Configuration > Connections Per Host。

这是每个Quantum Network Suite(QNS)与mongo DB的连接数。这意味着对于4 QNS，4*20=80是连接总数。

这在mongodb中是频繁更新所必需的。因此，建议根据QA建议将其更新为20，以获得最佳性能。

还将Db Read Preference配置为SecondaryPreferred，这意味着所有QNS都从辅助数据库接收数据，并且仅在辅助数据库繁忙时才从主数据库接收数据。这有助于优化性能，因为主数据库的负载最低。

5. 为系统配置适当的根日志记录级别。
过多的日志可能会阻止在QNS和LB级别上的处理。因此，建议您在/etc/brodhop/logback.xml和/etc/broadhop/controlcenter/logback.xml文件中以警告级别或更高级别配置根日志级别。

示例：

[root@pcrfclient01 ~]#cat /etc/broadhop/logback.xml

<snip>

<!-- Configure default Loggers -->

<appender-ref ref="FILE" />

<appender-ref ref="SOCKET" />

</root>

</configuration>

此外，更改以下日志记录级别：

<logger name="org.jdiameter" level="info"/>  ---> Change to WARN

<logger name="com.broadhop" level="info"/> --->Change to WARN

示例：

[root@pcrfclient01 ~]# cat /etc/broadhop/controlcenter/logback.xml

<snip>

<!-- Configure default Loggers -->

<appender-ref ref="FILE" />

</root>

</configuration>

这些更改需要在所有虚拟机之间复制。执行syncconfig.sh，然后执行restartall.sh(或stopall.sh，然后执行startall.sh)，以应用所有这些更改。

警告：仅在“维护”窗口中执行这些更改。