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. 注意事项
-
软限制 vs 硬限制
- 软限制:当前生效的限制,可以被用户修改,但不能超过硬限制
- 硬限制:系统允许的最大值,只有root可以修改
-
会话生效
ulimit只对当前shell会话及其子进程有效- 退出shell后限制失效
-
root权限
- 普通用户只能降低自己的限制,不能提高
- root用户可以设置任何限制
-
资源类型
- 有些资源限制对系统安全很重要,如
nproc(进程数) - 合理设置可以防止系统被意外或恶意耗尽资源
- 有些资源限制对系统安全很重要,如
7. 常用组合命令
# 查看当前shell的所有限制
ulimit -a
# 只查看文件描述符限制
ulimit -n
# 只查看进程数限制
ulimit -u
# 设置并验证
ulimit -n 65535 && ulimit -n
# 永久设置(针对特定用户)
echo "ulimit -n 65535" >> /home/username/.bashrc
这些资源限制对于系统管理和性能调优非常重要,合理设置可以避免程序因资源耗尽而崩溃,同时也能防止恶意程序过度消耗系统资源。
浙公网安备 33010602011771号