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

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

  •  
  •   overthemoon · 147 天前 via iPad · 4240 次点击
    这是一个创建于 147 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    oom 导出堆,

    堆内存最大最小

    其他好像没有了

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

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

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

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

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

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

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

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

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

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