有多少 java 码农平时需要用到 jvm 调优和数据库调优? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
esolve
V2EX    Java

有多少 java 码农平时需要用到 jvm 调优和数据库调优?

  •  
  •   esolve 2016-12-25 23:04:59 +08:00 7465 次点击
    这是一个创建于 3211 天前的主题,其中的信息可能已经有所发展或是发生改变。

    会不会工作一两年了 还没用到过 jvm 调优 而是由 DevOpt 或者部署工程师去做?

    34 条回复    2016-12-31 16:47:23 +08:00
    Miy4mori
        1
    Miy4mori  
       2016-12-25 23:42:11 +08:00 via Android   1
    性能不够时应用做负载均衡,数据做主从,然后项目就死了,不会再优化了………
    sagaxu
        2
    sagaxu  
       2016-12-25 23:48:16 +08:00 via Android
    也就调个内存大小和 gc 参数,其它都默认
    xiamx
        3
    xiamx  
       2016-12-26 00:01:42 +08:00
    Devops
    slixurd
        4
    slixurd  
       2016-12-26 00:02:41 +08:00
    至少会调个堆大小吧....
    wmhx
        5
    wmhx  
       2016-12-26 00:06:55 +08:00
    国内需要天天优化 jvm 的就那么几个公司,
    大把小公司活都干不完, 那里有空玩什么 jvm ,
    现在硬件这么便宜, 多加点内存,跑几个 jvm 不比往死里优化 jvm 来的快么?
    yuhuan66666
        6
    yuhuan66666  
       2016-12-26 00:42:03 +08:00 via Android
    Java 面试总被问到的问题。。。。
    但是实际从来基本没动过,顶多改改堆大小啥的
    q397064399
        7
    q397064399  
       2016-12-26 09:02:27 +08:00
    过早优化是万恶之源,能跑得动,或者加硬件能解决的 ,尽量不要用人力去解决,

    现在硬件老便宜了,实在不行就上云服务器,再不行,就做负载均衡, nginx 反代,多个 tomcat
    共享 session 池,然后数据库 做读写分离,最后还不行的话,
    这项目也就差不多死透了,要么交个大公司做,要么就扩大团队,招一堆 架构师来 :D
    q397064399
        8
    q397064399  
       2016-12-26 09:09:49 +08:00
    首先优化这事情,肯定不是运维部署这些人能干的,否则还要程序员干嘛?

    你给它写个 O ( N3 )的算法在哪里跑,顺带还把数据库的连接池给耗空了,业务量一上来,
    运维再怎么优化 也只能干瞪眼啊

    例如把 select xxx from tablexx where x in (xxxx)这样的业务逻辑
    用 Java 代码写出来,把整张表读出来,然后给它 朴素排序一遍,再根据用户提交查找并集,
    顺带给整张表做事务最高级别处理,整表加锁
    q397064399
        9
    q397064399  
       2016-12-26 09:22:35 +08:00
    我也读过一部分深入理解 JVM 虚拟机,不过 JVM 的实现,我们肯定是很难搞懂的,
    但是大概了解下 GC ROOTS 方式之类还是可以的。

    从实际出发,真正对 GC 延迟要求极高的系统,实际上并不适合 Java 来做, stop the world
    (一般都是 C++,手动管理内存,这样的系统实时性才高,例如 股票金融系统的实时性 )
    无论你再怎么调优, JVM 的 GC 算法是虚拟机厂商的黑盒,它是不会让你碰的,
    而绝大部分做 Java 需要调优的场景相当少,
    极高性能需求的 肯定是 C/C++, 这些语言的开发者在有必要的时候,连内存管理器都是自己定制的
    (例如 redis ,它的底层实现是 hashmap ,很多数据结构都是通过自定义内存管理器实现的)
    ( Java 门槛一看就低多了,根本没办法定制内存管理器)
    对实时性有一定的要求,也有 Java 市场,但是不多,绝大部分开发领域的 Java 开发者接触不到而已,
    q397064399
        10
    q397064399  
       2016-12-26 09:28:15 +08:00
    主流虚拟机根据书上的介绍描述是,
    没有任何一个 JVM 的 GC 实现 可以避免 stop the world
    Infernalzero
        11
    Infernalzero  
       2016-12-26 09:36:15 +08:00
    数据库调优肯定得懂的啊,这你也让运维搞?
    ljcarsenal
        12
    ljcarsenal  
       2016-12-26 09:38:47 +08:00
    jvm 不是吊打一票动态语言的 vm
    Infernalzero
        13
    Infernalzero  
       2016-12-26 09:41:06 +08:00
    @q397064399 哥....整张表读出来,这表一大,分分钟给你搞跪啊,人查询都限制返回行数的,普通 IN 查询根本没有问题,只要不是条件参数太多
    zacard
        14
    zacard  
       2016-12-26 09:53:07 +08:00
    数据库调优不可避免吧,索引合理性, sql 合理性等等。 jvm 调整的比较少,但是也有。
    q397064399
        15
    q397064399  
       2016-12-26 09:58:23 +08:00
    @Infernalzero 我只是假设而已,全读出来 肯定跪了,这种情况 查询并集的情况 肯定是要用 sql 来完成的
    sql 存储引擎后面的算法 比我的 O ( N2 )肯定强啊
    janxin
        16
    janxin  
       2016-12-26 10:05:19 +08:00 via iPhone
    一般情况下你用个脚本语言性能都可以,性能不够时应用做负载均衡,数据做主从,然后就行了。 XD
    xiuc001
        17
    xiuc001  
       2016-12-26 10:09:14 +08:00
    大多数是等不到调优项目就挂了
    XhstormR
        18
    XhstormR  
       2016-12-26 10:40:29 +08:00 via Android
    也是哦。
    0915240
        19
    0915240  
       2016-12-26 12:44:07 +08:00 via iPhone
    @q397064399 这个是 过早优化是万恶之源
    ihuotui
        20
    ihuotui  
       2016-12-26 12:56:36 +08:00
    有, jvm 调优, sql 调优(比较少,在设计时候已经充分考虑好业务了),还有查看线程运行情况。
    neoblackcap
        21
    neoblackcap  
       2016-12-26 13:11:50 +08:00
    @q397064399 其实 GC 的实现还是相当公开的, openjdk 里面各种各样的 GC 都有算法论文,以及代码都是公开的,想怎么调就怎么调。
    还有一个就是 stop the world 其实也是可以避免的, http://www.azulsystems.com/sites/default/files/images/c4_paper_acm.pdf 这篇论文就有说 azul 是如何实现一个 GC ,并将卡顿控制在 10ms 之内,也有金融公司用了他们 JVM 。
    q397064399
        22
    q397064399  
       2016-12-26 13:42:29 +08:00
    @neoblackcap 我不是很清楚,我读过一个章节,
    深入理解 JVM 虚拟机 确实有一个章节 有讲过 能够避免 stop the world 的虚拟机

    但是 GC 算法是如何实现我的就不清楚了?
    GCROOTS 难道是 dfs 搜索 有向图?从堆栈模型来讲,所有的对象确实是形成了一个 有向闭环图
    eightqueen
        23
    eightqueen  
       2016-12-26 15:04:38 +08:00
    java 还是太弱,需要优化内存,你看 php 就不用。
    kylefeng
        24
    kylefeng  
       2016-12-26 15:13:46 +08:00
    业务量不够,大部分情况下用不到。。。
    cjyang1128
        25
    cjyang1128  
       2016-12-26 15:33:35 +08:00
    jvm 调优,看要怎么细致地调优了,太细致的话,人力成本就上去了,所以一般就调个堆栈内存和 gc 的一些参数,通过加机器能够解决的还是通过加机器解决好了。数据库调优,如果是 sql 层的调优,很简单,收益大,值得一做,数据库配置上的,没做过,不懂
    oa414
        26
    oa414  
       2016-12-26 15:42:29 +08:00
    换工作面试的时候...

    开发的时候,做应用层很少碰到数据库“调优”,更多时候只是按照正确的方法去做或者去改,比如把查询写对而不是一堆 N + 1 Query ,加正确合适的索引,把一些复杂统计操作从应用层迁移到数据库层实现。
    joyee
        27
    joyee  
       2016-12-27 00:27:12 +08:00   1
    @q397064399 这年头有认(na)真(qian)做的 GC 基本都有避免 stop-the-world 的方法,有的能做到 incremental (把暂停分割成一点点一点点),有的能做到 concurrent (几乎不需要暂停),没有 bug 的状况下这些 GC 暂停时间肯定不是随着堆大小 O(n) 的,做得好基本都控制在几十或者几 ms 内……当然这个是有代价的,一般相比起完全的 stop-the-world 回收都会有一定的滞后,换句话说就是牺牲了 GC 的吞吐量( thoroughput )来换取低延时( latency )……

    另外这些 GC 大部分就算不开源起码也会发发论文的……不至于黑盒子……
    buliugu
        28
    buliugu  
       2016-12-27 00:43:05 +08:00
    @joyee azul 家的 Zing JVM ,在 TB 级内存上超低延迟, GC 用的是黑科技版的 C4 , 21L 的链接就是论文
    joyee
        29
    joyee  
       2016-12-27 00:55:07 +08:00
    @q397064399 至于怎么避免 stop-the-world ,最流行的就是各种 barrier + safepoint 检查来为 incremental / concurrent GC 提供保障了……有的是 read barrier 有的是 write barrier 有的都用(楼上的 azul 论文就都用),只要能想办法保证回收的时候不碰活的内存就行……
    joyee
        30
    joyee  
       2016-12-27 01:05:59 +08:00
    @buliugu 嗯但是他们家的 GC 要达到最好的效果需要用他们家的 CPU ……( read barrier 需要硬件支持才能做的好)
    skywayman
        31
    skywayman  
       2016-12-27 12:10:21 +08:00
    jvm 调优少,内存调整首当其冲...
    数据库调优是时时刻刻,因为一句 SQL 就能把数据库搞完蛋...
    buliugu
        32
    buliugu  
       2016-12-28 18:47:06 +08:00
    @joyee 是啊,但是 azul 家的客户很多都是墙街大佬,那只是小钱
    Gimlyu
        33
    Gimlyu  
       2016-12-29 17:50:59 +08:00
    作为一个 Javaer ,都应该懂得这些,基本技能。 另外,谁来做这个事情,显得不重要了,重要的是有人做。做了的要比不做的收获多。。。这是个 “ You can you up ” 的时代。
    clearbug
        34
    clearbug  
       2016-12-31 16:47:23 +08:00
    看了几章《深入理解 Java 虚拟机》,然后是一头雾水。。感觉根本就不是我这种还未入门的小白该看的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6028 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:14 PVG 14:14 LAX 23:14 JFK 02:14
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86