tomcat 高并发配置

-Jacen- 发布于 2016/07/27 20:55
阅读 3K+
收藏 1

Linux基金会开源软件大学开源技术公开课即将上线,Kubernetes1.19实战讲解!>>>

一个项目用tomcat作为服务器,主要手机接口。大约500台手机并发量。tomcat里面的busy thread一直在增,直到挂掉。如图:

求各位大牛指点。

tomcat server.xml 大致配置如下:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="5000" maxIdleTime="60000"
    minSpareThreads="100"/>

   <Connector executor="tomcatThreadPool" port="8090" 
        protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="5000" processorCache="50000"
        minSpareThreads="100" acceptorThreadCount="8"
            enableLookups="false" redirectPort="8443" acceptCount="5000"
            connectionTimeout="60000" keepAliveTimeout="60000"
        maxKeepAliveRequests="100"
            disableUploadTimeout="true"
            URIEncoding="UTF-8"
            compression="on" compressionMinSize="4096"
        />

加载中
1
南湖船老大
南湖船老大
500根本不大,没有达到tomcat的极限的,所以看你业务的。。业务代码有问题,50个不也照样跑满么
-Jacen-
-Jacen-
的确,代码问题。
0
超级大富
超级大富
一台tomcat 通常分配500个请求的,你可以用nginx 做代理转发,后端起多个tomcat
超级大富
超级大富
回复 @-Jacen- : 我测试出来windows 下没很大差别
-Jacen-
-Jacen-
昨天问了一个朋友,说windows下apache比nginx性能高。是这样吗?
0
写程序的康德
写程序的康德
超时时间太长了,你这样直接就把服务器拖死了
-Jacen-
-Jacen-
你说的超时时间是指connectionTimeout 还是keepAliveTimeout
0
p2ng
p2ng

如何定义高并发?

上线前酝酿一下最高的并发请求数,针对请求数做2/8法则,

压力测试单台容器能支撑多久...

最后建议搞集群把...分担压力.

0
l
lobell
nginx在前面,毕竟tomcat并不是为大并发设计的!还有,你的每个请求运行逻辑不要太复杂,不要占用过长时间
0
Eric_林
Eric_林
500台手机在线,真正的并发约为20-40%之间,一台tomcat完全可以抗的住,修改tomcat的连接数同时看下OS的文件打开数限制,另外开始压缩,最好前面用nginx反向代理
-Jacen-
-Jacen-
回复 @Eric_林 : 嗯,都不熟悉,到处乱搞。
Eric_林
Eric_林
回复 @-Jacen- : 都差不多,看你哪个更熟悉
-Jacen-
-Jacen-
windows作为服务器,用apache还是nginx更好?
0
Ambitor
Ambitor
你这一个processTime  这么久? 最长的半个小时,一台tomcat   请求多了 你不挂 谁挂
Ambitor
Ambitor
回复 @-Jacen- : 悲观锁:一旦你数据库处理稍微久 并发量上来 会导致链接不够用,然后任务被拒绝。 乐观锁:会导致很多无效的mysql操作,同样会消耗很多资源。 所以要具体业务场景及根据系统可预想的并发量进行具体分析,一种比较好的方式是用redis协助来做乐观锁,还有一种就是redis的原子性操作是一种更好的方式,再或者用redis的lua方式。反正就是具体业务要具体分析,哈哈哈哈哈
-Jacen-
-Jacen-
回复 @Ambitor : 为了防止多线程重复都数据库,加了个synchronized锁,结果一段时间就挂了,后来去掉,就好了。现在有个思路通过数据库悲观锁或者乐观锁解决。
Ambitor
Ambitor
回复 @-Jacen- : 还有如果你都是长连接的话,那你可能就要用集群了
Ambitor
Ambitor
回复 @-Jacen- : 我觉得线程5000个是多了,然后空闲存活时间只有60秒。但是JDK的线程池的创建策略是任务队列排不下了再新建线程的,所以如果你的应用规模没达到每秒上百的并发(注意,我说的是并发,不是同时在线) 应该不是问题,所以这个地方问题 应该是你的业务逻辑代码有问题?仔细研究下你们代码是不是有某些问题?不然一个请求怎么这么久。
-Jacen-
-Jacen-
就是不清楚为啥这个time会这么久。求指点
0
ixiaohei
ixiaohei
你搞这么大的线程,线程切换估计都浪费很多cpu了
0
buglife
buglife
负载均衡呢
0
p
pigpig2008
建议前面加nginx(配置比apache简单),后面改成多个tomcat。
返回顶部
顶部