现在手头负责的单体项目是 15-20 秒左右, 有点影响自己的写代码节奏。。加一些启动参数能达到 10-12 秒,感觉变化不大,如果能在 5 秒内启动该多好。
之前待过的公司也都是单体 Java
项目,启动速度慢的能达到 1 分钟, 大家现在手头的项目启动速度都是什么级别的呢? 有没有影响到你们的思维节奏?
补充一下,有人可能之前没想过去优化 Spring 项目的启动速度。 至少有几个启动参数是效果非常好的, 比如
-XX:TieredStopAtLevel=1 -Xmx1024M -Xms1024m -noverify
参考:
1 yitingbai 2021-06-22 14:27:10 +08:00 用到的东西多了启动肯定慢啊, 如果有条件可以把项目分成几个模块, 分别开发分别调试 |
![]() | 3 KagurazakaNyaa 2021-06-22 14:37:18 +08:00 ![]() 拆成不同的组件,写好 CI,提交的时候自动 rolling update,这样就方便了 |
![]() | 4 pmispig 2021-06-22 14:39:40 +08:00 快的 60 秒,慢的 180 秒。。。你这 15 秒超神 |
5 peyppicp 2021-06-22 14:41:10 +08:00 golang 项目,2s |
6 cslive 2021-06-22 14:42:19 +08:00 配置垃圾,2 分钟起不起来 |
8 kwanzaa 2021-06-22 14:44:53 +08:00 故意放慢速度来打印 log 提供仪式感,不然裸载 2s 。 |
![]() | 10 zen1 2021-06-22 14:55:17 +08:00 本地最少 2min+ |
11 wwwz 2021-06-22 14:55:18 +08:00 慢啊,java 用 jrebel 热部署,有的时候还是需要重启 |
![]() | 12 Tink PRO ![]() 纠结这个感觉意义不大啊 |
![]() | 13 zzzmh 2021-06-22 15:00:59 +08:00 ![]() 影响思路具体如何影响,是每次写完调试,重启项目,慢? 感觉我不会那么频繁遇到需要重启的情况,写完一套逻辑,重启一次,一天也就十来次。 另外解决思路很简单啊,自己买个 amd 5800h 芯的本子,刷 linux 系统,不管重启还是编译都快到赏心悦目 |
![]() | 15 pkoukk 2021-06-22 15:06:38 +08:00 2s 左右? 现在写 tdd,新代码 cover 的差不多了才会启项目搞集成测试,启不了几次 |
![]() | 16 wr516516 2021-06-22 15:11:38 +08:00 好奇你加的什么启动参数 |
![]() | 18 szq8014 OP |
![]() | 19 reeco 2021-06-22 15:13:05 +08:00 via iPhone 60w 行代码,编译 5 分钟,启动 15 分钟 |
![]() | 20 L5tEU4WX072p5P42 2021-06-22 15:15:35 +08:00 via iPhone 35 分钟 |
![]() | 21 wxw752 2021-06-22 15:23:56 +08:00 ![]() 带薪启动,不要在意速度。正好可以去喝一杯咖啡 |
![]() | 22 janda 2021-06-22 15:39:39 +08:00 junit 单元测试 |
![]() | 24 NUT 2021-06-22 15:46:09 +08:00 这个问题核心是在于,如何快速 debug 吧。 想好逻辑,用 TDD 减少 debug 次数,debug 很费时间,我认为如何降低 debug 次数,比考虑项目启动优化,要有意义。 俗称 脑子跑代码。。。 各种设计原则用一用,什么单一原则,开闭等等。 如果对项目启动有要求,差那几秒没啥意义,现在都是容器化时代了,蓝绿红黑,随便搞搞就解决了。 |
![]() | 25 dream10201 2021-06-22 15:51:01 +08:00 在主程序的第一句:print("启动成功") |
![]() | 26 byte10 2021-06-22 15:52:53 +08:00 |
27 hsuvee 2021-06-22 16:01:47 +08:00 Java 曾有一个 20 分钟 |
28 yuancoder 2021-06-22 16:02:10 +08:00 php 一秒内 |
30 yeqizhang 2021-06-22 16:17:06 +08:00 via Android 启动几分钟,编译十分钟…… |
32 xloger 2021-06-22 16:23:59 +08:00 Android 项目,冷启动要 2 分多钟,打一个 release 包要 6 分钟。时常吐槽说等编译的时间已经超过我 debug 的时间了。耗时分析有一半时间是在 kotlin 编译上,为此还看了下别人的优化方案: https://juejin.cn/post/6854573211548385294 看完放弃自己优化的念头了。我需要公司配个更好的 CPU ...... |
![]() | 33 Leonard 2021-06-22 16:35:25 +08:00 公司抠,电脑配置不行,慢就慢呗,反正我按点下班,慢浪费的也不是我的时间 |
![]() | 34 otakustay 2021-06-22 16:48:30 +08:00 冷启动 3 分钟左右,有缓存的热启动 5 秒左右,热更新几乎秒完成 |
![]() | 35 HDMItoDP 2021-06-22 16:55:18 +08:00 300 多秒 |
![]() | 36 Junzhou 2021-06-22 17:05:00 +08:00 i7-7700 14s,M1 8s |
![]() | 37 nxforce 2021-06-22 17:18:28 +08:00 这个没有固定指标的吧? 同一个项目,有人 10 核 5G 主频,64G 内存随便开。 有人双核赛扬 8g 内存卡半天。。。 |
![]() | 38 sprite82 2021-06-22 17:29:24 +08:00 i5 7500 16G 内存 启动 15s 左右,但是我一天启动次数不超过 10 次 |
39 polo3584 2021-06-22 17:36:50 +08:00 最长的时候 500 多秒,后面通过一些注释终于降到了 150 秒内。 |
![]() | 40 Greatshu 2021-06-22 17:37:23 +08:00 10 分钟,刚好够去一次厕所 |
![]() | 41 nxcdJaNnmyF9O90X 2021-06-22 17:39:12 +08:00 go 的编译速度快 |
![]() | 42 bghtyu 2021-06-22 17:51:00 +08:00 go 启动很快,但是编译也挺慢的 |
![]() | 43 zhanggg 2021-06-22 17:51:03 +08:00 单体还好,最多几分钟,全新起一套完整服务要超 24 小时 |
![]() | 44 hapiman 2021-06-22 18:01:30 +08:00 用 Go,5 秒内启动 |
46 gtx990 2021-06-22 18:35:28 +08:00 via Android Java guice 启动倒是很快,几秒就行 编译,docker 打包要几分钟 |
![]() | 47 inhzus 2021-06-22 18:38:39 +08:00 via iPhone ![]() 项目本地启动不起来,环境上部署一下五分钟过去了。调试绝大多数靠单测,定位问题用 arthas |
![]() | 48 ysicing 2021-06-22 18:42:09 +08:00 Go 启动 2s,编译 10s 左右 |
![]() | 49 heheda11 2021-06-22 19:55:44 +08:00 Python fastApi 0.1s ~ |
![]() | 50 lixingjun 2021-06-22 20:20:58 +08:00 nodejs 1.5 秒,不过这样比较似乎意义不大 |
51 ConfusedBiscuit 2021-06-22 20:48:19 +08:00 巨无霸 Java 项目,IDEA 导入一次 20 分钟+,启动一次 5 分钟+,打包 1.5GB |
![]() | 52 3dwelcome 2021-06-22 20:49:58 +08:00 ![]() @xloger "打一个 release 包要 6 分钟" apk 打包有一些时间是用在压缩 asset 上,apk 的本质是 zip,每个文件都是单独压缩的,如果文件没有变,可以直接复用上一次压缩结果(前提是要保留上一次的压缩包作为对比对象) 这样速度就很快了。 |
![]() | 53 akira 2021-06-22 22:28:12 +08:00 java 的项目啊。。分钟级别都是能接受的 |
![]() | 54 HunterPan 2021-06-22 22:36:50 +08:00 via iPhone 1 分钟内可接受,自己的项目一般 30s 内 |
![]() | 55 wdlth 2021-06-22 22:45:56 +08:00 20 秒左右吧 |
![]() | 56 lzfnb 2021-06-23 01:08:41 +08:00 ![]() 要那么快干啥,启动时间越长划水时间越久 |
![]() | 57 imbushuo 2021-06-23 05:46:09 +08:00 warmup 两小时…… |
![]() | 58 eudore 2021-06-23 08:43:37 +08:00 go 直接启动 1 秒,编译启动 5 秒内。 |
![]() | 59 zmxnv123 2021-06-23 08:47:21 +08:00 via iPhone 春节的时候做主站的项目,编译十分钟启动十分钟。 |
![]() | 60 privil 2021-06-23 09:05:52 +08:00 java 项目从 20 s 到 120s,话说用 openj9 启动会快很多。 |
![]() | 61 free9fw 2021-06-23 09:08:21 +08:00 30w 行代码大概 85s |
![]() | 64 xingguang 2021-06-23 09:23:30 +08:00 18 年的时候接收的一个项目还用的 webpack1,启动一次五分钟,在忍了一年以后我升级了,启动速度不到一分钟 |
65 myd 2021-06-23 09:28:18 +08:00 php 不需要启动 |
![]() | 66 janxin 2021-06-23 09:39:21 +08:00 听上去是个 Spring 项目... |
67 yazinnnn 2021-06-23 10:03:28 +08:00 从打印第一行日志到处理第一个请求 1.5s,vertx+kotlin,不过这有什么意义呢.... 用 spring 的话肯定慢阿,因为 spring 慢就喷 java 烂未免也太狭隘了 |
69 Tinyang 2021-06-23 10:11:37 +08:00 3 分钟 |
![]() | 70 wangsongyan 2021-06-23 10:31:30 +08:00 @zzzmh #13 请问 linux 系统有推荐的吗? |
![]() | 71 chainchan 2021-06-23 10:54:15 +08:00 20 分钟 |
![]() | 72 byte10 2021-06-23 11:05:04 +08:00 @chenqh 我觉得 nodejs 写起来方便,写的外包项目,写的小工具,go 也不错啊,可以编译成可执行文件,也是很舒服的,写点小工具方便,安卓,macos,ios 那些都可以直接跑 |
74 Cbdy 2021-06-23 11:15:48 +08:00 via Android 秒级 |
![]() | 75 zzzmh 2021-06-23 11:30:47 +08:00 @wangsongyan 看水平,我是半吊子,我就省心用 ubuntu,因为新版 amd 的核显驱动老出问题,就 ubuntu+5.10 内核最省心。。。否则我可能会首选 deepin,因为 deepin 带的微信什么的至少是调试好的,可以免去我自己调试。。。。然后如果是大佬,推荐 arch debian fedora manjaro,这种我只敢在虚拟机里玩,笔记本玩过一次 manjaro,从入门到重装系统,只花了一个月 |
![]() | 76 HannibaI 2021-06-23 12:38:55 +08:00 150w 行 C++,编译 5 分钟,启动 4-5s 吧 |
![]() | 78 xiluo 2021-06-23 13:24:17 +08:00 尝试换到 Graalvm 试试呢,启动速度提高 50 倍 |
79 luckyc 2021-06-23 13:31:13 +08:00 python flask <1s |
![]() | 80 thetbw 2021-06-23 14:55:00 +08:00 大概 27 分钟吧 |
82 x940727 2021-06-23 15:02:27 +08:00 @byte10 Go 的编译期没有任何优化的,而且 Go 的语法对编译器更友好……Java 也有不优化的编译器,AOT 的速度其实也勉勉强强,主要有反射会影响静态编译。 |
![]() | 83 szq8014 OP @byte10 Java 也可以随时写随时跑, 想写启动快的 Java 可以尝试 quarkus, 你要有勇于离开 Spring 的魄力才行, 当然现在 spring native 也在迭代中。 |
84 chihiro2014 2021-06-23 16:12:34 +08:00 140s-200s 左右? |
![]() | 85 wanguorui123 2021-06-23 16:19:45 +08:00 秒起 |
![]() | 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 倍速度提升。 |
![]() | 87 284716337 2021-06-23 16:44:11 +08:00 前台 war,在服务器上大概 5 分钟, |
![]() | 88 FlexGap 2021-06-23 19:36:42 +08:00 golang 的项目,大概七八秒钟 |
89 MithrilCookie 2021-06-23 19:46:00 +08:00 借楼问一下,生产环境 PASS(公司自建 PASS)下容器的启动速度远远比不上开发机(本人用 m1 mac),这种情况正常吗? SpringBoot 的单体应用,本地十几秒,生产上两三分钟(容器是 4 核 8g 的),感觉跟树莓派是一个级别的 |
90 ylsc633 2021-06-23 19:51:37 +08:00 作为一个刚刚从 Golang 转到 java 的开发者来说 java 一启动.. 真的慢 问题是 java 项目是个新写的项目 代码估计就几万行吧 |
![]() | 91 ychost 2021-06-23 21:09:12 +08:00 5 分钟 |
![]() | 92 mreasonyang 2021-06-24 02:02:44 +08:00 via iPhone 怎么定义启动速度快慢呢?是以 JVM 完成启动和初始编译为准,还是以服务 ready 可供调用为准?如果是前者,那可以考虑楼上的建议。如果是后者,那么只要是用了连接池的项目都不会快,同时这种情况下与长尾的建连相比,JVM 相关的启动耗时可以忽略不计了 |
![]() | 93 Ailoli 2021-06-24 08:42:22 +08:00 vue 1 分钟+- |
94 johnniang 2021-06-24 08:53:55 +08:00 via Android |
95 yizmaoaa 2021-06-24 09:43:37 +08:00 Quarkus 2 秒。楼上有人提 Spring Native 。应用场景不一样。Graalvm 打包后的 native-image 是秒起,但是打包速度是很慢的。用都没用过的东西就别瞎推荐了- |
![]() | 96 telan233 2021-06-24 10:33:19 +08:00 java 编译+启动 4 分钟 |
![]() | 97 samin 2021-06-24 14:25:18 +08:00 @pkoukk 请问贵司是多大规模的厂子 ? 我们团队最近也在想着进军 TDD,就拿这调试来说就已经是个非常大的优势,交流下经验 |
98 laobodslr 2021-06-25 18:59:09 +08:00 200S 左右 |
![]() | 99 starxg 2021-06-29 18:43:26 +08:00 ![]() 启动时加上-Dspring.main.lazy-initialization=true 或者在配置文件里加上这句话。 开启全局懒加载,启动速度非常快! 但是快也是有代价的,参考这里: https://blog.csdn.net/peterwanghao/article/details/95617046 |
![]() | 100 Dreamerwwr 2022-07-08 12:23:10 +08:00 @polo3584 用的什么注释? |