请教 JAVA 现在是如何应对 GC stop-the-world 导致的服务暂停?

2016-06-01 03:13:01 +08:00
 ncisoft
无论是 web server ,还是 service server ,碰到 full GC 的 stop-the-world 都很麻烦,轻则 503 ,重则服务恢复之后的雪崩。光靠负载均衡器挡前面貌似不能很好地解决问题

我以前的经验是优化 GC 参数,但 CMS 也还是不行,还是会碰到耗时几分钟的 stop-the-world 。从这点来说, JAVA 还不如一个进程伺候一个请求的脚本语言来得干净和行为可预测,如 PHP Ruby 。

有几年没跟踪技术了,也不知道在内存越来越便宜、堆越来越大的今天, JAVA 有什么好的解决方案了吗?比如 G1 实际效果如何?
7972 次点击
所在节点    Java
33 条回复
beneo
2016-06-01 10:00:40 +08:00
gc log 查一下, dump heap 看一下
ncisoft
2016-06-01 10:06:46 +08:00
@xAx 以前我是直接看 sun 官网上的 hotspot 文档,关于各种垃圾回收器的实现机制和相关参数,书还真没看过
ncisoft
2016-06-01 10:10:41 +08:00
看来大家的主要意见还是集中在代码编写和 JVM 优化上, LinkedIn 在 JVM 优化上做了不少的工作,分享出来的相关资料也不少,可供参考
ncisoft
2016-06-01 10:15:58 +08:00
讲到 GC ,我见过最好的内存模型还是 Erlang 的,一个 coroutine 有私有堆和私有堆栈, coroutine 之间不共享数据,受语言模型限制, JAVA 肯定没法比, golang 也是
xudd
2016-06-01 10:29:35 +08:00
@ncisoft LinkedIn 是什么?
swolf119
2016-06-01 10:32:32 +08:00
堆并不是越大越好,反而越大看 gc 一次时间越久
小堆的 web 应用主要还是 CMS ,大堆可以艹 G1
zhenjiachen
2016-06-01 10:33:32 +08:00
@xudd linkedin 是一个公司。
xudd
2016-06-01 10:44:47 +08:00
@zhenjiachen 哦,我查了一下是一个职场社交平台(领英)吗?我还以为是一个人呢,嘿嘿
ncisoft
2016-06-01 16:56:03 +08:00
@xudd 在真外企混过的基本都知道 LinkedIn 的
wander2008
2016-06-02 07:24:59 +08:00
full gc 还能到几分钟,你们到底啥业务啊?
iminto
2016-06-27 14:40:52 +08:00
ull gc 还能到几分钟,你们的程序员可以开除了
ncisoft
2016-06-27 15:40:48 +08:00
@iminto 那你们线网的 full gc 是多短? 5ms 有么
iminto
2017-03-07 16:24:40 +08:00
@ncisoft 从没遇到超过 2 秒的情况

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

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

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

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

© 2021 V2EX