Java 的服务,支撑高并发,是部署多个进程好,还是提高虚机配置调高最大线程数好。

2022-02-23 09:05:26 +08:00
 themostlazyman

有个疑问一直想不太明白,java api 服务是提高单虚拟的 cpu 核心数和内存大小,调高最大线程数。还是干脆用 tomcat 的默认配置,部署多台机器,用 nginx 负载均衡。感觉这个没有绝对的哪个好,只是在单个机器配置和负载的个数上。

4491 次点击
所在节点    Java
26 条回复
plko345
2022-02-23 19:44:00 +08:00
@Oktfolio 你们设置多少内存?
watzds
2022-02-23 21:24:10 +08:00
这不是一个问题吧,你单机性能再好,能不用 Nginx 这类负载均衡?除非是很小的的服务
exceldream
2022-02-24 02:04:56 +08:00
@Hanggi 兄弟你知道太多了 -_-#
lamesbond
2022-02-24 10:20:21 +08:00
单点故障不及时处理容易雪崩,上集群吧
byte10
2022-02-26 10:52:57 +08:00
https://www.bilibili.com/video/BV1FS4y1o7QB 少年你需要看看这个讲解。首先你先预定某个接口的吞吐量,比如我希望这个服务 1 秒可以处理 5000 个请求(如: /getOrder ),qps=5000/s 。然后你的本地进行测试,就用你的那个笔记本电脑测试就可以了。不要用 jmeter 它对小白不友好,你可以用 apache 的 ab 或者用我视频给你的那个 nodejs 代码进行压测,比较专业,连接数设置 1500 即可 。

1 、然后你在测试的过程中,先通过调整线程池大小,比如 200, 400, 800, 1200 ,1500 ,然后再对比吞吐量的大小,就可以知道你的这个接口 运行多少线程数才能达到最大的吞吐量。如果你测试出来的结果是 2000/S ,那么就可以通过增加相同性能的机器数量 来达到 5000 的并发。

2 、至于你想知道性能瓶颈,其实非常的简单,性能的瓶颈 90%的情况就是在网络 IO 等待上,把所有网络 IO 的代码(比如请求 mysql ,调用微服务等)调整换成 redis 返回,你再进行压测,如果性能提升非常的大,那么就是在数据库上的瓶颈了,如果提升不大,那么就是你代码的问题。刚说了 90%的情况是在网络 IO ,数据库响应慢,那么 IO 也慢,就需要优化数据库了。

千万要注意:记住前面的几万次请求是热身运动,主要为了触发 jit ,后续的测试才是比较准确的性能表现。所以每次测试就先随便跑几万次,然后再进行 2-3 次压力测试,取平均值,一般都是相差不多的了。

不用盲目增加机器,你机器也许已经可以支持现有峰值的 4 倍都不一定,最简单就是看 cpu ,cpu 没满,说明很多的性能都没释放出来。cpu 长时间在 8-90%的情况下,才考虑增加机器。
themostlazyman
2022-02-28 15:48:58 +08:00
@byte10 谢谢,感觉大部分平台的性能瓶颈不是网络就是磁盘。

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

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

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

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

© 2021 V2EX