温馨提示×

如何通过脚本设置CentOS ulimit

小樊
35
2025-12-13 15:55:25
栏目: 智能运维

在 CentOS 系统中,ulimit 命令用于控制 shell 进程及其子进程的资源限制。通过脚本设置 ulimit 可以确保在系统启动时或特定用户登录时自动应用所需的资源限制。以下是几种常见的方法来通过脚本设置 ulimit

方法一:在用户的 .bashrc.bash_profile 中设置

适用于单个用户,每次该用户登录时自动应用设置。

步骤:

  1. 编辑用户的 .bashrc 文件

    打开终端,使用文本编辑器(如 vinano)编辑用户的 .bashrc 文件:

    vi ~/.bashrc
    
  2. 添加 ulimit 设置

    在文件末尾添加所需的 ulimit 设置。例如,设置最大文件描述符数为 65535:

    # 设置最大文件描述符数
    ulimit -n 65535
    
    # 设置最大进程数
    ulimit -u 4096
    
    # 设置虚拟内存限制(例如 8GB)
    ulimit -v 8388608
    

    说明:

    • -n:文件描述符限制
    • -u:用户进程数限制
    • -v:虚拟内存限制(以 KB 为单位)
  3. 保存并退出编辑器

    如果使用 vi,按 Esc 键,输入 :wq 并按回车保存退出。

  4. 使设置生效

    运行以下命令使更改立即生效:

    source ~/.bashrc
    

方法二:在全局的 /etc/profile/etc/security/limits.conf 中设置

适用于所有用户或在系统级别强制执行资源限制。

方法二A:使用 /etc/profile

适用于所有登录 shell 的用户。

  1. 编辑 /etc/profile 文件

    sudo vi /etc/profile
    
  2. 添加 ulimit 设置

    在文件末尾添加所需的 ulimit 设置:

    # 设置最大文件描述符数
    ulimit -n 65535
    
    # 设置最大进程数
    ulimit -u 4096
    
    # 设置虚拟内存限制(例如 8GB)
    ulimit -v 8388608
    
  3. 保存并退出编辑器

  4. 使设置生效

    重新登录用户或运行:

    source /etc/profile
    

方法二B:使用 /etc/security/limits.conf

提供更细粒度的控制,可以针对特定用户或用户组设置限制。

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

    sudo vi /etc/security/limits.conf
    
  2. 添加限制条目

    每行定义一个限制,格式为:

    <domain> <type> <item> <value>
    
    • <domain>:可以是用户名、用户组名,或 * 表示所有用户。
    • <type>soft(软限制)或 hard(硬限制)。
    • <item>:资源项,如 nofilenproc 等。
    • <value>:限制值。

    示例:

    # 设置所有用户的最大文件描述符数
    * soft nofile 65535
    * hard nofile 65535
    
    # 设置特定用户(例如 user1)的最大进程数
    user1 soft nproc 4096
    user1 hard nproc 4096
    
    # 设置特定用户组的虚拟内存限制
    @developers soft as 8388608
    @developers hard as 8388608
    
  3. 保存并退出编辑器

  4. 确保 PAM 配置启用 limits.conf

    编辑 /etc/pam.d/system-auth/etc/pam.d/login 文件,确保包含以下行:

    session required pam_limits.so
    
  5. 使设置生效

    重新登录用户或重启系统以应用更改。

方法三:使用 systemd 服务单元文件设置

适用于需要在服务启动时设置 ulimit 的场景。

步骤:

  1. 创建或编辑 systemd 服务单元文件

    例如,编辑 /etc/systemd/system/my_service.service

    sudo vi /etc/systemd/system/my_service.service
    
  2. 添加 LimitNOFILE 等指令

    [Service] 部分添加所需的限制:

    [Unit]
    Description=My Custom Service
    
    [Service]
    ExecStart=/usr/bin/my_application
    LimitNOFILE=65535
    LimitNPROC=4096
    # 其他限制项...
    
    [Install]
    WantedBy=multi-user.target
    
  3. 重新加载 systemd 配置

    sudo systemctl daemon-reload
    
  4. 重启服务

    sudo systemctl restart my_service
    

方法四:使用脚本在登录时设置

可以创建一个登录脚本,在用户登录时自动执行 ulimit 设置。

步骤:

  1. 创建脚本文件

    例如,创建 /etc/profile.d/ulimit.sh

    sudo vi /etc/profile.d/ulimit.sh
    
  2. 添加 ulimit 设置

    #!/bin/bash
    ulimit -n 65535
    ulimit -u 4096
    ulimit -v 8388608
    
  3. 赋予执行权限

    sudo chmod +x /etc/profile.d/ulimit.sh
    
  4. 使设置生效

    重新登录用户或运行:

    source /etc/profile.d/ulimit.sh
    

注意事项

  1. 权限问题:修改全局设置(如 /etc/profile/etc/security/limits.conf)通常需要超级用户权限。

  2. 持久性ulimit 设置在当前 shell 会话中有效。要使其在系统重启后持续生效,需通过上述配置文件进行设置。

  3. 资源限制的类型ulimit 支持多种资源限制项,具体可参考 ulimit -a 查看所有可用选项。

  4. 系统限制:某些资源限制可能受到内核参数的限制,如 /proc/sys/kernel/ 下的相关文件。必要时,需调整这些内核参数以允许更高的限制。

通过以上方法,您可以根据需求选择合适的方式通过脚本设置 CentOS 的 ulimit,确保系统和应用程序在资源使用上得到合理的控制和管理。

0