除了设置新生代,老年代比例大小,选择 gc 收集器,
还可以进行哪些方面的调优
1
ericgui 2020-01-12 13:58:38 +08:00
|
2
sagaxu 2020-01-12 13:59:29 +08:00 via Android
如果有固定的调优参数,jvm 早做成默认参数了
|
3
coolmenu 2020-01-12 14:25:38 +08:00 via Android
Oracle 估计快出一版基于 ai 的调教了
|
4
zartouch 2020-01-12 15:39:39 +08:00
建议去翻 gc 参数,不同的 gc 收集器是不一样的。比如 cms 之前我们还会设置,objects 占比多少的时候启动 cms,启用多少线程数,full gc 时强制预处理( CMSMaxAbortablePrecleanTime 默认 5s )。其他的还有晋升老年代的阈值等
|
5
wysnylc 2020-01-12 16:15:45 +08:00
建议开始了解 zgc,已经取消新生代老年代永久代,就剩下个元空间
|
6
chendy 2020-01-12 16:52:15 +08:00
|
7
HiShan 2020-01-12 17:17:23 +08:00
具体场景是啥?每个场景适用不同的 gc 就行了,一般都不用调
|
8
anyele 2020-01-12 18:28:21 +08:00 via Android
搭车问,有 zgc 后,还需要 jvm 调优吗
|
9
lewis89 2020-01-12 19:24:22 +08:00
其实说实话 JVM 真的没啥好调优的,除了在 吞吐量 内存占用 延时上 做个取舍,选个 GC 算法,其余真的没啥好调的,默认就够了,像 CMS 新生代采用 标记复制算法,已经给你配好比例了 你自己去优化完全就是 自取其辱。
|
10
cubecube 2020-01-12 22:24:59 +08:00
@lewis89 也不完全对。jvm 丰富的 gc 参数灵活性还是很棒的,不同的场景下不同的适用参数,在内存受限或者进程常驻的情况下还挺重要的。另外 cms 部分参数乱调整的话,还不如不调整, 容易适得其反,导致频繁 full gc
|
11
cubecube 2020-01-12 22:25:33 +08:00
cms 在 jdk14 貌似都要被删除了,新项目最好直接 g1
|
12
lewis89 2020-01-13 07:24:28 +08:00
@cubecube #10 就微服务架构这块,我觉得没啥好调优的,一个服务实例撑死就给几个 G 的内存,在 GC 回收参数上调优基本上没有太大意义,单个服务实例如果出现问题,通过链路监测降低它的负载,或者直接让它下线,让其它实例顶上,反正实例都是无状态的,问题不大。
|
13
lewis89 2020-01-13 07:26:50 +08:00 1
@cubecube #10 主要现在已经不是单体时代了,网上有很多段子,说公司老的服务 老是 OOM 重启,但是又排查不了原因,leader 为了大家晚上睡个好觉,后来干脆搞了十几个实例副本,自动负载均衡,如果哪个服务挂壁了 让它直接 down 掉重启,让备用实例顶上。
|
14
Aresxue 2020-01-13 09:43:52 +08:00
感觉还不如研究下怎么调整线程数、数据库连接这些东西。。。
|