背景原理:部分物理服务器上部署了多个应用,为了避免由于部分应用异常造成机器负载过高,影响其他应用,对每个应用所属进程进行cpu使用限制。

     限制内容:A,绑定应用使用除0号cpu以外的其他cpu;B,设定cpu资源使用比例,当资源充足时候,可以使用超过预设比例的cpu资源,当资源紧张时候,按照比例使用cpu资源。

   启动脚本如下:

  #!/bin/bash

source /etc/profile
#获取cpu核心数量并减去1,保留cpu 0
cpuNumber=$(cat /proc/cpuinfo |grep processor|wc -l)
cgCpuNumber=$(expr $cpuNumber - 1)
#应用名称
appName="test_tomcat"
#设置cgroup 中cpu 绑定
cgcreate -g cpuset:cpuset_${appName}
cgset -r cpuset.mems="0" cpuset_${appName}
cgset -r cpuset.cpus="1-${cgCpuNumber}" cpuset_${appName}
#设置cgroup资源使用比例
cgcreate -g cpu:cpu_share_${appName}
cgset -r cpu.shares=1024 cpu_share_${appName}
#启动进程,该方式会限制该主进程,以及创建的子进程
cgexec -g cpuset:cpuset_${appName} -g cpu:cpu_share_${appName} su - tomcat -c "/data/tomcat01/bin/startup.sh"

使用效果:使用后 8核心虚拟机,cpu load 增加到 50以上,ssh 操作无卡顿现象,其他正常应用未收到高负载影响。

参考文献中提供压测脚本,可以替换上面的tomcat: