现在手头负责的单体项目是 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
XiLingHost 2021-06-22 14:37:18 +08:00 1
拆成不同的组件,写好 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 2021-06-22 14:57:59 +08:00 via Android 1
纠结这个感觉意义不大啊
|
13
zzzmh 2021-06-22 15:00:59 +08:00 2
影响思路具体如何影响,是每次写完调试,重启项目,慢?
感觉我不会那么频繁遇到需要重启的情况,写完一套逻辑,重启一次,一天也就十来次。 另外解决思路很简单啊,自己买个 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
Mogamigawa 2021-06-22 15:15:35 +08:00 via iPhone
35 分钟
|
21
wxw752 2021-06-22 15:23:56 +08:00 9
带薪启动,不要在意速度。正好可以去喝一杯咖啡
|
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
joyhub2140 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
xingjue 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 1
项目本地启动不起来,环境上部署一下五分钟过去了。调试绝大多数靠单测,定位问题用 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 1
@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 1
要那么快干啥,启动时间越长划水时间越久
|
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
l4ever 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 1
启动时加上-Dspring.main.lazy-initialization=true 或者在配置文件里加上这句话。
开启全局懒加载,启动速度非常快! 但是快也是有代价的,参考这里: https://blog.csdn.net/peterwanghao/article/details/95617046 |
100
Dreamerwwr 2022-07-08 12:23:10 +08:00
@polo3584 用的什么注释?
|