案例背景

环境:windows + tomcat + oracle 压测工具:Loadrunner 问题描述:大并发用户(900个)压测TOMCAT服务器的时候,出现了大量的“Error -27796: Failed to connect to server "192.168.1.250:8080": [10061] Connection refused”错误。

但是此前另外一个环境,这个场景的压测结果是很OK的,没有出现大量的这个错误。

分析过程

网上搜索该错误,按照前人的经验修改以下两个值,但是问题依旧。 TcpTimedWaitDelay 修改为5秒 MaxUserPort 调整为65534

怀疑是压力机的TCP连接数限制导致的问题,于是增加1台负载机,将900个用户分摊到2台负载机上面进行压测,但是问题依旧。

说明问题应该是在服务端,而不在压力机。   检查TOMCAT服务端,发现服务端换成了安装版的TOMCAT(此前性能测试不会报错的是免安装版),而且该TOMCAT有些参数未经过性能优化。

于是调整JVM大小,再次压测,但是问题依旧。   切换到免安装版的TOMCAT进行压测,不会报错,说明问题出在安装版的TOMCAT上面。   查看tomcat的监控页面,发现安装版的运行模式是bio,而免安装版的运行模式是apr,网上查询资料显示,bio的性能极差。

解决问题

调整TOMCAT安装版为apr模式,调整方式为把免安装版/bin/tcnative-1.dll文件拷到安装版的/bin目录下。

案例小结

用Tomcat做服务器中间件时,要留意它的运行模式,正常情况下bio < nio < apr 模式,至少得配置成nio模式。