你们的项目启动时间是几秒? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
szq8014
V2EX    程序员

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

  •  3
     a href="Javascript:" Onclick="downVoteTopic(785066);" class="vote">
  •   szq8014 2021-06-22 14:24:31 +08:00 13849 次点击
    这是一个创建于 1579 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2021-06-23 15:31:47 +08:00

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

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

    jvm-args.png

    参考:

    https://stackoverflow.com/a/49663075

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

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

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

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

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

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

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

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

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

    用 spring 的话肯定慢阿,因为 spring 慢就喷 java 烂未免也太狭隘了
    Warder
        68
    Warder  
       2021-06-23 10:05:12 +08:00
    @xingguang 能忍一年,也是个 nb
    Tinyang
        69
    Tinyang  
       2021-06-23 10:11:37 +08:00
    3 分钟
    wangsongyan
        70
    wangsongyan  
       2021-06-23 10:31:30 +08:00
    @zzzmh #13 请问 linux 系统有推荐的吗?
    chainchan
        71
    chainchan  
       2021-06-23 10:54:15 +08:00
    20 分钟
    byte10
        72
    byte10  
       2021-06-23 11:05:04 +08:00
    @chenqh 我觉得 nodejs 写起来方便,写的外包项目,写的小工具,go 也不错啊,可以编译成可执行文件,也是很舒服的,写点小工具方便,安卓,macos,ios 那些都可以直接跑
    wr516516
        73
    wr516516  
       2021-06-23 11:10:12 +08:00
    @szq8014 多谢分享,又学到之前不了解的知识
    Cbdy
        74
    Cbdy  
       2021-06-23 11:15:48 +08:00 via Android
    秒级
    zzzmh
        75
    zzzmh  
       2021-06-23 11:30:47 +08:00
    @wangsongyan 看水平,我是半吊子,我就省心用 ubuntu,因为新版 amd 的核显驱动老出问题,就 ubuntu+5.10 内核最省心。。。否则我可能会首选 deepin,因为 deepin 带的微信什么的至少是调试好的,可以免去我自己调试。。。。然后如果是大佬,推荐 arch debian fedora manjaro,这种我只敢在虚拟机里玩,笔记本玩过一次 manjaro,从入门到重装系统,只花了一个月
    HannibaI
        76
    HannibaI  
       2021-06-23 12:38:55 +08:00
    150w 行 C++,编译 5 分钟,启动 4-5s 吧
    tomoya92
        77
    tomoya92  
       2021-06-23 13:15:08 +08:00 via iPhone
    @pkoukk 什么是 tdd
    xiluo
        78
    xiluo  
       2021-06-23 13:24:17 +08:00
    尝试换到 Graalvm 试试呢,启动速度提高 50 倍
    luckyc
        79
    luckyc  
       2021-06-23 13:31:13 +08:00
    python flask
    <1s
    thetbw
        80
    thetbw  
       2021-06-23 14:55:00 +08:00
    大概 27 分钟吧
    thetbw
        81
    thetbw  
       2021-06-23 14:56:08 +08:00
    @thetbw 补充一下 ,java,spring,之前在处理依赖的时候堆栈溢出过几次
    x940727
        82
    x940727  
       2021-06-23 15:02:27 +08:00
    @byte10 Go 的编译期没有任何优化的,而且 Go 的语法对编译器更友好……Java 也有不优化的编译器,AOT 的速度其实也勉勉强强,主要有反射会影响静态编译。
    szq8014
        83
    szq8014  
    OP
       2021-06-23 15:19:17 +08:00
    @byte10 Java 也可以随时写随时跑, 想写启动快的 Java 可以尝试 quarkus, 你要有勇于离开 Spring 的魄力才行, 当然现在 spring native 也在迭代中。
    chihiro2014
        84
    chihiro2014  
       2021-06-23 16:12:34 +08:00
    140s-200s 左右?
    wanguorui123
        85
    wanguorui123  
       2021-06-23 16:19:45 +08:00
    秒起
    3dwelcome
        86
    3dwelcome  
       2021-06-23 16:40:40 +08:00
    我其实挺好奇 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  
       2021-06-23 16:44:11 +08:00
    前台 war,在服务器上大概 5 分钟,
    FlexGap
        88
    FlexGap  
       2021-06-23 19:36:42 +08:00
    golang 的项目,大概七八秒钟
    MithrilCookie
        89
    MithrilCookie  
       2021-06-23 19:46:00 +08:00
    借楼问一下,生产环境 PASS(公司自建 PASS)下容器的启动速度远远比不上开发机(本人用 m1 mac),这种情况正常吗? SpringBoot 的单体应用,本地十几秒,生产上两三分钟(容器是 4 核 8g 的),感觉跟树莓派是一个级别的
    ylsc633
        90
    ylsc633  
       2021-06-23 19:51:37 +08:00
    作为一个刚刚从 Golang 转到 java 的开发者来说

    java 一启动.. 真的慢

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

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

    但是快也是有代价的,参考这里: https://blog.csdn.net/peterwanghao/article/details/95617046
    Dreamerwwr
        100
    Dreamerwwr  
       2022-07-08 12:23:10 +08:00
    @polo3584 用的什么注释?
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     981 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 18:56 PVG 02:56 LAX 11:56 JFK 14:56
    Do have faith in what you're doing.
    ubao msn 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