调优过程

在压测时首先要排除的是高消耗 SQL(经过 AWR 报告分析后 HSC没有出现高消耗 SQL)本次 SZ割接压测经过以下几个关键点的调优:
1) 脚本参数调优 (数据已存在,字段值太长错误较多调节脚本参数模式及参数长度)
2) JDBC配置调优 (JDBC使用率 100%,连接数调成 100 后,极限测试时使用在 80 个连接左右)
3) WAS配置调优 (主要是 webcontainer 调成 200,极限测试时使用达到 200,但主机CPU资源消耗在 50%以上,且 TPS也超过指标 10 来倍,不再增加配置)
4) IHS配置调优 (主要是 http.conf 文件参数调整)
5) linux 系统调优 (主要是网络参数调整,及 open file 调整)
6) Systemout 日志中不打印应用日志(减少不必要的磁盘 IO 消耗)。


下面逐一分解每个关键调优时出现的问题及定位

JDBC连接数配置调优

在压测过程中一直发现TPS上不去,并随着测试时间的加长,间断性出现超时现象。通过对主机资源的 CPU, 内存,IO分析没有存在性能瓶颈,并同时对网络传输苏苏进行测试发现也没有任何瓶颈。通过对监控控制台观察到,JDBC: waitingTreadCount (等待连接数)达到 80 多个。同时 JDBC:Poolsize一直保存在 10。诊断为 JDBC连接数过小导致。
一次性能测试调优总结_第1张图片一次性能测试调优总结_第2张图片

检查每 WAS server的连接数后, 发现最大是 10,立马把每个 server 的 JDBC最大连接改成了 100 ,最小连接数改为10,并同步集群, 清除场景跑出的压测数据后 (还原数据库环境) ,再次进行调测,TPS保持在 200 笔左右, 且相对较为平稳, 此时性能值已经符合上线要求
一次性能测试调优总结_第3张图片

WAS 配置调优

经过上面 JDBC的调节, 性能已经达到了上线的要求, 但经过分析主机资源消耗较小,为了使用主机资源合理利用,或达到性能极限值,加大并发进行测试,在测试过程中出现有 http404错误。由此联想到 WAS server配置是否不合理。通过压测过程中查看server 的 Webcontainner连接数使用一直都是98-100,看来webContrainner也是性能瓶颈。

通过access_log可以看出来确实有404,没有找到这些文件,原因是当前的配置为转发到4个WAS server,而这4个server都在满负荷工作,导致有些请求无法处理而出现404.解决方法也很简单,增加was server的webcontainner数量,将最小连接数从1改为25,最大连接数从100改为200,之后回归测试看效果。


结果令人兴奋: TPS最高值已经可以达到 800 以上了, 404 错误消失,但我们可以看到波动还是很大, 随着场景的运行 TPS下到只有 400 多,有性能风险, 说不定哪天就停止响应了
一次性能测试调优总结_第4张图片

IHS 配置调优

在加压的测试过程中(接上)出现 TPS达到较高值后,又迅速下降的情况,且响应时间有上升趋势,存在性能风险。经过查看 IHS(error_log )日志发现有堆积。通过与IBM专家交流建议调整参数,最终调整为

一次性能测试调优总结_第5张图片
调整 IHS配置后 ,并重启 IHS压测执行 5 分钟后 ,TPS达到 1200,随后下降到 1000 保持稳定。但新的问题出现了:
Error -108977:Action.c(6) Error Failed to connect to server "10.252.17.2186" [10048] Address
already in use
Try changing the registry value
HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersTcpTimedWaitDel
ay to 30
and HKEY_LOCAL_MACHINESyst0  68

linux 系统调优

出现上述问题根据经验一般都是压测客户端的问题,解决方法无非是修改注册表,增加压测机器,但是。。。。。居然都没用。这时候突然想到看看tcp连接的情况,结果发现有大量的timewait,大概有1000个以上,吓得赶紧去调整linux内核参数了。修改/etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_probless=55

net.ipv4.tcp_keepalive_intvl=22

使用端口范围改为ip_local_port_range 9000到65500,别忘了修改完要/sbin/sysctl让生效啊

经过上述调优,TPS达到1300以上且稳定。

关于日志

切记不必要的日志最好不要条条打印,在并发量大的情况下会明显影响性能的