启动时通过调大 CPU 核数加速启动是否有坑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
linyimin520812
V2EX    程序员

启动时通过调大 CPU 核数加速启动是否有坑

  •  
  •   linyimin520812 2023-10-13 10:27:20 +08:00 2595 次点击
    这是一个创建于 730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到一个很有创意的应用启动加速文章:

    https://piotrminkowski.com/2023/08/22/resize-cpu-limit-to-speed-up-java-startup-on-kubernetes/

    核心思路就是在启动时调大 CPU 核数,启动完成后再调回原来的 CPU 核数

    看评论,这种方式对于 Java 应用,可能会对 GC 有影响。不知道有没有人在生产环境使用过这种启动加速方式,会不会有坑。

    24 条回复    2023-10-14 16:17:37 +08:00
    julyclyde
        1
    julyclyde  
       2023-10-13 10:57:32 +08:00
    你们 Java 应用一般都是长时间运行的
    启动阶段占比极低
    研究这个没啥意义
    rrfeng
        2
    rrfeng  
       2023-10-13 11:08:23 +08:00
    哈哈哈 java 的启动时间真的一言难尽
    rrfeng
        3
    rrfeng  
       2023-10-13 11:08:39 +08:00   2
    依稀记得有个帖子优化 java 应用启动时间,被好多人喷
    linyimin520812
        4
    linyimin520812  
    OP
       2023-10-13 11:13:21 +08:00
    @julyclyde 研究的过程还是很有意思的,接触到了很多新的概念
    linyimin520812
        5
    linyimin520812  
    OP
       2023-10-13 11:13:40 +08:00
    @rrfeng #3 这个帖子好像也是我发的
    julyclyde
        6
    julyclyde  
       2023-10-13 11:14:57 +08:00
    @rrfeng 我一只觉得启动慢都是框架的 class 层数太多导致的
    其实也没干多少实事吧

    但是因为是层叠结构,加 cpu 核能起到什么效果吗?
    flynnlemon
        7
    flynnlemon  
       2023-10-13 11:18:54 +08:00   1
    我觉得这个是需要看具体的 Java 应用,如果某应用启动的时候并发操作多,可被多核优化,那么效果就明显,否则效果就不太好。他的对比验证选了 0.5 核做对比就比较鸡贼,2 核启动花了 10-15s ,0.5 核启动花了 40s ,0.5 核的情况下单核心的时间片都被分走一半了,启动效果打折是很明显的。
    EeveeRibbon
        8
    EeveeRibbon  
       2023-10-13 11:20:56 +08:00
    我好像听说有的手机厂商对微信有优化,点开微信就在 CPU 上做手脚,让系统“看起来”更流畅
    linyimin520812
        9
    linyimin520812  
    OP
       2023-10-13 11:21:41 +08:00
    @julyclyde #6 是的,特别是 spring 框架下,启动过程是单线程的,这样添加 CPU 核数可能作用不大,但是可以通过一些手段,将耗时的 Bean 的初始化方法异步化,这样添加 CPU 核数可能就有用了
    julyclyde
        10
    julyclyde  
       2023-10-13 11:24:32 +08:00
    @linyimin520812 初始化方法异步化,是不是得修改源代码啊?似乎并不是直接加核就能生效的吧?
    chendy
        11
    chendy  
       2023-10-13 11:26:26 +08:00   1
    思路很有意思但是感觉意义不大,因为启动速度慢一般不是因为资源不够而是资源利用率不高
    启动慢的一般是要加载的 class 多,要扫描的包多,但是印象里这玩意是单线程的,加核心数没用
    启动特别慢的一般是启动过程中要查数据库之类的,加核心数也没用
    所以,这个操作对于启动过程中会用多线程的应用有用,另外可能会影响 gc 的一些参数(收集器线程数啥的)
    linyimin520812
        12
    linyimin520812  
    OP
       2023-10-13 11:26:46 +08:00
    @julyclyde #10 这个我之前实现过,就是需要引入个 jar 包,通过动态代理的方式,将初始化方法丢到线程池中,最后等待启动完成
    julyclyde
        13
    julyclyde  
       2023-10-13 11:27:24 +08:00
    @linyimin520812 厉害了
    linyimin520812
        14
    linyimin520812  
    OP
       2023-10-13 11:28:05 +08:00
    @chendy 是的,刚看到这种方法的时候,觉得很有创意
    linyimin520812
        15
    linyimin520812  
    OP
       2023-10-13 11:35:28 +08:00
    @chendy 有一个点就是,Java 应用启动后一般会有一个预热过程,这个过程添加核心数会很有用
    linyimin520812
        16
    linyimin520812  
    OP
       2023-10-13 11:43:39 +08:00
    @qiaofanxing 哈哈哈,我还看到过反向操作的,不知道真假,就是点开其他 app 的时候,自己的 app 就疯狂占用 CPU ,让别人的 app 操作卡顿
    reeco
        17
    reeco  
       2023-10-13 12:30:37 +08:00
    对于 spring 这种主线程启动的服务来说,没啥用
    learningman
        18
    learningman  
       2023-10-13 12:36:13 +08:00
    @qiaofanxing 确实有,而且已经标准化了
    https://github.com/Tencent/Hardcoder
    wildec
        19
    wildec  
       2023-10-13 12:52:42 +08:00   1
    Android 上面超级应用微信、相机等加速启动都是通过这种方式来的
    VYSE
        20
    VYSE  
       2023-10-13 15:20:23 +08:00
    Java 搞个常驻, 类似 Zygote 或者 Chrome, 就不用担心启动时间的问题了
    helenfrank
        21
    helenfrank  
       2023-10-13 15:53:26 +08:00
    这个看起来还行,或者给个参数 kubelet 调用高性能节点快速启动应用, 然后滚动到正常节点?
    yinmin
        22
    yinmin  
       2023-10-14 00:19:51 +08:00 via Android
    java 要搞常驻的。隔壁 python 和 node.js 的容器冷启动才 0.3 秒,没法比啊。
    julyclyde
        23
    julyclyde  
       2023-10-14 12:48:20 +08:00
    @helenfrank 滚动到正常节点不是另外启动一个再关闭旧的么
    notwaste
        24
    notwaste  
       2023-10-14 16:17:37 +08:00
    Java 好像没这个必要吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2258 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:05 PVG 00:05 LAX 09:05 JFK 12:05
    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