插件窝 干货文章 如何使用Linux进行系统资源限制和控制

如何使用Linux进行系统资源限制和控制

限制 使用 进程 cgroup 187    来源:    2025-04-13

Linux系统资源限制和控制指南

在Linux系统中,有多种方法可以限制和控制进程对系统资源的使用。以下是主要的资源控制方法和工具:

1. ulimit命令

ulimit是bash内置命令,用于限制当前shell及其子进程的资源使用。

常用选项:

ulimit -a          # 显示所有当前限制
ulimit -u          # 限制用户最大进程数
ulimit -n          # 限制打开文件描述符数量
ulimit -v          # 限制虚拟内存大小(KB)
ulimit -m          # 限制物理内存大小(KB)
ulimit -t          # 限制CPU时间(秒)

永久设置:

编辑/etc/security/limits.conf文件:

*               hard    nofile          4096    # 所有用户最大文件数
username        soft    nproc           100     # 用户username最大进程数
@groupname      hard    cpu             5000    # groupname组CPU时间限制

2. cgroups (Control Groups)

cgroups是Linux内核功能,提供更精细的资源控制。

使用systemd控制cgroups:

# 创建一个slice
systemctl set-property user-1000.slice CPUQuota=50% MemoryLimit=1G

# 查看cgroup设置
systemd-cgls
systemd-cgtop

手动使用cgroups v2:

# 挂载cgroup2文件系统
mount -t cgroup2 none /sys/fs/cgroup

# 创建子cgroup
mkdir /sys/fs/cgroup/mycgroup

# 设置限制
echo "100000" > /sys/fs/cgroup/mycgroup/cpu.max
echo "500M" > /sys/fs/cgroup/mycgroup/memory.high

# 将进程加入cgroup
echo $$ > /sys/fs/cgroup/mycgroup/cgroup.procs

3. nice和renice

调整进程优先级:

nice -n 19 command    # 以最低优先级启动命令
renice 10 -p 1234     # 改变已运行进程(pid=1234)的优先级

4. cpulimit工具

限制进程的CPU使用率:

cpulimit -l 50 -p 1234   # 限制pid=1234的进程最多使用50%CPU
cpulimit -l 30 -e firefox # 限制firefox进程最多使用30%CPU

5. 内存限制工具

使用cgroups限制内存:

# 创建内存限制组
cgcreate -g memory:myapp

# 设置内存限制为1GB
cgset -r memory.limit_in_bytes=1G myapp

# 运行应用程序
cgexec -g memory:myapp mycommand

使用systemd服务限制:

编辑服务文件(/etc/systemd/system/myservice.service):

[Service]
MemoryLimit=1G
CPUQuota=50%

6. ionice

控制磁盘I/O优先级:

ionice -c 3 -p 1234      # 设置pid=1234为idle I/O级别
ionice -c 2 -n 7 command # 以best-effort级别(7)运行命令

7. 使用容器技术限制资源

使用Docker时:

docker run --cpus=".5" --memory="512m" image_name

使用LXC时:

lxc config set mycontainer limits.cpu 2
lxc config set mycontainer limits.memory 1GB

最佳实践

  1. 对于系统服务,使用systemd的资源控制指令
  2. 对于用户级限制,使用/etc/security/limits.conf
  3. 对于复杂应用场景,使用cgroups
  4. 定期监控资源使用情况,调整限制参数
  5. 测试限制设置,确保不会意外导致关键服务失败

通过合理使用这些工具和技术,可以有效防止单个进程或用户占用过多系统资源,保证系统的稳定性和公平性。