面试的时候遇到一个面试官,问我生产有没有配置垃圾回收什么的参数,我说我没配置过,面试官一口装逼的语气说,不配置怎么运行的?! 仿佛他知道了这个东西就牛逼起来了😅
1
cweijan 2022-07-08 12:30:57 +08:00
其实不需要, 配置参数都是为了面试时装逼
|
2
putaozhenhaochi 2022-07-08 12:50:10 +08:00 via Android 2
qps250 配啥啊
|
3
zhady009 2022-07-08 13:06:05 +08:00
一般还真没什么好设置的参数默认就跑得不错了 基本就只有 Xms Xmx Xmn
G1 改 MaxGCPauseMillis 其实也没什么用 该挂还是得挂频率问题而已 ZGC 就更不用改了自适应的 |
4
chendy 2022-07-08 13:10:19 +08:00
内存的几个,最小 = 最大外加 pretouch
文件编码的几个 gc 啥的,除非真的有必要否则不动(曾经折腾过一阵 cms ,最后发现还不如默认的 parallel ,算了算了) |
5
potatowish 2022-07-08 13:35:44 +08:00 via iPhone
小作坊吧,后端了解即可,这是运维该管的
|
6
potatowish 2022-07-08 13:36:54 +08:00 via iPhone
@potatowish 我见过最搞笑的,配置了一堆参数,后面又改回默认了
|
7
zzl22100048 2022-07-08 13:51:04 +08:00
zgc shenandoah 都没有什么必要配置了,
|
8
frank1256 2022-07-08 13:55:21 +08:00
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<PATH_FOLDER>\<file_name>.hprof
oom 导出堆, 堆内存最大最小 其他好像没有了 有的时候会加 gclog |
9
VeryZero 2022-07-08 14:01:33 +08:00 1
直接反问:不配置为什么不能运行😂
|
10
salmon5 2022-07-08 14:05:11 +08:00
渣渣
|
11
wolfie 2022-07-08 14:09:14 +08:00
xms xmx
|
12
cheng6563 2022-07-08 14:10:40 +08:00
-Xmx 控制最大堆内存
-XX:+ExitOnOutOfMemoryError 使其 OOM 时强制结束进程 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<Path> OOM 时导出 dump 这仨是重点,其他都是调优的小细节,而且可能调了不如不调。 |
13
cheng6563 2022-07-08 14:15:10 +08:00
另外还有些设置默认编码,默认时区,随机数生成器,临时目录之类的,看情况加吧。
|
14
dlmy 2022-07-08 14:29:44 +08:00
-XX∶ParallelGCThreads= N 设置年轻代的并行收集线程数
-XX∶ParallelCMSThreads= N 设置 cms 的并行收集线程数 避免 docker 踩坑,谁踩过谁知道。 |
15
fiveStarLaoliang 2022-07-08 14:47:58 +08:00
配啥参数,你们把 jdk 升级到 14 或者 17 比配啥参数都强
|
16
yazinnnn 2022-07-08 15:39:42 +08:00
怼他说我们都是用高版本 jdk 的
|
17
dcsuibian 2022-07-08 15:59:38 +08:00
如果一个配置参数很常用很合理,jvm 为什么不直接弄成默认的或者自动检测?
调优肯定有意义的(要不然为啥有这个设置),但那是针对特殊场景。 正常来说,应该是算法、程序和数据库基本没什么优化的空间了再考虑这个。 刷 oj 超时,第一步不会想着换编译器吧。 而且 jvm 都调了,操作系统不调下?底层硬件不调下? |
18
billytom 2022-07-08 16:32:35 +08:00 via iPhone
顺带请教一下,如何设置优先打开 https ? nginx 上那套 301 跳转到 https 上那套不好用啊
|
19
huihuiHK 2022-07-08 16:43:23 +08:00
一般默认的就是最优的,自己调的话越调越慢,哈哈
|
20
cyndihuifei 2022-07-08 17:11:44 +08:00
我不知道为什么总是喜欢把加个参数就叫调优,确定是优了吗
|
22
Suddoo 2022-07-08 17:21:30 +08:00 via iPhone
默认配置对于大多数场景够用了,傻逼才去瞎几把调
为什么要调?出现性能问题才去调,为什么会出现性能问题?首先排查是不是服务器太差了,服务器性能差,还调个鸡儿!其次看代码是不是写成了一坨屎,比如生存大量无用对象、明明可以优化成批量查询的,后台生存 n 条 select 语句……等,一般优化到这一步,基本上就够了 新版本的 JDK 优化得很好了,GC 停顿控制在 1ms 以内,而且没啥参数给二把手们“调优”了,二把手们拿着锤子、看哪儿都是钉子 |
23
Suddoo 2022-07-08 17:27:25 +08:00 via iPhone
可能把一行垃圾代码改正确、性能直接提升 50%、远大于“调优”、在垃圾代码上再怎么“调优”、都于事无补
上来就“调优”的,都是傻逼 |
24
zr8657 2022-07-08 17:32:15 +08:00
就国内这帮公司水平还调优?老老实实加点内存、加个机器得了,跟楼上说的一样真不如改改那破代码。
|
25
Saxton 2022-07-08 21:59:43 +08:00 2
|
26
RedBeanIce 2022-07-08 22:09:46 +08:00
@lscbqr docker 会导致这个数量很少嘛。
|
27
RedBeanIce 2022-07-08 22:11:15 +08:00
|
28
dqzcwxb 2022-07-08 23:02:22 +08:00
首先,抛弃 cms 换成 g1
然后 Xms Xmx 设置一下,运行时看情况需不需要调整 Xmn 其他的碰到了再说 |
29
securityCoding 2022-07-08 23:27:28 +08:00 via Android
面试遇到 gc 调优多吊的同学我一般会挂了他
|
30
dlmy 2022-07-08 23:39:20 +08:00 1
@RedBeanIce 现在公司一般都有 Devops 平台,是基于 Docker + K8s 来进行部署应用。有些参数必须显示指定,如我上面说的那些: 因为 JVM 默认会根据读到的 CPU 数目进行计算来设置数值,如果你的机器是 64 核,并行收集线程数就会有 64 个。
|
31
cheng6563 2022-07-09 00:31:35 +08:00
@RedBeanIce Java OOM 后本身就很有可能会失控,所以要加-XX:+ExitOnOutOfMemoryError 让其 OOM 时直接死掉再由服务管理器重启。来回这服务都不可用了,还怕 dump 太慢吗。
|
32
Bromine0x23 2022-07-09 02:02:37 +08:00
@lscbqr Java 8 的话 -XX:+UseContainerSupport
|
33
overthemoon OP @VeryZero 我说了为什么一定要配置?面试官说那么重要‼️你居然不懂?
|
34
xaplux 2022-07-09 09:06:47 +08:00
面试官就是想考察一下你对 JVM 的了解,如果确实没有接触过生产环境配置,可以这么回答:生产环境这边基本都是运维部署,如果是我配置的话,我会大概什么什么设置多少,开启什么什么参数,等等。
而不是你回答一句 “没配置过” 就完事了。 |
35
overthemoon OP @xaplux 我用的很尴尬的语气说的,当时还以为面试官接下来会继续问 jvm 其他问题,比如堆栈那些,没想到开始装逼说教了😅
|
36
xaplux 2022-07-09 09:23:24 +08:00 1
@overthemoon 嗯呢,并不是所有面试官都会继续问下去的,有时候自己也要占据一些主动权,建议不会的或者没有实际生产用过的可以根据自己的了解找补回来,而不是问一句你答一句
|
37
461368919 2022-07-09 11:25:53 +08:00
其实这就是 气场不合 吧
|
39
a15757817542 2022-07-09 12:45:36 +08:00
应该是问你 jvm 调优的一些思路
|
40
Uplay 2022-07-15 13:34:27 +08:00
@a15757817542 那大佬可以分享下有什么思路吗
|