cgroup限制oracle

在企业级应用系统中,通常需要对不同的应用资源进行精细化的管理和限制。cgroup作为Linux内核中的一个重要特性,可以提供应用程序的资源管理及限制能力,对于管理大型服务、网站和应用程序等的服务器,使用cgroup对其所需要的资源进行限制可以更加精细地控制系统资源的使用,这里我们将以Oracle数据库为例来进行介绍。

在使用 cgroup 对 Oracle 数据库进行资源管理时,我们需要根据具体的场景和实际情况对这些资源进行限制。常见的需要限制的资源类型包括 CPU、内存、磁盘和网络带宽等,下面我们将针对这四种资源类型逐一进行详细讲解。

CPU资源限制

CPU资源限制

CPU资源是Oracle数据库的重要资源之一。Oracle数据库通常使用多个进程来处理用户请求,而这些进程在竞争 CPU 资源时会产生大量的上下文切换开销,影响系统性能。因此,我们需要对它们进行资源限制。下面是一个使用 cgroup 对 CPU 进行资源限制的例子:

# 创建 cgroup,名称为 cpulimited,在根控制组下 mkdir /sys/fs/cgroup/cpu/cpulimited echo 100000 >/sys/fs/cgroup/cpu/cpulimited/cpu.cfs_quota_us echo 25000 >/sys/fs/cgroup/cpu/cpulimited/cpu.cfs_period_us 1. 将 Oracle 数据库进程添加到 cpulimited 组 echo $ORACLE_PID >/sys/fs/cgroup/cpu/cpulimited/cgroup.procs

# 创建 cgroup,名称为 memlimited,在根控制组下 mkdir /sys/fs/cgroup/memory/memlimited 1. 设置该组的内存限制为 2G echo 2G >/sys/fs/cgroup/memory/memlimited/memory.limit_in_bytes 1. 将 Oracle 数据库进程添加到 memlimited 组 echo $ORACLE_PID >/sys/fs/cgroup/memory/memlimited/cgroup.procs

# 创建 cgroup,名称为 iolimited,在根控制组下 mkdir /sys/fs/cgroup/blkio/iolimited 1. 设置读写带宽速率 echo "8:0 1048576" >/sys/fs/cgroup/blkio/iolimited/blkio.throttle.read_bps_device echo "8:0 1048576" >/sys/fs/cgroup/blkio/iolimited/blkio.throttle.write_bps_device 1. 将 Oracle 数据库进程添加到 iolimited 组 echo $ORACLE_PID >/sys/fs/cgroup/blkio/iolimited/cgroup.procs

# 创建 cgroup,名称为 netlimited,在根控制组下 mkdir /sys/fs/cgroup/net_cls/netlimited 1. 为该组添加网络浮标标记符号 echo 0x10001 >/sys/fs/cgroup/net_cls/netlimited/net_cls.classid 1. 将 Oracle 数据库进程添加到 netlimited 组 echo $ORACLE_PID >/sys/fs/cgroup/net_cls/netlimited/cgroup.procs 1. 使用 tc 命令限制该组的网络带宽 tc qdisc add dev eth0 root handle 1:0 htb default 2 tc class add dev eth0 parent 1:0 classid 1:1 htb rate 128kbit tc class add dev eth0 parent 1:0 classid 1:2 htb ceil 128kbit tc filter add dev eth0 protocol ip parent 1:0 prio 100 handle 0x10001 fw flowid 1:1