概述
目前做的一个项目中需要测试一下压力,没有测试人员,只好自己动手。循环开启线程,调用本地接口。
项目使用strut2和spring,tomcat,mysql
当线程数达到1000时,测试代码偶尔会报出Connection refused: connect的错误。
接下来各种查找错误,发现不太正常的情况如下:
1.调用时,系统cpu基本满额;
2.正常运行到1000的时候,会慢一下,才返回信息;
情况1:百度加自己测试后,发现因为用到strus2,所以接口每次收到请求都会创建一个线程安全的对象,然后处理请求的时候,各个线程切换,cpu就爆了。
情况2:因为接口需要记录日志信息,就用log来存储数据库,为了减少连接次数,会缓冲一部分数据后,才批量提交,刚好这个缓冲数是1000,顺带一句,批量提交时发现比较慢,后来发现自动提交忘记关了,等于没开批量一样。
后来想想,可能是tomcat没优化的问题,一看配置文件
<Executor maxThreads="1000" minSpareThreads="128" acceptCount="500"
name="tomcatThreadPool" namePrefix="catalina-exec-" />
<Connector URIEncoding="utf-8" compressableMimeType="text ml,text/xml,text/javascript,text/css,text/plain,application/json,application/x-www-form-urlencoded"
compression="on" compressionMinSize="256" connectionTimeout="20000"
executor="tomcatThreadPool" noCompressionUserAgents="" port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443" />
有优化的。仔细思考一下项目的情况后,发现原因可能是
minSpareThreads
配置太小吧。
因为根据配置文件看,tomcat接收上限是1000+500+接收时间内已经处理好的请求数,远远超出我的请求数,不可能是请求数不够,但是,我请求的时候cpu爆高,会不会是因为minspareThreads设置的太小,赶不上请求需要创建的线程数。
因此,将minspareThreads改成500后,这个异常就出现的非常低了。后续还要根据情况调整一下参数来适应使用场景。
目前还在测试,不知道什么时候能测好
最后
以上就是强健乐曲为你收集整理的Connection refused: connect的全部内容,希望文章能够帮你解决Connection refused: connect所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复