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

209 天前
 linyimin520812

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

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

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

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

1946 次点击
所在节点    程序员
24 条回复
julyclyde
209 天前
你们 Java 应用一般都是长时间运行的
启动阶段占比极低
研究这个没啥意义
rrfeng
209 天前
哈哈哈 java 的启动时间真的一言难尽
rrfeng
209 天前
依稀记得有个帖子优化 java 应用启动时间,被好多人喷
linyimin520812
209 天前
@julyclyde 研究的过程还是很有意思的,接触到了很多新的概念
linyimin520812
209 天前
@rrfeng #3 这个帖子好像也是我发的😂
julyclyde
209 天前
@rrfeng 我一只觉得启动慢都是框架的 class 层数太多导致的
其实也没干多少实事吧

但是因为是层叠结构,加 cpu 核能起到什么效果吗?
flynnlemon
209 天前
我觉得这个是需要看具体的 Java 应用,如果某应用启动的时候并发操作多,可被多核优化,那么效果就明显,否则效果就不太好。他的对比验证选了 0.5 核做对比就比较鸡贼,2 核启动花了 10-15s ,0.5 核启动花了 40s ,0.5 核的情况下单核心的时间片都被分走一半了,启动效果打折是很明显的。
qiaofanxing
209 天前
我好像听说有的手机厂商对微信有优化,点开微信就在 CPU 上做手脚,让系统“看起来”更流畅
linyimin520812
209 天前
@julyclyde #6 是的,特别是 spring 框架下,启动过程是单线程的,这样添加 CPU 核数可能作用不大,但是可以通过一些手段,将耗时的 Bean 的初始化方法异步化,这样添加 CPU 核数可能就有用了
julyclyde
209 天前
@linyimin520812 初始化方法异步化,是不是得修改源代码啊?似乎并不是直接加核就能生效的吧?
chendy
209 天前
思路很有意思但是感觉意义不大,因为启动速度慢一般不是因为资源不够而是资源利用率不高
启动慢的一般是要加载的 class 多,要扫描的包多,但是印象里这玩意是单线程的,加核心数没用
启动特别慢的一般是启动过程中要查数据库之类的,加核心数也没用
所以,这个操作对于启动过程中会用多线程的应用有用,另外可能会影响 gc 的一些参数(收集器线程数啥的)
linyimin520812
209 天前
@julyclyde #10 这个我之前实现过,就是需要引入个 jar 包,通过动态代理的方式,将初始化方法丢到线程池中,最后等待启动完成
julyclyde
209 天前
@linyimin520812 厉害了
linyimin520812
209 天前
@chendy 是的,刚看到这种方法的时候,觉得很有创意
linyimin520812
209 天前
@chendy 有一个点就是,Java 应用启动后一般会有一个预热过程,这个过程添加核心数会很有用
linyimin520812
209 天前
@qiaofanxing 哈哈哈,我还看到过反向操作的,不知道真假,就是点开其他 app 的时候,自己的 app 就疯狂占用 CPU ,让别人的 app 操作卡顿
reeco
209 天前
对于 spring 这种主线程启动的服务来说,没啥用
learningman
209 天前
@qiaofanxing 确实有,而且已经标准化了
https://github.com/Tencent/Hardcoder
wildec
209 天前
Android 上面超级应用微信、相机等加速启动都是通过这种方式来的
VYSE
209 天前
Java 搞个常驻, 类似 Zygote 或者 Chrome, 就不用担心启动时间的问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/981577

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX