0

0

Docker容器Running状态下的内存压力测试实战

冰川箭仙

冰川箭仙

发布时间:2026-03-19 13:55:34

|

477人浏览过

|

来源于php中文网

原创

Docker容器内存压力测试需在Running状态下进行,以验证内存边界、排查OOM或评估资源限制有效性;须确认内存限制与使用情况,使用cgroup视图工具(如dd、memtester或Python脚本)安全压测,并通过cgroup指标和dmesg监控OOM事件。

docker容器running状态下的内存压力测试实战

当Docker容器处于Running状态时,直接在容器内进行内存压力测试,是验证应用内存边界、排查OOM(Out of Memory)问题或评估资源限制有效性的常用手段。关键在于:测试要真实反映容器视角的内存视图,且不能干扰宿主机或其他容器。

确认容器内存限制与当前使用情况

在开始测试前,先明确容器是否设置了内存限制(--memory),以及当前实际占用。否则压力测试可能触发OOM Killer,导致容器意外退出。

  • 查看容器内存限制:docker inspect -f '{{.HostConfig.Memory}}' <container_id>(单位为字节,0表示无限制)
  • 查看实时内存使用:docker stats <container_id> 或进入容器执行 free -h(注意:容器内看到的是cgroup限制后的视图)
  • 检查cgroup内存路径(容器内):cat /sys/fs/cgroup/memory/memory.limit_in_bytes,该值决定“可用内存上限”

在容器内安全执行内存压力测试

推荐使用轻量、可控、不依赖复杂环境的工具。避免用stress-ng --vm等可能绕过cgroup限制或引发内核级异常的方式;优先选择基于malloc + memset的简单压测逻辑。

靠岸学术
靠岸学术

一款集翻译,阅读,文献管理于一体的英文文献阅读器

下载
  • 若容器内已安装ddsh:可快速分配并锁定内存
    dd if=/dev/zero of=/dev/shm/testfile bs=1M count=500 && sync(占用500MB,/dev/shm受memory limit约束)
  • 使用memtester(需提前安装):memtester 300M 1(测试300MB,1轮,不会持续增长)
  • 编写简易Bash脚本模拟渐进式占用(推荐):
    python3 -c "a = 'x' * (800*1024*1024); input('Press Enter to release...')"(分配800MB后暂停,便于观察OOM前状态)

监控与判断是否触发内存压力

仅看容器内free输出容易误判。真正有效的观察点是cgroup指标和内核事件。

  • 宿主机上实时查看容器cgroup内存统计:cat /sys/fs/cgroup/memory/docker/<container_id>/memory.usage_in_bytes
  • 检查是否发生内存回收:cat /sys/fs/cgroup/memory/docker/<container_id>/memory.stat | grep -E "(pgpgin|pgpgout|pgmajfault)"(数值明显上升说明频繁换页或缺页)
  • 监听OOM事件:dmesg -t | grep -i "killed process" | tail -5(出现即表示OOM Killer已介入,容器进程被杀)
  • 观察docker ps输出状态:若容器从Up X seconds变为Restarting (137),大概率是OOM退出(137 = SIGKILL)

注意事项与避坑提示

内存压力测试不是跑满就完事,目标是复现真实瓶颈并获取可观测数据。

  • 不要在生产容器中直接运行无限制的内存分配命令(如yes > /dev/null &配大内存分配)
  • 启用--memory-swap=0时,容器无法使用swap,压力更易触发OOM,测试前需知悉
  • Alpine镜像默认不含/proc/sys/vm/swappiness,无法通过调参缓解压力,应以cgroup limit为准
  • Java等JVM应用需额外关注-Xmx设置是否超过容器memory limit,否则JVM可能因申请不到内存而崩溃,而非被cgroup OOM Kill

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

256

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1174

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

848

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.24

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

280

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

517

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

417

2024.04.08

Go Web框架Gin接口开发与中间件设计实践
Go Web框架Gin接口开发与中间件设计实践

本专题围绕 Go 在 Web 后端开发中的主流框架 Gin 展开,系统讲解高性能接口开发与中间件机制设计。内容涵盖路由分组、请求绑定、参数校验、统一响应封装、日志与鉴权中间件实现,以及接口限流与异常处理策略。通过实战项目案例,帮助开发者构建结构清晰、性能优良的 Go Web 服务体系,提升接口开发效率与系统可维护性。

7

2026.03.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号