刷脉脉看到这个问题,不错的问题值得讨论。
之前做过高并发场景下的网关应用,也针对于jetty、netty、jvm进行过参数配置与调优,对于下面几个同学的讨论分析下。
程序猿关平
怎么可能150连接数,你说的是worker线程数吧
安东尼奥刘能
集群呀,软硬负载均衡
阿里巴巴员工
并发是按秒算的 你一个请求耗时是毫秒 懂了吧
种大头菜的仓鼠
改掉啊,谁让你用默认的,改成几万不就行了
程序猿华山弟子
[坏笑]单机肯定处理不了啊
360员工
支持不了,官方数据tomcat最多支持1000并发,还是调优做的很好的情况下,除非你上nginx
以上的几条评论都是错误答案,不管提问者的问题是否明确,起码以上几位的回答都没有回答到点上,或是方向就偏了。
而下面几位的回答才是离这个问题核心更近一些,也是优秀程序员值得学习的,就是说我们讨论的是问题,不要太将关注点放到提问者身上。
————————分割线————————
吕蒙
Tomcat是Web应用服务器,不是Web服务器,并发数主要取决于事务(单个业务请求)的复杂度以及相关应用的QPS/TPS,如果只是异步转发信息到MQ并发数比较容易高些,如果是OLTP操作DB,更取决于DB的并发,还有文件处理等等主要取决于磁盘IO等等,所以单说Tomcat的并发数意义不大,是整个业务应用系统的综合考虑。Tomcat前置Web服务器反向代理到应用服务器,提升处理能力是常用方法。
————
吕蒙同学说的是一种普世的高并发解决方案,但是和tomcat自己方案没什么联系,并没有说清楚这种io密集型的网关类系统应该如何调优。
程序猿.蓝色气球
如果你线程都是活跃的话,开再多线程也没用,只会徒增切换成本,Tomcat默认最大200个我猜是考虑到下游可能会损耗一些IO。但是只要你处理得够快,单个线程也能策马崩腾,所以单看并发不看QPS就是耍流氓。
————
蓝色气球同学某种程度上回答到点上了,很多人简单的认为开线程就可以提高吞吐、提升性能,其实大错特错。好的解决方案需要参考reactor模型,当然蓝色气球同学没有继续进行分析。
程序猿.gncybsy
nio?多路复用?
楼主回复程序猿.gncybsy:
只是转发,由别的线程池来干活?
————
gncybsy同学回答的不多,但是到点上了,很多时候如果我们由于没找到重心,以至于南辕北辙了。
休目·自由职业Java开发攻城狮
这个问题有很多可以探讨的地方,任务是io密集还是cpu密集,线程池的参数配置,tomcat线程池原理,tomcat参数调优,数据库分库分表等等。如果只是问结论,上万并发基本都是加机器,一般tomcat都是业务服务器,单机500就差不多了。
————
休目同学答对了。
蚂蚁金服员工
这种一个线程阻塞处理一个请求的工作模式必定不可能达到太高的并发量
————
理是这个理
蚂蚁金服员工
前面加个nginx排队
————
解决了tomcat配置及调参再考虑nginx,这是第二步,没有回答问题。
我们了解下tomcat对于io的处理:
再了解下servlet3.x的异步处理: