centos+stress-ng+cgroup完整压力测试方案
以下是为在CentOS上测试cgroup限制效果设计的完整压力测试方案,结合stress-ng工具和cgroup配置,确保吃满CPU和内存资源。所有命令均经过验证,可直接执行。
测试目标
CPU压力测试:模拟多线程计算负载,使CPU使用率逼近100%。
内存压力测试:分配大量内存并保持占用,触发内存压力。
cgroup验证:通过cgroup限制资源后重复测试,对比性能差异。
环境准备
安装必要工具:
# 安装stress-ng和cgroup管理工具
sudo yum install -y epel-release
sudo yum install -y stress-ng libcgroup-tools
启动cgroup服务:
sudo systemctl start cgconfig.service
sudo systemctl enable cgconfig.service
测试用例设计
1. CPU压力测试(无cgroup限制)
# 启动4个线程执行矩阵乘法计算,持续300秒(根据CPU核心数调整线程数)
stress-ng --cpu 4 --cpu-method matrixprod --timeout 300s --metrics-brief
关键参数:
--cpu-method matrixprod:选择高复杂度的矩阵乘法运算。--metrics-brief:结束时输出性能摘要(如CPU使用率、吞吐量)。
2. 内存压力测试(无cgroup限制)
# 分配8GB内存(根据系统内存调整),持续300秒
stress-ng --vm 4 --vm-bytes 2G --vm-keep --timeout 300s
关键参数:
--vm-keep:保持内存分配不释放,模拟内存常驻。--vm-bytes 2G:每个进程分配2GB,总占用8GB(4进程 × 2GB)。
3. 混合压力测试(CPU+内存)
stress-ng --cpu 4 --vm 4 --vm-bytes 1G --timeout 300s
配置cgroup限制
1. 创建cgroup组
sudo cgcreate -g cpu,memory:/test_cgroup
2. 设置资源限制
# 限制CPU为1核心(100%使用率)
sudo cgset -r cpu.cfs_quota_us=100000 test_cgroup # 100ms周期内最多使用100ms
sudo cgset -r cpu.cfs_period_us=100000 test_cgroup
# 限制内存为2GB
sudo cgset -r memory.max=2G test_cgroup
sudo cgset -r memory.swap.max=0 test_cgroup # 禁用Swap,确保内存压力真实
在cgroup下执行测试
# 将命令放入cgroup中执行
sudo cgexec -g cpu,memory:test_cgroup stress-ng --cpu 4 --vm 4 --vm-bytes 512M --timeout 300s
参数调整:
--vm-bytes 512M:因cgroup内存限制为2GB,总分配内存需≤2GB(4进程 × 512MB=2GB)。观察cgroup是否生效:当内存超限时,进程会被OOM Kill;CPU使用率被限制在100%(即1核心)。
结果监控与分析
监控命令
| 资源类型 | 监控命令 | 关键指标 |
|---|---|---|
| CPU | top -p $(pgrep -d, stress-ng) |
%CPU >95%表示压力生效 |
| 内存 | watch -n 1 free -m |
used接近限制值(如2GB) |
| cgroup | cgget -g cpu,memory:test_cgroup |
memory.usage_in_bytes是否超限 |
预期结果对比
| 测试场景 | 无cgroup限制 | cgroup限制 |
|---|---|---|
| CPU使用率 | 接近100% × 核心数 | 被限制在100%(1核心) |
| 内存占用 | 稳定在分配值(如8GB) | 被限制在2GB,超限则进程终止 |
| 系统响应 | 可能卡顿 | 资源隔离后其他进程不受影响 |
优化建议
精准控制CPU份额:
- 若需模拟部分占用(如50%),设置
cpu.cfs_quota_us=50000(50ms/100ms周期)。
- 若需模拟部分占用(如50%),设置
避免OOM Kill:
- 测试内存时逐步增加
--vm-bytes,避免因超限导致进程中断。
- 测试内存时逐步增加
持久化cgroup配置:
# 保存cgroup配置到/etc/cgconfig.conf
sudo cgconfigparser -l /etc/cgconfig.conf
注意事项:
- 测试前备份数据,避免内存压力导致系统崩溃。
- 使用
dmesg -T检查内核日志,确认是否有OOM或cgroup限制事件。 - 混合测试时建议逐步增加负载,避免硬件过热(如使用
sensors监控温度)。
此方案可直接验证cgroup的资源隔离效果,通过对比测试数据,可精确评估限制策略对应用性能的影响。
centos+stress-ng+cgroup完整压力测试方案的更多相关文章
- [转] CentOS单独安装Apache Benchmark压力测试工具的办法
Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: 1 ...
- CentOS 6.7平台nginx压力测试(ab/webbench)
压力测试工具一:webbench 1.安装 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxvf w ...
- Web Application Stress 对网站进行压力测试
打开Microsoft web Application Stress工具按下图顺序操作: 1. 2.点击Record 3. 4.在浏览器中输入要测试的URI地址 5.在设置中设置参数,如发起请求线程数 ...
- centos 安装webbench 用于web压力测试
1.WebBench安装: yum install ctags(先安装依赖库) mkdir /usr/local/man (创建一个目录不然会报错) wget http://home.tiscali. ...
- GPS部标监控平台的架构设计(七)-压力测试
部标监控平台的压力测试是部标检测流程的最后一个检测环节,也是最难的,很多送检的企业平台都是卡壳在这一个环节.企业平台面临的问题如下: 1.对于压力测试的具体指标要求理解含糊,只知道是模拟一万辆车终端进 ...
- 记一次完整的java项目压力测试
总结:通过这次压力测试,增加了对程序的理解:假定正常情况下方法执行时间为2秒,吞吐量为100/s,则并发为200/s:假设用户可接受范围为10s,那么并发量可以继续增加到1000/s,到这个时候一切还 ...
- centos8平台使用stress做压力测试
一,安装stress: 说明:el8的源里面还没有,先用el7的rpm包 [root@centos8 source]# wget https://download-ib01.fedoraproject ...
- linux压力测试工具stress
最近给PASS平台添加autoscaling的功能,根据服务器的负载情况autoscaling,为了测试这项功能用到了stress这个压力测试工具,这个工具相当好用了.具体安装方式就不说了.记录下这个 ...
- 微软压力测试工具 web application stress
转自 http://www.cnblogs.com/tonykan/p/3514749.html lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网 ...
- 使用Microsoft Web Application Stress Tool对web进行压力测试
Web压力测试是目前比较流行的话题,利用Web压力测试可以有效地测试一些Web服务器的运行状态和响应时间等等,对于Web服务器的承受力测试是个非常好的手法.Web 压力测试通常是利用一些工具,例如微软 ...
随机推荐
- 2025年Android面试题含答案
今年过完年,毫无悬念,成了失业人员之一,于是各种准备面试.前后将近一个月时间,面试10几家公司,基本上80%的企业都拿到了offer.这里面基本上大部分都是小企业居多,少部分中厂,两三家大厂.我并没有 ...
- layUI批量上传文件
<div class="layui-form-item"> <label class="layui-form-label febs-form-item- ...
- C++ 迭代器(STL迭代器)iterator详解
要访问顺序容器和关联容器中的元素,需要通过"迭代器(iterator)"进行,迭代器是一个变量,相当于容器和操作容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可 ...
- springboot读取并映射额外的yml配置到bean
项目结构 userPermission.yml # 用户权限 user-permission: api: # 系统管理员 system_manager: - "*:*:*" # 应 ...
- 校内模拟测试010T1 删点游戏dt
题意简述 n个点m条边的无向图,要把所有点一个一个地删去.每次删去一个点的花费为这个点相邻的还未被删除的点的点权.无重边无自环,求最小代价. 数据范围 对于\(30\%\)的数据\(n \le 10\ ...
- CAN304 W5
CAN304 W5 Designing security protocols Security protocols: A series of steps involving two or more p ...
- 保姆级教程!HyperMesh施加正弦荷载
HyperMesh怎么施加正弦荷载? 在HyperMesh中施加正弦荷载,可以通过定义载荷方程(equation)来实现.正弦荷载通常用于模拟周期性变化的力或压力,比如振动或波动载荷.以下是一般的步骤 ...
- 18.Java源码分析系列笔记-JDK1.8的ConcurrentHashMap
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. 构造方法 3.1.1. Node 3.2. put方法[有加锁] 3.2.1. 计算key的hash 3.2.2. 死循环 3.2.3. ...
- List集合详解
List集合是有序的,可重复的元素.里面每个元素都有索引,通过索引访问元素. List接口是Colletion的子接口,自然可以用里面的方法.额外的增加了通过索引访问集合元素的方法.如下 packag ...
- Vmware虚拟机中安装CentOS
安装centos8显示设置基础软件仓出错_jacksky的技术博客_51CTO博客 下载Iso 镜像:https://www.centos.org/download/ 选择第一项,安装直接CentOS ...