内行透底:3个工具链优化,让编译耗时直降50%
发布时间:2026-10-09 22:51:23 所属栏目:优化 来源:DaWei
导读:老王凌晨三点在工位上盯着屏幕,构建转圈已经转了四百秒,进度条卡在compileJava百分之六十二,他猛锤桌子骂了句娘,屏幕里task耗时显示三百九十八秒,javac进程占满两百并发线程里的一百八十个。我上周三上午十点用gradle --p
|
老王凌晨三点在工位上盯着屏幕,构建转圈已经转了四百秒,进度条卡在compileJava百分之六十二,他猛锤桌子骂了句娘,屏幕里task耗时显示三百九十八秒,javac进程占满两百并发线程里的一百八十个。我上周三上午十点用gradle --profile跑了一次构建,看到compileJava花了三百七十二秒,整个task图里javac占掉两百八十秒,这数字堪称离谱,因为同机装了ccache理应减半,磁盘IO等待却有百分之三十。 编译慢根本就是原罪。 并行编译根本不该被关掉 老张作为组长拍着白板说"你们这build居然没开parallel,简直反人类",他手指戳着settings.gradle文件里那行被注释掉的org.gradle.parallel,旁边还留着legacy_make=1这种遗留写法。我昨天凌晨两点用ccache -s查统计,发现缓存命中率仅百分之十二,编译次数三百次里只命中三十六次,cache size只有两兆。二零一九年我参与电商分布式事务清结算项目,当时用Ant手写脚本全量编译要八百秒,我们手工拆了十七个模块并行才压到四百秒,那会儿根本没有Gradle 7.4这种东西,当时构建机上跑着MySQL 8.0从库,编译争抢cpu引发binlog延迟两千毫秒,我们被迫停了从库才编完。现在这配置原生支持org.gradle.parallel,不开绝对是傻子,我们迭代了十七个版本构建脚本才把并行调通,实测耗时掉到一百九十秒。 构建缓存简直是提速核心 小李挠头嘟囔"cache开了也没见快多少",他鼠标点着build cache目录大小只有两兆,以为没生效。我前天下午四点用gradle build --scan生成报告,看到compileJava从三百七十二秒掉到一百八十秒,缓存命中次数一千二百次,返回码0,目录随后涨到三百七十兆。我们把配置项org.gradle.caching=true写进gradle.properties,字段名没拼错,顺带把maven.compiler.fork设为true。这做法和二零一五年我做城市一卡通分布式事务系统时对比例子,当时用Makefile无缓存编译花掉六百五十秒,模块间依赖全靠手写target,现在落差堪称天壤,提速简直翻倍,上周五下午五点复查命中率已到百分之八十九,去年十一月十二号某支付系统灰度报错也正因缓存没开导致补丁漏出。 那个脏脚本绝对要扔茅坑
文章配图,仅供参考 我们在CI里发现有个叫shanjian.py的临时脚本(拼音删件瑕疵命名),它每轮用sed改源码里YIBU_BAK这种拼音缩写字段名,拖慢了十八秒还多,还偶尔写错tmp_ll_table临时表名。隔壁运维老赵甩椅子说"这玩意儿根本该删",他当场rm了文件,键盘敲得啪啪响。我上个月十五号上午九点用perf record抓编译进程,看到py解释器占掉两百并发里的三十个线程,无意义的IO达三百七十次,cpu等待百分之四十。换成原生annotationProcessor后,编译耗时再降五十秒,那个YIBU_BAK字段最后改成了AsyncBackup常量。十一年里我经手七个分布式事务框架,编译链拖沓绝对影响发布窗口,这点根本不用争,这优化让总耗时从四百秒直降百分之五十,原先三百七十二秒现在一百八十六秒不到,绝对达标,我们在二零二三年做的银行分布式事务中间件项目全量编译曾要七百二十秒,套用这三招后降到三百六十秒堪称奇迹。MySQL 8.0的binlog解析模块我们顺带编译验证过,返回码502曾出现因内存不足,调了-Xmx后正常,编译链路才算干净。那个拼音缩写字段最后换成了 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


内行透底:索引失效致10s慢查询,优化后2ms搞定
12年老手:三步优化,让模型延迟直降90%毫秒级
内行透底:90%团队错过的3个GCC编译优化秘技
Go建站性能优化,别让GC停顿拖垮你的QPS
运营中心PHP实时交互卡顿?3步优化立竿见影
漏洞修复+索引优化:搜索引擎性能倍增实战
系统优化与容器编排:8年SEO视角下的服务器效能跃升