• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Linux资源限制命令详解

在Linux中,ulimit命令用于控制shell启动的进程的资源限制。limit和unlimit是csh/tcsh shell中的命令,而在bash/sh等shell中使用ulimit命令。让我详细解释这两种用法:

1. bash/sh中的ulimit命令

基本语法

ulimit [选项] [限制值]

常用选项

# 查看所有限制
ulimit -a

# 设置文件大小限制(块)
ulimit -f 1024        # 设置文件大小为1024块
ulimit -f unlimited   # 取消文件大小限制

# 设置core文件大小(块)
ulimit -c 1024        # 设置core文件大小
ulimit -c unlimited   # 允许生成core文件

# 设置数据段大小(KB)
ulimit -d 51200       # 50MB数据段限制

# 设置栈大小(KB)
ulimit -s 8192        # 8MB栈大小

# 设置CPU时间(秒)
ulimit -t 600         # 10分钟CPU时间

# 设置最大内存(KB)
ulimit -m 102400      # 100MB内存限制
ulimit -v 102400      # 100MB虚拟内存

# 设置打开文件数
ulimit -n 1024        # 最多打开1024个文件

# 设置最大进程数
ulimit -u 500         # 最多500个进程

示例

# 查看当前所有限制
ulimit -a
# 输出示例:
# core file size          (blocks, -c) 0
# data seg size           (kbytes, -d) unlimited
# file size               (blocks, -f) unlimited
# max locked memory       (kbytes, -l) 64
# max memory size         (kbytes, -m) unlimited
# open files                      (-n) 1024
# pipe size            (512 bytes, -p) 8
# stack size              (kbytes, -s) 8192
# cpu time               (seconds, -t) unlimited
# max user processes              (-u) 500
# virtual memory          (kbytes, -v) unlimited

# 设置同时打开的文件数为2048
ulimit -n 2048

# 允许生成core文件(用于调试)
ulimit -c unlimited

# 设置最大进程数为1000
ulimit -u 1000

2. csh/tcsh中的limit和unlimit命令

基本语法

limit [资源] [限制值]
unlimit [资源]

常用资源名称

cputime      # CPU时间(秒)
filesize     # 文件大小(块)
datasize     # 数据段大小(KB)
stacksize    # 栈大小(KB)
coredumpsize # core文件大小(块)
memoryuse    # 内存使用(KB)
descriptors  # 文件描述符数量

示例

# 查看所有限制
limit

# 设置具体限制
limit coredumpsize unlimited  # 允许生成core文件
limit descriptors 2048        # 设置文件描述符为2048
limit memoryuse 512000        # 设置内存限制为500MB

# 取消特定限制
unlimit coredumpsize          # 取消core文件大小限制
unlimit descriptors           # 取消文件描述符限制

# 取消所有限制
unlimit

3. 永久设置资源限制

方法1:修改profile文件(用户级别)

# 对于bash用户,编辑 ~/.bashrc 或 ~/.bash_profile
echo "ulimit -n 65535" >> ~/.bashrc
echo "ulimit -c unlimited" >> ~/.bashrc
source ~/.bashrc

# 对于csh/tcsh用户,编辑 ~/.cshrc
echo "limit descriptors 65535" >> ~/.cshrc
echo "limit coredumpsize unlimited" >> ~/.cshrc
source ~/.cshrc

方法2:修改系统配置文件(系统级别)

# 编辑 /etc/security/limits.conf
# 格式:<domain> <type> <item> <value>
* soft nofile 65535     # 所有用户软限制文件数
* hard nofile 65535     # 所有用户硬限制文件数
root soft nofile 65535  # root用户
root hard nofile 65535
user1 soft nproc 2000   # 用户user1的进程数限制
user1 hard nproc 3000

方法3:创建配置文件(CentOS/RHEL)

# 在 /etc/security/limits.d/ 创建配置文件
echo "* soft nproc 65535" > /etc/security/limits.d/90-nproc.conf
echo "* hard nproc 65535" >> /etc/security/limits.d/90-nproc.conf

4. 实际应用场景

场景1:提高服务器性能

# 增加打开文件数限制(适合Web服务器)
ulimit -n 65535
echo "ulimit -n 65535" >> /etc/profile

# 增加进程数限制
ulimit -u 65535

场景2:开发调试

# 允许生成core文件
ulimit -c unlimited
echo "ulimit -c unlimited" >> ~/.bashrc

# 设置core文件生成路径
echo "core.%e.%p.%t" > /proc/sys/kernel/core_pattern

场景3:防止资源滥用

# 限制普通用户资源使用
# 在 /etc/security/limits.conf 中添加:
@users hard nproc 200      # 用户组最多200进程
@users hard fsize 50       # 文件大小50块
@users hard cpu 7200       # CPU时间2小时

5. 查看系统全局限制

# 查看系统级别的文件描述符限制
cat /proc/sys/fs/file-max

# 查看当前已使用的文件描述符
cat /proc/sys/fs/file-nr

# 临时修改系统限制
sysctl -w fs.file-max=100000

6. 注意事项

  1. 软限制 vs 硬限制

    • 软限制:当前生效的限制,可以被用户修改,但不能超过硬限制
    • 硬限制:系统允许的最大值,只有root可以修改
  2. 会话生效

    • ulimit只对当前shell会话及其子进程有效
    • 退出shell后限制失效
  3. root权限

    • 普通用户只能降低自己的限制,不能提高
    • root用户可以设置任何限制
  4. 资源类型

    • 有些资源限制对系统安全很重要,如nproc(进程数)
    • 合理设置可以防止系统被意外或恶意耗尽资源

7. 常用组合命令

# 查看当前shell的所有限制
ulimit -a

# 只查看文件描述符限制
ulimit -n

# 只查看进程数限制
ulimit -u

# 设置并验证
ulimit -n 65535 && ulimit -n

# 永久设置(针对特定用户)
echo "ulimit -n 65535" >> /home/username/.bashrc

这些资源限制对于系统管理和性能调优非常重要,合理设置可以避免程序因资源耗尽而崩溃,同时也能防止恶意程序过度消耗系统资源。

posted on 2025-12-03 19:43  SOC验证工程师  阅读(28)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3