最近开发的一个struts2+spring的接口项目,没有页面,只提供接口,action对象委托给spring,不单例,每次请求都会创建新的action。
tomcat优化后,可以接收1000+的请求。项目部署在linux上。
测试时,用HttpURLConnection连接接口,启动1000个线程同时访问,两端都设置超时时间为60s,但是常常在30s左右的时候抛出连接超时的异常。
发现服务端在接收请求时,cpu基本满额,内存还有较多空闲,由于接口返回的数据全部来之缓存,不读取数据库,输出的接口耗时基本在100毫秒内(线程少时,速度快)。
问题如题,没理由这么多用struts2的项目就我这个出这个问题,请问各位通常怎样解决的,或者是我其他地方有问题,在线等,不胜感激
之前测试过,每隔10ms发起一次请求,能够顺利完成,但是用户发起请求无法确定--!
这是我tomcat的线程配置
<Executor maxThreads="500" minSpareThreads="128" acceptCount="1000"
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" />
panxuanfan panxuanfan
jvm工具调试一下,看看cpu是什么线程,哪行代码占用。ps -mp pid -o THREAD,tid,time
看看是哪个线程占用cpujstack pid
打印jvm当前线程信息,定位到占用cpu的代码。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。