2019独角兽企业重金招聘Python工程师标准>>>

在大多数Ubuntu系统上,Docker的默认文件系统是AUFS.

别用它,用Overlay吧,下来我告诉你为什么。

首先,补充一下背景,我在POWER服务器上测试基础的LAMP环境的性能(LAMP代表Linux+Apache+MySQL/MariaDB+PHP)。为了能做更可靠和重复性的测试,我在Docker容器里构建了这个环境。

每次测试会下载Apache , MariaDB和PHP的源码并且编译。这个过程应该很快,我使用的POWER 8服务器有160个硬线程以及128GB内存,但是我发现构建的速度和一个BlueMix云上的2核Intel虚拟机一样。

为什么?我第一件事就是在<code>top</code>下观察编译的过程。<code>top</code>的头部信息是以下这样:
![图1](https://mmbiz.qlogo.cn/mmbiz/ibxUwW9RpKkjpCTCWVmN00mfwHItIHwTlcSd0YjMbhzxGNKarNdAtjL21cKC7Z5n846nmXKria6WVr7QEg4DibZww/0?wx_fmt=png)

显示超过70%的CPU时间都花在内核上了?那样非常奇怪,我们深入研究一下。

接下来我想到的是使用<code>perf</code>来分析CPU的负载细节。<code>perf top</code>结果显示说大量的时间花费在自旋锁上:
![图2](https://mmbiz.qlogo.cn/mmbiz/ibxUwW9RpKkjpCTCWVmN00mfwHItIHwTlccFDpicrlsMTGYlJqqjGEd1qs8XXt9QNT9Q5sFtfwh7OY7IpPOK1EfA/0?wx_fmt=png)

<code>perf top -g</code>给出了更多信息:那些时间是花费在了系统调用上,<code>open()</code>和<code>stat()</code>是罪魁祸首,我们还能看到一系列的系统方法在自旋锁的调用链上。

![图3](https://mmbiz.qlogo.cn/mmbiz/ibxUwW9RpKkjpCTCWVmN00mfwHItIHwTlSHkPne3N3KHzrPs2A5ictNqqfrQnRvLeRyGCDhvfJjIgBd4HUSm6Enw/0?wx_fmt=png)

为什么<code>open</code>和<code>stat</code>调用慢?我知道那些文件被挂载到AUFS上(如果你不确定,用<code>docker info</code>命令能看到)。那么,作为一个内核黑客,我决定继续寻根问底了,这个过程并不顺利。AUFS已经过时了,它是一组独立的补丁包,很多Linux发行版多年来都尝试去废弃它,实际上,红帽企业版并没有内置安装它(多亏了红帽,Docker似乎也有不再支持它的迹象)

想要远离这个恶梦的一个方法是使用其他的补丁包,我查看了一下Docker支持的其他文件系统,找到这个[PPT](out-of-tree patchset)非常好。我的选项非常简单:AUFS,btrfs,device-mapper或者Overlay。Overlay是一个不二的选择,它不需要我在云端的虚拟机上安装device mapper,或者像btrfs那样需要重新格式化。

它在Ubuntu上安装也很简单:

- 把你需要的docker容器用export或save命令备份到文件

- 在<code>/etc/default/docker</code>文件里的<code>DOCKER_OPTS</code>选项中添加<code> --storage-driver=overlay</code>,然后重启docker(使用<code>service docker restart</code>)

- 是用import或load命令把之前导出的容器重新导入。

- 验证一下一切是否正常,然后就可以把旧的储存路径删除掉了(<code>/var/lib/docker/aufs</code>)

我转移了我的容器后,我开始了另一次编译。

我首先注意到的是在Overlay上构建镜像缓慢了许多,但是一旦构建完成,开始编译之后,一切都有飞跃般的加速:

![图4](https://mmbiz.qlogo.cn/mmbiz/ibxUwW9RpKkjpCTCWVmN00mfwHItIHwTlaHU3ib2ibunqUBvcagh75vB4tX8MMDLJoXPLHBvPqHick9rUCutMCO2QQ/0?wx_fmt=png)

这些编译任务的过程从蜗牛那样慢变得像火箭那样快~完胜!

结论:

- 如果你用Docker来执行那些会产生大量的<code>open()</code>和<code>stat()</code>这种系统调用
- 如果你想要你的机器能真正的工作,而不是在自旋锁里转不出来
- 如果你想要用上更跟得上潮流的能被支持得更好的组件
- 如果你想用上比btrfs或者device mapper这些更省事的文件系统

那么现在就抛弃AUFS,切换到Overlay吧。

转载于:https://my.oschina.net/kernalsky/blog/1600560

立刻停止使用AUFS,开启Overlay!相关推荐

  1. 使用中断后不停止_仓鼠偷吃鼠粮,被发现后立刻停止,但鼠鼠满脸不情愿

    贪玩馋嘴,是很多宠物的天性,在主人不在家的时候,往往是它们暴露本性的时候. 提起贪玩,人们往往会想到哈士奇,因为它们能在主人不在家的时候,把整个屋子给拆了:而提起贪吃,仓鼠却总被人们忽视. 小巧可爱的 ...

  2. [译] 保护我们的 Git Repos,立刻停止“狐步舞”

    本文讲的是[译] 保护我们的 Git Repos,立刻停止"狐步舞", 原文地址:Protect our Git Repos, Stop Foxtrots Now! 原文作者:Sy ...

  3. 非正常关机宝塔mysql启动失败_宝塔mysql启动立刻停止启动失败解决办法

    宝塔mysql启动立刻停止和启动失败大部分原因是主机的内存小了,这种情况多发生于1G内存及以下的主机上面,随着wordpress越来越消耗内存,宝塔也是个非常吃内存的玩意,所以建议购买主机的时候选择1 ...

  4. linux内核开启overlay,Linux-overlay启动挂载为只读或写文件异常

    背景 路由器在使用过程中,偶像启动挂载文件系统异常,查看打印后发现挂载overlay异常,打印错误代码-39,跟踪代码发现由于work目录非空导致清除失败,接下来分析原因. overlay原理 通过o ...

  5. 自动刷新_AutoRefresh插件:开启页面自动刷新!

    Auto Refresh 出于某种原因,在使用浏览器时我们可能需要每隔一段时间刷新一下网页. 例如在监视阅读量/下载量/评论,抢购新上市的手机和演唱会门票,查看网站更改进度这些场景中,如果都采用手动刷 ...

  6. 特斯拉Model3车主称无法开启;传高通开发首款笔记本处理器;Dfinity挑战亚马逊 | 雷锋早报...

    特斯拉网络出现宕机,Model3车主无法开启 据Electrek报道,有车主反映,特斯拉汽车互联网网络瘫痪,从美东时间下午3点半开始无法连接.目前故障原因尚不明确. 早在2016年,特斯拉就发生过类似 ...

  7. 《认知觉醒:开启自我改变的原动力》读书摘记

    认知觉醒:开启自我改变的原动力 - 周岭 前言-读书小结 前段时间,读完了这本书,感觉还挺有共鸣的,但还是怕巴纳姆效应,就是把一般性描述往身上套,看起来都是准确的那种,今天回头过,快速翻了下之前的摘记 ...

  8. AutoRefresh插件:开启页面自动刷新!

    Auto Refresh 出于某种原因,在使用浏览器时我们可能需要每隔一段时间刷新一下网页. 例如在监视阅读量/下载量/评论,抢购新上市的手机和演唱会门票,查看网站更改进度这些场景中,如果都采用手动刷 ...

  9. pyqt stop停止线程_面试官:如何终止线程?有几种方式?

    在 Java 中有以下 3 种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程终止: 使用 stop() 方法强行终止线程,但是不推荐使用这个方法,因为 ...

最新文章

  1. 京东2022届广告部算法岗内推
  2. 机器学习-梯度下降算法原理及公式推导
  3. 利用 pywin32 操作 excel
  4. 批量造数据的一种方法
  5. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现
  6. 我php第一个页面,PHP 第一个 PHP 页面 - 第一个 PHP 页面 - phpStudy
  7. Spring后端接收表单方式上传的文件和数据
  8. VSCode官方下载网址
  9. 使用树莓派来做打印服务器
  10. jmeter里看java的log,jmeter中java协议请求
  11. 做短视频千万不要错过这5个视频素材网
  12. VS2013中F#的新特性
  13. iphone ipad等苹果设备30针数据线接口定义,大家可能有用
  14. Nginx的优化配置
  15. 用C语言实现简单的猜数字小游戏
  16. FastDFS,Redis,Solr,ActiveMQ核心技术整合二(1)
  17. LeetCode 开心字符串
  18. 先学python 还是先学c语言_初中生想学编程,请问先学C语言好还是先学Python?
  19. 经常用的代码 命令行解析 api 以及vue组件复用方法总结
  20. 机器人课程反馈中如何面对批评和负面消息

热门文章

  1. 图灵奖得主、AAAI候任主席展望“AI未来10年”
  2. 微软年度研究大盘点:ML突破将到来,人机交互更真实,惜别沈向洋
  3. 高科技领域零的突破永不嫌多 --- 我看嫦娥四号成功登陆月球背面
  4. SAP MM PR Release Strategy 配置中Classification数据的维护
  5. 《数学之美》第2章自然语言处理从规则到统计
  6. 城市“脑梗” 当前城市大脑面临的困境
  7. 范式变革与规律涌现:世界科技发展新趋势
  8. 你的大脑在自动驾驶,而你一无所知
  9. 人类与AI结合的最佳形态是什么样?|A16Z内部万字报告
  10. 仅需1/5成本:TPU是如何超越GPU,成为深度学习首选处理器的