开发者社区> 问答> 正文

struts2高并发cpu爆满,服务器无法接收请求,客户端显示连接超时,求助

最近开发的一个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

展开
收起
落地花开啦 2016-05-30 13:35:26 4145 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    jvm工具调试一下,看看cpu是什么线程,哪行代码占用。
    ps -mp pid -o THREAD,tid,time 看看是哪个线程占用cpu
    jstack pid 打印jvm当前线程信息,定位到占用cpu的代码。

    2019-07-17 19:20:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
徐雷-Java为王,互联网高并发架构设计与选型之路6.0 立即下载
Redis 的高并发实战:抢购系统 立即下载
MySQL高并发场景实战 立即下载