背景
- 部门的代码版本管理我采用的是gitlab, 所以在CICD时候为了便捷我采用了gitlab-runner
优势
- 与gitlab绑定, 可以直接在gitlab进行版本迭代管理
- gitlab-runner 支持docker, 拉取及交互操作便捷
- 配置相对简单
问题
- 最近发现无论是产品迭代, 还是组件库的组件迭代 打包时间都慢了不止一倍
排查
1.因为最近将生产的node版本升级到了16, 经过排查并不是node镜像问题
2.开始仔细查看日志发现, 拉取镜像及数据缓存耗时都是正常的, 也就是构建时间变长了, 这里第一时间我想到是CPU调度及内存占用出现的问题, 于是我把gitlab及runner的核心数加了两个,内存增加了8g, 但是并没有解决😭
3.没办法, 只能查看docker及Linux的日志, 经过perf火焰图发现loop_queue_work函数调用时间过长
- 经过查阅docker文档, 发现存储驱动优先级的问题(吐血)。。。
- 原因是因为业务JDK的需求, 我最新升级了一下Linux内核
解决方式
- 1.找到原因就好解决了, docker现在默认是Overlay2, 备份数据后使用mkfs.xfs -n ftype=1 /dev/vdc1命令重新格式化磁盘,打开ftype选项。接着强制配置Docker进程使用overlay2的存储驱动
- 2.在.gitlab-ci.yml中配置
variables:
DOCKER_DRIVER: overlay2