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

你们的项目启动时间是几秒?

  •  2
     
  •   szq8014 · 168 天前 · 7909 次点击
    这是一个创建于 168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在手头负责的单体项目是 15-20 秒左右, 有点影响自己的写代码节奏。。加一些启动参数能达到 10-12 秒,感觉变化不大,如果能在 5 秒内启动该多好。
    之前待过的公司也都是单体 Java 项目,启动速度慢的能达到 1 分钟, 大家现在手头的项目启动速度都是什么级别的呢? 有没有影响到你们的思维节奏?

    第 1 条附言  ·  167 天前

    补充一下,有人可能之前没想过去优化 Spring 项目的启动速度。 至少有几个启动参数是效果非常好的, 比如

    -XX:TieredStopAtLevel=1 -Xmx1024M -Xms1024m -noverify 
    

    jvm-args.png

    参考:

    https://stackoverflow.com/a/49663075

    https://github.com/dsyer/spring-boot-startup-bench

    99 条回复    2021-06-29 18:43:26 +08:00
    yitingbai
        1
    yitingbai  
       168 天前
    用到的东西多了启动肯定慢啊, 如果有条件可以把项目分成几个模块, 分别开发分别调试
    szq8014
        2
    szq8014  
    OP
       168 天前
    @yitingbai 现在也在纠结这个事,不知道服务化拆分后收益大不大
    XiLingHost
        3
    XiLingHost  
       168 天前   ❤️ 1
    拆成不同的组件,写好 CI,提交的时候自动 rolling update,这样就方便了
    pmispig
        4
    pmispig  
       168 天前
    快的 60 秒,慢的 180 秒。。。你这 15 秒超神
    peyppicp
        5
    peyppicp  
       168 天前
    golang 项目,2s
    cslive
        6
    cslive  
       168 天前
    配置垃圾,2 分钟起不起来
    szq8014
        7
    szq8014  
    OP
       168 天前
    @pmispig 那开发时间岂不是有很多浪费在了启动上?
    kwanzaa
        8
    kwanzaa  
       168 天前
    故意放慢速度来打印 log 提供仪式感,不然裸载 2s 。
    ericgui
        9
    ericgui  
       168 天前
    @szq8014 不大
    zen1
        10
    zen1  
       168 天前
    本地最少 2min+
    wwwz
        11
    wwwz  
       168 天前
    慢啊,java 用 jrebel 热部署,有的时候还是需要重启
    Tink
        12
    Tink  
       168 天前 via Android   ❤️ 1
    纠结这个感觉意义不大啊
    zzzmh
        13
    zzzmh  
       168 天前   ❤️ 2
    影响思路具体如何影响,是每次写完调试,重启项目,慢?
    感觉我不会那么频繁遇到需要重启的情况,写完一套逻辑,重启一次,一天也就十来次。
    另外解决思路很简单啊,自己买个 amd 5800h 芯的本子,刷 linux 系统,不管重启还是编译都快到赏心悦目
    chenqh
        14
    chenqh  
       168 天前
    @zzzmh 10 来此重启,我 2 分钟就用完了
    pkoukk
        15
    pkoukk  
       168 天前
    2s 左右?
    现在写 tdd,新代码 cover 的差不多了才会启项目搞集成测试,启不了几次
    wr516516
        16
    wr516516  
       168 天前
    好奇你加的什么启动参数
    szq8014
        17
    szq8014  
    OP
       168 天前
    @kwanzaa 优秀
    szq8014
        18
    szq8014  
    OP
       168 天前
    @wr516516 网上能搜到,是 SpringBoot 启动优化的

    具体参数是 `-XX:TieredStopAtLevel=1 -Xmx1024M -Xms1024m -noverify `
    reeco
        19
    reeco  
       168 天前 via iPhone
    60w 行代码,编译 5 分钟,启动 15 分钟
    Mogamigawa
        20
    Mogamigawa  
       168 天前 via iPhone
    35 分钟
    wxw752
        21
    wxw752  
       168 天前   ❤️ 9
    带薪启动,不要在意速度。正好可以去喝一杯咖啡
    janda
        22
    janda  
       168 天前
    junit 单元测试
    szq8014
        23
    szq8014  
    OP
       168 天前
    @reeco 厉害了..
    NUT
        24
    NUT  
       168 天前
    这个问题核心是在于,如何快速 debug 吧。

    想好逻辑,用 TDD 减少 debug 次数,debug 很费时间,我认为如何降低 debug 次数,比考虑项目启动优化,要有意义。 俗称 脑子跑代码。。。

    各种设计原则用一用,什么单一原则,开闭等等。

    如果对项目启动有要求,差那几秒没啥意义,现在都是容器化时代了,蓝绿红黑,随便搞搞就解决了。
    dream10201
        25
    dream10201  
       168 天前
    在主程序的第一句:print("启动成功")
    byte10
        26
    byte10  
       168 天前
    @reeco 牛到不行。我们那些狮山项目 I7-10 代表压 U 启动 45S,m1 启动 30 秒,M1 是真的无脑强。
    @peyppicp (⊙o⊙)… go 怎么那么厉害。java 是真的烂,go,nodejs,python,这些玩意是真的舒服。随时写,随时跑
    hsuvee
        27
    hsuvee  
       168 天前
    Java 曾有一个 20 分钟
    yuancoder
        28
    yuancoder  
       168 天前
    php 一秒内
    szq8014
        29
    szq8014  
    OP
       168 天前
    @ericgui 哈哈哈哈。我看你发了一个屎山的,看来经历过
    yeqizhang
        30
    yeqizhang  
       168 天前 via Android
    启动几分钟,编译十分钟……
    chenqh
        31
    chenqh  
       168 天前
    @byte10 golang 是启动快,但是写的时候想死
    xloger
        32
    xloger  
       168 天前
    Android 项目,冷启动要 2 分多钟,打一个 release 包要 6 分钟。时常吐槽说等编译的时间已经超过我 debug 的时间了。耗时分析有一半时间是在 kotlin 编译上,为此还看了下别人的优化方案: https://juejin.cn/post/6854573211548385294
    看完放弃自己优化的念头了。我需要公司配个更好的 CPU ......
    Leonard
        33
    Leonard  
       168 天前
    公司抠,电脑配置不行,慢就慢呗,反正我按点下班,慢浪费的也不是我的时间
    otakustay
        34
    otakustay  
       168 天前
    冷启动 3 分钟左右,有缓存的热启动 5 秒左右,热更新几乎秒完成
    HDMItoDP
        35
    HDMItoDP  
       168 天前
    300 多秒
    Junzhou
        36
    Junzhou  
       168 天前
    i7-7700 14s,M1 8s
    joyhub2140
        37
    joyhub2140  
       168 天前
    这个没有固定指标的吧?

    同一个项目,有人 10 核 5G 主频,64G 内存随便开。
    有人双核赛扬 8g 内存卡半天。。。
    sprite82
        38
    sprite82  
       168 天前
    i5 7500 16G 内存 启动 15s 左右,但是我一天启动次数不超过 10 次
    polo3584
        39
    polo3584  
       168 天前
    最长的时候 500 多秒,后面通过一些注释终于降到了 150 秒内。
    Greatshu
        40
    Greatshu  
       168 天前
    10 分钟,刚好够去一次厕所
    xingjue
        41
    xingjue  
       168 天前
    go 的编译速度快
    bghtyu
        42
    bghtyu  
       168 天前
    go 启动很快,但是编译也挺慢的
    zhanggg
        43
    zhanggg  
       168 天前
    单体还好,最多几分钟,全新起一套完整服务要超 24 小时
    hapiman
        44
    hapiman  
       168 天前
    用 Go,5 秒内启动
    crclz
        45
    crclz  
       168 天前
    C#( Asp.Net )启动速度非常快,1s
    gtx990
        46
    gtx990  
       168 天前 via Android
    Java guice
    启动倒是很快,几秒就行
    编译,docker 打包要几分钟
    inhzus
        47
    inhzus  
       168 天前 via iPhone   ❤️ 1
    项目本地启动不起来,环境上部署一下五分钟过去了。调试绝大多数靠单测,定位问题用 arthas
    ysicing
        48
    ysicing  
       168 天前
    Go 启动 2s,编译 10s 左右
    heheda11
        49
    heheda11  
       168 天前
    Python fastApi 0.1s ~
    lixingjun
        50
    lixingjun  
       168 天前
    nodejs 1.5 秒,不过这样比较似乎意义不大
    ConfusedBiscuit
        51
    ConfusedBiscuit  
       168 天前
    巨无霸 Java 项目,IDEA 导入一次 20 分钟+,启动一次 5 分钟+,打包 1.5GB
    3dwelcome
        52
    3dwelcome  
       168 天前   ❤️ 1
    @xloger "打一个 release 包要 6 分钟"

    apk 打包有一些时间是用在压缩 asset 上,apk 的本质是 zip,每个文件都是单独压缩的,如果文件没有变,可以直接复用上一次压缩结果(前提是要保留上一次的压缩包作为对比对象)

    这样速度就很快了。
    akira
        53
    akira  
       168 天前
    java 的项目啊。。分钟级别都是能接受的
    HunterPan
        54
    HunterPan  
       168 天前 via iPhone
    1 分钟内可接受,自己的项目一般 30s 内
    wdlth
        55
    wdlth  
       167 天前
    20 秒左右吧
    lzfnb
        56
    lzfnb  
       167 天前   ❤️ 1
    要那么快干啥,启动时间越长划水时间越久
    imbushuo
        57
    imbushuo  
       167 天前
    warmup 两小时……
    eudore
        58
    eudore  
       167 天前
    go 直接启动 1 秒,编译启动 5 秒内。
    zmxnv123
        59
    zmxnv123  
       167 天前 via iPhone
    春节的时候做主站的项目,编译十分钟启动十分钟。
    privil
        60
    privil  
       167 天前
    java 项目从 20 s 到 120s,话说用 openj9 启动会快很多。
    free9fw
        61
    free9fw  
       167 天前
    30w 行代码大概 85s
    szq8014
        62
    szq8014  
    OP
       167 天前
    @privil 还有这种事? 有时间试一下
    szq8014
        63
    szq8014  
    OP
       167 天前
    @gtx990 我们这里没法推广 guice,大家都不会用
    xingguang
        64
    xingguang  
       167 天前
    18 年的时候接收的一个项目还用的 webpack1,启动一次五分钟,在忍了一年以后我升级了,启动速度不到一分钟
    myd
        65
    myd  
       167 天前
    php 不需要启动
    janxin
        66
    janxin  
       167 天前
    听上去是个 Spring 项目...
    yazinnnn
        67
    yazinnnn  
       167 天前
    从打印第一行日志到处理第一个请求 1.5s,vertx+kotlin,不过这有什么意义呢....

    用 spring 的话肯定慢阿,因为 spring 慢就喷 java 烂未免也太狭隘了
    Warder
        68
    Warder  
       167 天前
    @xingguang 能忍一年,也是个 nb
    Tinyang
        69
    Tinyang  
       167 天前
    3 分钟
    wangsongyan
        70
    wangsongyan  
       167 天前
    @zzzmh #13 请问 linux 系统有推荐的吗?
    chainchan
        71
    chainchan  
       167 天前
    20 分钟
    byte10
        72
    byte10  
       167 天前
    @chenqh 我觉得 nodejs 写起来方便,写的外包项目,写的小工具,go 也不错啊,可以编译成可执行文件,也是很舒服的,写点小工具方便,安卓,macos,ios 那些都可以直接跑
    wr516516
        73
    wr516516  
       167 天前
    @szq8014 多谢分享,又学到之前不了解的知识
    Cbdy
        74
    Cbdy  
       167 天前 via Android
    秒级
    zzzmh
        75
    zzzmh  
       167 天前
    @wangsongyan 看水平,我是半吊子,我就省心用 ubuntu,因为新版 amd 的核显驱动老出问题,就 ubuntu+5.10 内核最省心。。。否则我可能会首选 deepin,因为 deepin 带的微信什么的至少是调试好的,可以免去我自己调试。。。。然后如果是大佬,推荐 arch debian fedora manjaro,这种我只敢在虚拟机里玩,笔记本玩过一次 manjaro,从入门到重装系统,只花了一个月
    HannibaI
        76
    HannibaI  
       167 天前
    150w 行 C++,编译 5 分钟,启动 4-5s 吧
    tomoya92
        77
    tomoya92  
       167 天前 via iPhone
    @pkoukk 什么是 tdd
    xiluo
        78
    xiluo  
       167 天前
    尝试换到 Graalvm 试试呢,启动速度提高 50 倍
    l4ever
        79
    l4ever  
       167 天前
    python flask
    <1s
    thetbw
        80
    thetbw  
       167 天前
    大概 27 分钟吧
    thetbw
        81
    thetbw  
       167 天前
    @thetbw 补充一下 ,java,spring,之前在处理依赖的时候堆栈溢出过几次
    x940727
        82
    x940727  
       167 天前
    @byte10 Go 的编译期没有任何优化的,而且 Go 的语法对编译器更友好……Java 也有不优化的编译器,AOT 的速度其实也勉勉强强,主要有反射会影响静态编译。
    szq8014
        83
    szq8014  
    OP
       167 天前
    @byte10 Java 也可以随时写随时跑, 想写启动快的 Java 可以尝试 quarkus, 你要有勇于离开 Spring 的魄力才行, 当然现在 spring native 也在迭代中。
    chihiro2014
        84
    chihiro2014  
       167 天前
    140s-200s 左右?
    wanguorui123
        85
    wanguorui123  
       167 天前
    秒起
    3dwelcome
        86
    3dwelcome  
       167 天前
    我其实挺好奇 chrome 开发组是怎么缩短启动时间的,我自己编译浏览器,一般启动至少要 5 分钟以上。

    因为 C++必须把无数.obj 文件链接成一个 exe,对于 chrome 这种巨无霸体量,这一步特别的费时间。

    然后我搜了一下谷歌,还真有 chrome.dll 编译优化,blog.llvm.org/2018/01/improving-link-time-on-windows-with.html

    诀窍就是换编译器,一开始是 MSVC,编译 chrome.dll 用时 507.17s 。换了 CLang 之后 34.76s ,10 倍速度提升。
    284716337
        87
    284716337  
       167 天前
    前台 war,在服务器上大概 5 分钟,😂
    FlexGap
        88
    FlexGap  
       167 天前
    golang 的项目,大概七八秒钟
    MithrilCookie
        89
    MithrilCookie  
       167 天前
    借楼问一下,生产环境 PASS(公司自建 PASS)下容器的启动速度远远比不上开发机(本人用 m1 mac),这种情况正常吗? SpringBoot 的单体应用,本地十几秒,生产上两三分钟(容器是 4 核 8g 的),感觉跟树莓派是一个级别的
    ylsc633
        90
    ylsc633  
       167 天前
    作为一个刚刚从 Golang 转到 java 的开发者来说

    java 一启动.. 真的慢

    问题是 java 项目是个新写的项目 代码估计就几万行吧
    ychost
        91
    ychost  
       167 天前
    5 分钟
    mreasonyang
        92
    mreasonyang  
       166 天前 via iPhone
    怎么定义启动速度快慢呢?是以 JVM 完成启动和初始编译为准,还是以服务 ready 可供调用为准?如果是前者,那可以考虑楼上的建议。如果是后者,那么只要是用了连接池的项目都不会快,同时这种情况下与长尾的建连相比,JVM 相关的启动耗时可以忽略不计了
    Ailoli
        93
    Ailoli  
       166 天前
    vue 1 分钟+-
    johnniang
        94
    johnniang  
       166 天前 via Android
    yizmaoaa
        95
    yizmaoaa  
       166 天前
    Quarkus 2 秒。楼上有人提 Spring Native 。应用场景不一样。Graalvm 打包后的 native-image 是秒起,但是打包速度是很慢的。用都没用过的东西就别瞎推荐了-
    telan233
        96
    telan233  
       166 天前
    java 编译+启动 4 分钟
    samin
        97
    samin  
       166 天前
    @pkoukk 请问贵司是多大规模的厂子 ? 我们团队最近也在想着进军 TDD,就拿这调试来说就已经是个非常大的优势,交流下经验
    laobodslr
        98
    laobodslr  
       165 天前
    200S 左右
    starxg
        99
    starxg  
       161 天前   ❤️ 1
    启动时加上-Dspring.main.lazy-initialization=true 或者在配置文件里加上这句话。

    开启全局懒加载,启动速度非常快!

    但是快也是有代价的,参考这里: https://blog.csdn.net/peterwanghao/article/details/95617046
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2521 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 14:45 · PVG 22:45 · LAX 06:45 · JFK 09:45
    ♥ Do have faith in what you're doing.