内容详情
围绕文章主旨、阅读节奏与信息层次进行优化,让读者进入正文前就能快速理解主题重心与阅读价值。
Docker默认无资源限制的隐患与修复
Docker 让跑软件这件事显得很轻,但这份轻便藏着一个代价不小的默认设置:容器启动时,内存和 CPU 都没有上限。 用一条普通的 docker run 启动容器,Docker 不会施加任何内存或 CPU 限制,容器能用到内核允许的极限。刚开始学的时候这很合理,可对一个要连续跑几周的服务来说就不合适了。容器给人的感觉是一次性的,于是很多人启动一个数据库、一个测试 API 或一个自托管应用,关掉终端就忘了它。它继续在后台运行,占着内存,还会因为定时任务、健康检查或轮询循环不断唤醒 CPU。 危险的地方在于它不显眼。一个被遗忘的服务可能只占几百兆,但几个加起来就不少了,而单个内存泄漏还能一路涨到把其他东西挤死。在 Linux 上,主机内存耗尽后,内核的 out-of-memory killer 会开始终止进程,它未必挑那个出问题的容器,也可能顺手干掉你的数据库、SSH 会话,甚至 Docker 守护进程本身。 Windows 和 macOS 上这种情况更明显。Docker Desktop 把容器跑在虚拟机里,这个虚拟机不管容器需不需要,都会先占掉一块内存。Windows 配 WSL2 时, vmmem 进程能在请求内存的工作负载停止很久之后,仍然握着几个G不放,笔记本因此变卡、风扇莫名狂转,原因就在这里。 Docker 对这些都不会提醒你。没有弹窗问这个容器该给多少内存,也没有通知说某个东西已经跑了三个月。除非你主动用 docker stats 去看,或者打开 Docker Desktop 面板,唯一的症状就是机器比该有的样子慢,还找不到明确的元凶。 把上限设上,把没用的清掉 别想太复杂,建容器的时候就把限制设好。 --memory 参数限制它能用多少内存, --cpus 限制它能分到多少处理器时间。把内存设成 512 兆、CPU 设成 1.5,一个失控的进程就被圈住了。容器超过内存上限时,Docker 会把它停掉,而不是让它拖垮主机。还可以设一个内存预留值,作为只在内存紧张时才生效的软限制,再加一个 pids 上限,防止某个进程无限生出子进程。 用 Docker Compose 的话,同样的控制写在配置文件里。在服务的 deploy 段下,resources 块接受 CPU 和内存的限制,当前版本的 Compose 不需要 Swarm 也能识别这些值。定义一次,每个同事、每次部署都拿到同样的边界,不用指望谁记得加参数。 限制只有在你知道合理数值时才有用,所以先观察。跑 docker stats 能看到每个容器实时的 CPU 和内存占用,观察几天就知道每个服务实际需要多少。把限制设在观测到的峰值稍高一点,正常的波动就不会触发重启。 最后,清理不再用的东西。 docker ps 列出正在运行的容器, docker stop 关掉不需要的。跑 docker system prune 会清掉已停止的容器、未使用的网络、悬空镜像和构建缓存,加上 volumes 选项还能一并删掉孤立的卷。把它当成习惯而不是一次性操作,每隔几周检查一次,机器就不会慢慢被填满。 日志、重启策略和桌面设置也会叠加 值得改的默认值不止资源限制。Docker 标准的 json-file 日志驱动不做轮转,一个话多的容器能一直往单个日志文件里写,直到吃掉几个G的磁盘。可以给每个容器或守护进程配置文件设 max-size 和 max-file,家庭环境和小服务器上,10 兆、保留三个文件通常就够了。 重启策略带来的问题更安静。把容器设成 always 重启,意味着每次重启、每次崩溃它都会回来,哪怕你是故意停掉的。一个坏掉的容器还可能无限循环,失败、启动、再失败,一路烧 CPU。unless-stopped 策略会尊重你手动关停的操作,on-failure 配上最大重试次数则能挡住无限崩溃循环。 健康检查也值得看一眼。每隔几秒跑一次的检查,尤其是那种要启动脚本或查询数据库的,会制造持续的后台活动。把间隔拉到 30 秒以上,对多数服务够用,开销也小得多。 在 Docker Desktop 里,设置菜单能限制虚拟机可占用的内存、CPU 和磁盘,而这些值往往被设得远高于实际需要。用 WSL2 的 Windows 用户可以在用户目录建一个 .wslconfig 文件,限制整个子系统的内存和处理器数量,然后用 wsl --shutdown 重启它。哪怕只做小幅调整,在笔记本上也能看出差别。 镜像大小长期也有影响。slim 或基于 Alpine 的镜像占的磁盘更少、下载更快,通常还带更少的后台进程,整体更轻。 Docker 的默认值偏向方便而不是效率,容器可以无期限地占用资源。设好内存和 CPU 上限、轮转日志、选合适的重启策略、定期清理,机器就能保持响应,避开那些由无人管理的容器造
推荐阅读
Search
热点新闻
亚运会 | 中国武术教练在文莱的二十年“功夫答卷”
新华社日本名古屋9月21日电(记者杨博毅、刘心惠)巴斯玛·拉什卡尔是爱知·名古屋亚运会文莱代表团中唯一的女运动员。 三年前,她为文莱队拿下在杭州亚运会的首枚奖牌——女子太极拳太极剑全能银牌;在名古屋,她代表文莱又一次站到了亚运会武术赛场上。 巴斯玛的教练李辉,来自中国河北,自幼习武。 巴斯玛·拉什卡尔(中)与教练李辉(右)合影 时间倒回2006年。那一年,恰逢中国与文莱建交15周年,国家体育总局选
贝卢斯科尼梦想着世界最佳俱乐部,倚天足球专栏,—,他如何缔造AC米兰
小编专栏新一期—— 1986年夏天,AC米兰球迷被邀请到“奇维卡竞技场”,并被建议仰望天空。在瓦格纳《女武神的骑行》伴奏下,直升机飞抵体育场上空,球员和教练从机中走出。俱乐部新老板西尔维奥·贝卢斯科尼把球队亮相变成了一场好莱坞式大秀。这位电视帝国的主人深谙如何抓住公众注意力。接下来只需让球场上的表现与这种排场相匹配。 今天,贝卢斯科尼本该年满90岁。在他掌权的31年里,AC米兰赢得了29座奖杯。八
丰田新车官图正式发布,10月7日,即将上市
点击上方 关注我们 说起丰田,国内车友对汉兰达可太熟了,当年加价提车的盛况还历历在目。 但在美国市场,丰田还有一位比它大一圈的兄弟,叫Grand Highlander,国内车迷管叫大汉兰达,车长5116毫米,轴距2950毫米,比国内汉兰达整整大了一码,主打三排座家庭用车。 10月7日,2027款大汉兰达最近新增了一个版本,Woodland Edition,翻译意思大概叫森林版或者轻越野版,定位卡在
阿尔托贝利:希望劳塔罗尽快追上我的进球数,这对国米是好事
据《Tuttomercatoweb》报道,阿尔托贝利谈到了马佐拉、劳塔罗和皮奥-埃斯波西托。 阿尔托贝利在采访中回忆了桑德罗-马佐拉:“如果要向没见过他的人形容他?没见过他的人,人生中错过了很多。马佐拉是国际米兰、国家队的一位伟大球员,后来又成了出色的管理者。作为国米球迷,我把他放在国际米兰历史第一位。马佐拉是意大利的财富。谈到那些书写过国家队历史的人时,大家都应该更冷静、更专业,也要更谨慎。”
[流言板]前教练:没教过亚马尔怎么踢足球;拉玛西亚的天才与生俱来
虎扑10月16日讯 伊万-卡拉斯科曾在萨瓦德尔、瓦伦西亚和巴萨拉玛西亚执教。他认为,教练可以提出比赛理念,但足球最终属于球员,青训教练最重要的工作,是理解球员、陪伴球员,并为他们创造能够发挥的环境。 记者: 你属于什么类型的教练?你的执教理念是什么? 卡拉斯科: 我是一名热爱比赛、热爱足球的教练。我喜欢主动型球队,喜欢掌控球权,也喜欢在高位夺回球权。但教练必须足够聪明,能够根据情况调整自己,也必须