V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
overthemoon
V2EX  ›  Java

生产服务器需要配置什么 jvm 参数

  •  
  •   overthemoon · 2022-07-08 12:22:24 +08:00 via iPad · 5594 次点击
    这是一个创建于 880 天前的主题,其中的信息可能已经有所发展或是发生改变。

    面试的时候遇到一个面试官,问我生产有没有配置垃圾回收什么的参数,我说我没配置过,面试官一口装逼的语气说,不配置怎么运行的?! 仿佛他知道了这个东西就牛逼起来了😅

    40 条回复    2022-07-15 13:34:27 +08:00
    cweijan
        1
    cweijan  
       2022-07-08 12:30:57 +08:00
    其实不需要, 配置参数都是为了面试时装逼
    putaozhenhaochi
        2
    putaozhenhaochi  
       2022-07-08 12:50:10 +08:00 via Android   ❤️ 2
    qps250 配啥啊
    zhady009
        3
    zhady009  
       2022-07-08 13:06:05 +08:00
    一般还真没什么好设置的参数默认就跑得不错了 基本就只有 Xms Xmx Xmn
    G1 改 MaxGCPauseMillis 其实也没什么用 该挂还是得挂频率问题而已
    ZGC 就更不用改了自适应的
    chendy
        4
    chendy  
       2022-07-08 13:10:19 +08:00
    内存的几个,最小 = 最大外加 pretouch
    文件编码的几个
    gc 啥的,除非真的有必要否则不动(曾经折腾过一阵 cms ,最后发现还不如默认的 parallel ,算了算了)
    potatowish
        5
    potatowish  
       2022-07-08 13:35:44 +08:00 via iPhone
    小作坊吧,后端了解即可,这是运维该管的
    potatowish
        6
    potatowish  
       2022-07-08 13:36:54 +08:00 via iPhone
    @potatowish 我见过最搞笑的,配置了一堆参数,后面又改回默认了
    zzl22100048
        7
    zzl22100048  
       2022-07-08 13:51:04 +08:00
    zgc shenandoah 都没有什么必要配置了,
    frank1256
        8
    frank1256  
       2022-07-08 13:55:21 +08:00
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<PATH_FOLDER>\<file_name>.hprof

    oom 导出堆,

    堆内存最大最小

    其他好像没有了

    有的时候会加 gclog
    VeryZero
        9
    VeryZero  
       2022-07-08 14:01:33 +08:00   ❤️ 1
    直接反问:不配置为什么不能运行😂
    salmon5
        10
    salmon5  
       2022-07-08 14:05:11 +08:00
    渣渣
    wolfie
        11
    wolfie  
       2022-07-08 14:09:14 +08:00
    xms xmx
    cheng6563
        12
    cheng6563  
       2022-07-08 14:10:40 +08:00
    -Xmx 控制最大堆内存
    -XX:+ExitOnOutOfMemoryError 使其 OOM 时强制结束进程
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<Path> OOM 时导出 dump

    这仨是重点,其他都是调优的小细节,而且可能调了不如不调。
    cheng6563
        13
    cheng6563  
       2022-07-08 14:15:10 +08:00
    另外还有些设置默认编码,默认时区,随机数生成器,临时目录之类的,看情况加吧。
    dlmy
        14
    dlmy  
       2022-07-08 14:29:44 +08:00
    -XX∶ParallelGCThreads= N 设置年轻代的并行收集线程数
    -XX∶ParallelCMSThreads= N 设置 cms 的并行收集线程数

    避免 docker 踩坑,谁踩过谁知道。
    fiveStarLaoliang
        15
    fiveStarLaoliang  
       2022-07-08 14:47:58 +08:00
    配啥参数,你们把 jdk 升级到 14 或者 17 比配啥参数都强
    yazinnnn
        16
    yazinnnn  
       2022-07-08 15:39:42 +08:00
    怼他说我们都是用高版本 jdk 的
    dcsuibian
        17
    dcsuibian  
       2022-07-08 15:59:38 +08:00
    如果一个配置参数很常用很合理,jvm 为什么不直接弄成默认的或者自动检测?
    调优肯定有意义的(要不然为啥有这个设置),但那是针对特殊场景。

    正常来说,应该是算法、程序和数据库基本没什么优化的空间了再考虑这个。
    刷 oj 超时,第一步不会想着换编译器吧。
    而且 jvm 都调了,操作系统不调下?底层硬件不调下?
    billytom
        18
    billytom  
       2022-07-08 16:32:35 +08:00 via iPhone
    顺带请教一下,如何设置优先打开 https ? nginx 上那套 301 跳转到 https 上那套不好用啊
    huihuiHK
        19
    huihuiHK  
       2022-07-08 16:43:23 +08:00
    一般默认的就是最优的,自己调的话越调越慢,哈哈
    cyndihuifei
        20
    cyndihuifei  
       2022-07-08 17:11:44 +08:00
    我不知道为什么总是喜欢把加个参数就叫调优,确定是优了吗
    qinxi
        21
    qinxi  
       2022-07-08 17:12:09 +08:00
    @billytom #18 了解一下 hsts
    Suddoo
        22
    Suddoo  
       2022-07-08 17:21:30 +08:00 via iPhone
    默认配置对于大多数场景够用了,傻逼才去瞎几把调

    为什么要调?出现性能问题才去调,为什么会出现性能问题?首先排查是不是服务器太差了,服务器性能差,还调个鸡儿!其次看代码是不是写成了一坨屎,比如生存大量无用对象、明明可以优化成批量查询的,后台生存 n 条 select 语句……等,一般优化到这一步,基本上就够了

    新版本的 JDK 优化得很好了,GC 停顿控制在 1ms 以内,而且没啥参数给二把手们“调优”了,二把手们拿着锤子、看哪儿都是钉子
    Suddoo
        23
    Suddoo  
       2022-07-08 17:27:25 +08:00 via iPhone
    可能把一行垃圾代码改正确、性能直接提升 50%、远大于“调优”、在垃圾代码上再怎么“调优”、都于事无补

    上来就“调优”的,都是傻逼
    zr8657
        24
    zr8657  
       2022-07-08 17:32:15 +08:00
    就国内这帮公司水平还调优?老老实实加点内存、加个机器得了,跟楼上说的一样真不如改改那破代码。
    Saxton
        25
    Saxton  
       2022-07-08 21:59:43 +08:00   ❤️ 2
    https://www.liaoxuefeng.com/article/1336345083510818

    看这个你就懂了 其他都是假的
    RedBeanIce
        26
    RedBeanIce  
       2022-07-08 22:09:46 +08:00
    @lscbqr docker 会导致这个数量很少嘛。
    RedBeanIce
        27
    RedBeanIce  
       2022-07-08 22:11:15 +08:00
    @cheng6563 如果线上服务 16G 内存导致 dump 打包这个内存文件太大咋整。服务器就一直卡在那里。
    我现在的公司好像是出现问题了,再加这个参数。

    请问直接启动参数加有什么好处嘛
    dqzcwxb
        28
    dqzcwxb  
       2022-07-08 23:02:22 +08:00
    首先,抛弃 cms 换成 g1
    然后 Xms Xmx 设置一下,运行时看情况需不需要调整 Xmn
    其他的碰到了再说
    securityCoding
        29
    securityCoding  
       2022-07-08 23:27:28 +08:00 via Android
    面试遇到 gc 调优多吊的同学我一般会挂了他
    dlmy
        30
    dlmy  
       2022-07-08 23:39:20 +08:00   ❤️ 1
    @RedBeanIce 现在公司一般都有 Devops 平台,是基于 Docker + K8s 来进行部署应用。有些参数必须显示指定,如我上面说的那些: 因为 JVM 默认会根据读到的 CPU 数目进行计算来设置数值,如果你的机器是 64 核,并行收集线程数就会有 64 个。
    cheng6563
        31
    cheng6563  
       2022-07-09 00:31:35 +08:00
    @RedBeanIce Java OOM 后本身就很有可能会失控,所以要加-XX:+ExitOnOutOfMemoryError 让其 OOM 时直接死掉再由服务管理器重启。来回这服务都不可用了,还怕 dump 太慢吗。
    Bromine0x23
        32
    Bromine0x23  
       2022-07-09 02:02:37 +08:00
    @lscbqr Java 8 的话 -XX:+UseContainerSupport
    overthemoon
        33
    overthemoon  
    OP
       2022-07-09 02:29:20 +08:00 via iPad
    @VeryZero 我说了为什么一定要配置?面试官说那么重要‼️你居然不懂?
    xaplux
        34
    xaplux  
       2022-07-09 09:06:47 +08:00
    面试官就是想考察一下你对 JVM 的了解,如果确实没有接触过生产环境配置,可以这么回答:生产环境这边基本都是运维部署,如果是我配置的话,我会大概什么什么设置多少,开启什么什么参数,等等。

    而不是你回答一句 “没配置过” 就完事了。
    overthemoon
        35
    overthemoon  
    OP
       2022-07-09 09:17:11 +08:00 via iPad
    @xaplux 我用的很尴尬的语气说的,当时还以为面试官接下来会继续问 jvm 其他问题,比如堆栈那些,没想到开始装逼说教了😅
    xaplux
        36
    xaplux  
       2022-07-09 09:23:24 +08:00   ❤️ 1
    @overthemoon 嗯呢,并不是所有面试官都会继续问下去的,有时候自己也要占据一些主动权,建议不会的或者没有实际生产用过的可以根据自己的了解找补回来,而不是问一句你答一句
    461368919
        37
    461368919  
       2022-07-09 11:25:53 +08:00
    其实这就是 气场不合 吧
    xmh51
        38
    xmh51  
       2022-07-09 11:59:39 +08:00
    @lscbqr 你是啥版本的。。jdk8 191 版本已经提供对 docker 的支持了 所以不需要管这个了
    a15757817542
        39
    a15757817542  
       2022-07-09 12:45:36 +08:00
    应该是问你 jvm 调优的一些思路
    Uplay
        40
    Uplay  
       2022-07-15 13:34:27 +08:00
    @a15757817542 那大佬可以分享下有什么思路吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3384 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:46 · PVG 19:46 · LAX 03:46 · JFK 06:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.