[ Java ] 提高 tomcat 的工作线程最高数量 能不能提高吞吐量?

2019-01-23 11:12:15 +08:00
 Kraken

最近在搞服务器优化,对于 tomcat 有很多的疑问。现在 tomcat 使用 nio,之前工作线程线程池最大数量是默认的 200,最近我在想考虑要不要把线程池最大数量提升一些,但是 cpu 实际上能同时运行的也就那么多线程吧?增加工作线程的数量是不是不能提高吞吐量反而会增加 cpu 切换线程的压力?

请大神们指点,另外想找些小伙伴(不只 java,还想找一些服务器运维的大神带飞)一起交流,有 q 群什么的可以发一下哦

4978 次点击
所在节点    Java
27 条回复
gz911122
2019-01-23 11:36:36 +08:00
服务器配置跟得上的话可以提高一些
DovaKeen
2019-01-23 11:41:45 +08:00
这应该有一个大概的函数关系吧,刚开始的时候提升线程数会增加吞吐量,到达极点以后再增加线程数会导致上下文切换带来的开销过大,反而降低吞吐量。所以如果能做一个实验的话,也许可以拟合出来这个关系?
AngryPanda
2019-01-23 11:50:36 +08:00
需要基准测试
gabon
2019-01-23 11:56:44 +08:00
先找性能瓶颈啊,IO 密集还是 CPU 密集型的。CPU 密集的再怎么加线程也没用
qilishasha
2019-01-23 12:02:10 +08:00
你就是改到 10000 也行,能用到 200 的业务不是单服务器能玩的,不要浪费钱在单服务器上了
liuxey
2019-01-23 12:07:04 +08:00
如果是 CPU 密集型,加了没用,如果是 IO 密集型,增加线程后数据库堵的更慌,所以也没用,要找点问题的点然后去解决。
luozic
2019-01-23 13:06:52 +08:00
木桶原理,找到系统瓶颈
Kraken
2019-01-23 13:30:42 +08:00
@DovaKeen #2 确实是应该有一个函数关系 只不过我想弄清楚每一步的原理,好能更准确的找出那个最优值

@AngryPanda #3 不太懂 我一直在中小公司呆着 我上网查查

@gabon
@qilishasha
@liuxey
#4,#5,#6 是 IO 密集型 现在基础知识缺失较多 不太好找瓶颈在哪里 公司也没有大牛支持 很烦
qiyuey
2019-01-23 13:35:40 +08:00
压测一下
neoblackcap
2019-01-23 13:57:15 +08:00
@Kraken 假如你什么都不清楚,那么你应该先用对应的工具进行 profiling,而不是瞎调参数。我记得 Oracle JDK 里面是有可以远程 profiling 的工具,你找找吧。或者自己分流程步骤打日志,定位热点,这样才好改
micean
2019-01-23 14:01:16 +08:00
如果瓶颈是有更多的线程阻塞在等待数据库 IO,那么增加线程是有用的,直到上下文切换的代价大于此等待 IO 的代价

但是一般从经验上来看,单实例 200 线程足矣
jicg
2019-01-23 14:04:31 +08:00
这就是 java 头疼之处,tomcat 的优化,很折腾人,弃坑吧,学 golang
Kraken
2019-01-23 14:11:09 +08:00
@jicg 哈哈哈 弃坑还行
Kraken
2019-01-23 14:12:11 +08:00
@micean 为啥啊? 如果有更多的线程阻塞在等数据库 IO 那加线程不是更多线程等待数据库了吗?
DovaKeen
2019-01-23 14:25:19 +08:00
@Kraken 这个函数我觉得有很多因机器和场景而异的变量,大概是可以测出来一个特定场景的值,但是不能得到一个普适的函数的吧…
Kraken
2019-01-23 14:29:23 +08:00
@DovaKeen #15 嗯 有道理 果然还是应该先压测什么的 掌握系统目前的各项性能指标
lihongjie0209
2019-01-23 14:37:11 +08:00
@jicg 你觉得用了 go 就不需要了解优化了?
Kraken
2019-01-23 14:40:29 +08:00
@lihongjie0209 #17 哈哈哈 不可能的 无论什么语言都是需要优化的 就算是前端 也需要针对客户端优化 毕竟资源是有限的 技术才是硬道理啊!
x7395759
2019-01-23 15:03:45 +08:00
micean
2019-01-23 15:13:12 +08:00
@Kraken
我说的是假设外部条件有余的情况,只就这一个 tomcat 来说。
比方说,高铁多增加几个检票口,排队的旅客肯定能更快地过检,也就增加了吞吐量。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/529728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX