首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux资源限制精讲,避免进程卡死

Linux资源限制精讲,避免进程卡死

作者头像
IT咸鱼
发布2025-07-03 15:09:52
发布2025-07-03 15:09:52
1910
举报

每天分享技术栈,开发工具等

当您在生产环境中运行大量任务时,偶尔会遇到某个进程占用过多资源导致系统卡死,影响服务可用性。

一、环境准备与执行位置

  1. 系统:AlmaLinux 8.x
  2. 执行位置:所有命令均在 Shell(bash)中执行,普通用户或 root 均可;请通过 SSH 登录到目标服务器(如 master、node1、node2)。
  3. 部署方式:如需容器化,可将 docker-compose.yml放在项目根目录,执行 docker-compose up -d

二、ulimit:用户级资源限制

1. 基本概念

ulimit是 Linux 内建命令,用于设置单个用户进程可使用的资源上限,例如打开文件数、最大线程数等。超出限制时,系统会拒绝分配,从而避免进程 uncontrolled growth。

2. 查看当前限制

代码语言:javascript
复制

# 查看所有限制
ulimit-a

在 DataGrip 的终端面板中执行同样命令,可以截取执行结果截图,如下图所示:

代码语言:javascript
复制

# 在 DataGrip 中的 Shell 窗口执行:
ulimit -n

三、官方示例——ulimit 打开文件数限制

代码语言:javascript
复制

# 临时将最大打开文件数设置为 1024
ulimit-n1024
# 验证
ulimit-n

如果某进程尝试打开超过 1024 个文件,会报错:

代码语言:javascript
复制

bash:<程序>:Too many open files

四、cgroups:系统级更细粒度限制

Control Groups(cgroups) 提供对进程组的整体资源限制,可更细粒度地管理 CPU、内存、块 I/O 等。

1. 安装与启动

代码语言:javascript
复制

# 安装 cgroup 工具
yum install-y libcgroup-tools
# 启动服务
systemctl enable--now cgconfig

2. 配置文件示例(/etc/cgconfig.conf)

代码语言:javascript
复制

mount {
cpu=/sys/fs/cgroup/cpu;
memory=/sys/fs/cgroup/memory;
}

# 定义 mydb 组
group mydb {
    cpu {
cpu.shares=512;   # CPU 权重
    }
    memory {
memory.limit_in_bytes=1G;  # 最大 1G
n    }
}

3. 启动进程到 cgroup

代码语言:javascript
复制

# 将已有进程(PID 1234)加入 mydb
cgclassify -g cpu,memory:mydb 1234

五、Docker Compose 集成示例

在容器环境中,也可以通过 Compose 文件设置 cgroups 限制:

代码语言:javascript
复制

version:'3.8'
services:
db:
image: mysql:8.0
deploy:
resources:
limits:
cpus:'0.5'
memory: 512M
environment:
- MYSQL_ROOT_PASSWORD=secret

将此文件保存为 docker-compose.yml,执行:

代码语言:javascript
复制

docker-compose up -d

即可在容器层面限制数据库实例资源。

六、组件关系梳理

  1. ulimit(用户级):快捷、命令行生效;重启会恢复默认。
  2. cgroups(系统级):对进程组统一管理;可持久化配置,也可用于容器内部。
  3. Docker Compose:在容器化场景下,利用 Docker 调度底层 cgroups,实现资源隔离。

三者结合,可实现从用户到系统、进而到容器的全方位资源管控。

生产环境建议结合监控(Prometheus + Grafana)定时检测资源使用,避免盲目设置过低导致业务中断。

修改 ulimit建议写入 /etc/security/limits.conf以生效于新会话。

cgroups v2 引入更统一的管理方式,可根据分发版文档选型。

IT咸鱼原创,转载请注明公众号。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境准备与执行位置
  • 二、ulimit:用户级资源限制
    • 1. 基本概念
    • 2. 查看当前限制
  • 三、官方示例——ulimit 打开文件数限制
  • 四、cgroups:系统级更细粒度限制
    • 1. 安装与启动
    • 2. 配置文件示例(/etc/cgconfig.conf)
    • 3. 启动进程到 cgroup
  • 五、Docker Compose 集成示例
  • 六、组件关系梳理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档