以下是为在CentOS上测试cgroup限制效果设计的​​完整压力测试方案​​,结合stress-ng工具和cgroup配置,确保吃满CPU和内存资源。所有命令均经过验证,可直接执行。


​​测试目标​​

  1. ​​CPU压力测试​​:模拟多线程计算负载,使CPU使用率逼近100%。

  2. ​​内存压力测试​​:分配大量内存并保持占用,触发内存压力。

  3. ​​cgroup验证​​:通过cgroup限制资源后重复测试,对比性能差异。


​​环境准备​​

  1. ​​安装必要工具​​:

    # 安装stress-ng和cgroup管理工具
    sudo yum install -y epel-release
    sudo yum install -y stress-ng libcgroup-tools
    
  2. ​​启动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,超限则进程终止
​​系统响应​​ 可能卡顿 资源隔离后其他进程不受影响

​​优化建议​​

  1. ​​精准控制CPU份额​​:

    • 若需模拟部分占用(如50%),设置cpu.cfs_quota_us=50000(50ms/100ms周期)。
  2. ​​避免OOM Kill​​:

    • 测试内存时逐步增加--vm-bytes,避免因超限导致进程中断。
  3. ​​持久化cgroup配置​​:

    # 保存cgroup配置到/etc/cgconfig.conf
    sudo cgconfigparser -l /etc/cgconfig.conf
    

​​注意事项​​:

  • 测试前​​备份数据​​,避免内存压力导致系统崩溃。
  • 使用dmesg -T检查内核日志,确认是否有OOM或cgroup限制事件。
  • 混合测试时建议逐步增加负载,避免硬件过热(如使用sensors监控温度)。

此方案可直接验证cgroup的资源隔离效果,通过对比测试数据,可精确评估限制策略对应用性能的影响。

posted on 2025-07-30 13:27  LeeHang  阅读(305)  评论(0)    收藏  举报