在 CentOS 系统中,ulimit 命令用于控制 shell 进程及其子进程的资源限制。通过脚本设置 ulimit 可以确保在系统启动时或特定用户登录时自动应用所需的资源限制。以下是几种常见的方法来通过脚本设置 ulimit:
.bashrc 或 .bash_profile 中设置适用于单个用户,每次该用户登录时自动应用设置。
编辑用户的 .bashrc 文件
打开终端,使用文本编辑器(如 vi 或 nano)编辑用户的 .bashrc 文件:
vi ~/.bashrc
添加 ulimit 设置
在文件末尾添加所需的 ulimit 设置。例如,设置最大文件描述符数为 65535:
# 设置最大文件描述符数
ulimit -n 65535
# 设置最大进程数
ulimit -u 4096
# 设置虚拟内存限制(例如 8GB)
ulimit -v 8388608
说明:
-n:文件描述符限制-u:用户进程数限制-v:虚拟内存限制(以 KB 为单位)保存并退出编辑器
如果使用 vi,按 Esc 键,输入 :wq 并按回车保存退出。
使设置生效
运行以下命令使更改立即生效:
source ~/.bashrc
/etc/profile 或 /etc/security/limits.conf 中设置适用于所有用户或在系统级别强制执行资源限制。
/etc/profile适用于所有登录 shell 的用户。
编辑 /etc/profile 文件
sudo vi /etc/profile
添加 ulimit 设置
在文件末尾添加所需的 ulimit 设置:
# 设置最大文件描述符数
ulimit -n 65535
# 设置最大进程数
ulimit -u 4096
# 设置虚拟内存限制(例如 8GB)
ulimit -v 8388608
保存并退出编辑器
使设置生效
重新登录用户或运行:
source /etc/profile
/etc/security/limits.conf提供更细粒度的控制,可以针对特定用户或用户组设置限制。
编辑 /etc/security/limits.conf 文件
sudo vi /etc/security/limits.conf
添加限制条目
每行定义一个限制,格式为:
<domain> <type> <item> <value>
<domain>:可以是用户名、用户组名,或 * 表示所有用户。<type>:soft(软限制)或 hard(硬限制)。<item>:资源项,如 nofile、nproc 等。<value>:限制值。示例:
# 设置所有用户的最大文件描述符数
* soft nofile 65535
* hard nofile 65535
# 设置特定用户(例如 user1)的最大进程数
user1 soft nproc 4096
user1 hard nproc 4096
# 设置特定用户组的虚拟内存限制
@developers soft as 8388608
@developers hard as 8388608
保存并退出编辑器
确保 PAM 配置启用 limits.conf
编辑 /etc/pam.d/system-auth 或 /etc/pam.d/login 文件,确保包含以下行:
session required pam_limits.so
使设置生效
重新登录用户或重启系统以应用更改。
适用于需要在服务启动时设置 ulimit 的场景。
创建或编辑 systemd 服务单元文件
例如,编辑 /etc/systemd/system/my_service.service:
sudo vi /etc/systemd/system/my_service.service
添加 LimitNOFILE 等指令
在 [Service] 部分添加所需的限制:
[Unit]
Description=My Custom Service
[Service]
ExecStart=/usr/bin/my_application
LimitNOFILE=65535
LimitNPROC=4096
# 其他限制项...
[Install]
WantedBy=multi-user.target
重新加载 systemd 配置
sudo systemctl daemon-reload
重启服务
sudo systemctl restart my_service
可以创建一个登录脚本,在用户登录时自动执行 ulimit 设置。
创建脚本文件
例如,创建 /etc/profile.d/ulimit.sh:
sudo vi /etc/profile.d/ulimit.sh
添加 ulimit 设置
#!/bin/bash
ulimit -n 65535
ulimit -u 4096
ulimit -v 8388608
赋予执行权限
sudo chmod +x /etc/profile.d/ulimit.sh
使设置生效
重新登录用户或运行:
source /etc/profile.d/ulimit.sh
权限问题:修改全局设置(如 /etc/profile 或 /etc/security/limits.conf)通常需要超级用户权限。
持久性:ulimit 设置在当前 shell 会话中有效。要使其在系统重启后持续生效,需通过上述配置文件进行设置。
资源限制的类型:ulimit 支持多种资源限制项,具体可参考 ulimit -a 查看所有可用选项。
系统限制:某些资源限制可能受到内核参数的限制,如 /proc/sys/kernel/ 下的相关文件。必要时,需调整这些内核参数以允许更高的限制。
通过以上方法,您可以根据需求选择合适的方式通过脚本设置 CentOS 的 ulimit,确保系统和应用程序在资源使用上得到合理的控制和管理。