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

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

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

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

5014 次点击
所在节点    Java
27 条回复
NB40B938mff85mtq
2019-01-23 16:18:35 +08:00
调一下 JVM 初始化堆的大小啊。。。立竿见影
Kraken
2019-01-23 17:26:18 +08:00
@micean #20 没太明白 如果不换 cpu 那 cpu 的核心数和线程数是固定的啊 那假如我现在线程池的数量已经大于核心线程数量了 那再提高线程池的数量不应该是增加了同时调度线程的数量 相应的 每个线程执行的时间也变长了吗? 因为有很多时间分配给其他线程了

@Gempty #21 早就已经调过啦 现在 3 分钟一次 full gc 我觉得还行
NB40B938mff85mtq
2019-01-23 17:32:17 +08:00
@Kraken 优化下线程~~~maxThreads、SpareThreads、acceptCount
Kraken
2019-01-23 17:38:01 +08:00
@Gempty #23 优化了 maxThreads 从默认的 200 提到了 1000 但是之后没有什么爆款活动了,服务器压力一直不大,想通过理论知识想清楚这样到底能不能提升性能。因为 cpu 是 8 核 16 线程,那理论上无论在哪个瞬间,同时执行的线程数量都只有 16 个才对吧。提高线程数量,只是同时调度的线程数量变多了,那相应的每个线程的处理时间也变得更长,这样还会增加 cpu 切换线程的压力。我个人觉得逻辑应该是这样的。

还有一点就是不知道 fd 用不用调高上限,现在几乎一半的人回答用!另一半人回答不用!还有人说默认的 1024fd 效率是最好的,如果调高 fd 处理效率会降低。我也不知道哪些是对的。

果然还是应该自己掌握压测软件,多调多压……
micean
2019-01-23 19:19:06 +08:00
@Kraken 上下文切换带来的损失远小于一次数据库操作
gz911122
2019-01-24 10:08:53 +08:00
@Kraken
因为如果瓶颈在 io 的话,很多线程是在无谓的等待 io 返回,这时候增加线程数可以增加同时接客的数量。
reliefe
2019-02-22 21:29:02 +08:00
@gz911122 +1
提高线程数能不能提高吞吐量,得看项目本身了。对 IO 密集型的来说通常是提高的,对 CPU 密集的来说用处就不大了,因为线程数可能根本没用完。
所以第一先观测线程使用的情况,简单的方式直接 `netstat -na | grep ESTAB | grep 8080 | wc -l`,如果线程数里现在配置的还远,就没必要动线程数。
第二观测吞吐量,要知道现在的每秒 /每分钟能处理多少请求。然后调整线程数再观察吞吐量数据。

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

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

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

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

© 2021 V2EX