如何轻松突破Ubuntu ulimit限制,实现系统性能的显著提升?

更新于
2026-10-01 04:43:48
2阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐
话说回来,

你是否在 Ubuntu 程序上遇到文件描述符或进程数限制导致应用程序频繁报错、性能低下?按理说,这些资源限制常常让本该顺畅运行的服务变得像乌龟一样慢。

一、认识 ulimit:痛点背后的根源

ulimit 用来控制单个进程可使用的程序资源。常见的限制包括:

如何轻松突破Ubuntu ulimit限制,实现系统性能的显著提升?
  • 文件描述符决定一次能打开多少个文件句柄。
  • 使用者进程数决定同一使用者能同时运行多少个进程。

当这些值被设置得过低时你会看到:

  • 数据库连接池耗尽;
  • Nginx/Apache 无法接受新请求;
  • Node.js/Go 服务出现 “too many open files” 错误。

二、临时调整:立即提高性能的第一步先

如果你只是想快速验证更高阈值是否能处理问题。可以在当前 shell 会话中临时修改:

# 查看当前阈值
ulimit -a
# 临时提高文件描述符和进程数
ulimit -n 4096 # 文件描述符上限
ulimit -u 1024 # 使用者进程数上限
# 验证更改
ulimit -a

此方法不需要重启,只适用于当前终端会话。若需要对所有使用者生效,请参考后续章节。

三、持久化配置:让更改永久生效

a) /etc/security/limits.conf

Edit file and add or modify following lines :

* soft nofile 4096
* hard nofile 4096
* soft nproc 1024
* hard nproc 1024

After saving,eir reboot or re‑login for changes to take effect.

b) /etc/profile 或 ~/.bashrc

Add se commands to automatically set limits each time a new shell starts:

# /etc/profile snippet
ulimit -n 4096
ulimit -u 1024
source /etc/profile

c) systemd 服务级别限制

If you want to raise limits for a particular service。edit its unit file:

如何轻松突破Ubuntu ulimit限制,实现系统性能的显著提升?

LimitNOFILE=4096
LimitNPROC=1024
Restart=always
RestartSec=10s
# After editing:
sudo systemctl daemon-reload && sudo systemctl restart postgresql.service

四、GRUB 参数:程序启动时就预设资源阈值

This approach ensures that even before any login happens,kernel enforces higher limits.

  1. Edit /etc/default/grub: find line starting with GRUB_CMDLINE_LINUX_DEFAULT** and append your settings.
  2. Add an inline script that sets limits early in boot:
  3. # Example snippet in GRUB_CMDLINE_LINUX_DEFAULT:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX="... your or params ..."
    # Create /etc/init.d/set_ulimits.sh
    #!/bin/bash
    # Set global limits at boot time before any user logs in.
    echo '* soft nofile 4096'> /etc/security/limits.d/99-ulimits.conf
    echo '* hard nofile 4096'>> /etc/security/limits.d/99-ulimits.conf
    echo '* soft nproc 1024'>> /etc/security/limits.d/99-ulimits.conf
    echo '* hard nproc 1024'>> /etc/security/limits.d/99-ulimits.conf
    chmod +x /etc/init.d/set_ulimits.sh
    # Add it to rc.local or systemd startup.
    sudo update-grub && sudo reboot
    

五、容器化环境中的 ulimit 调整

  • Docker: -m --cpus= --ulimit nofile=65536:65536 --ulimit nproc=8192:8192 
  • Kubernetes: : resources: requests: cpu这方面。 "500m" 再看memory,"512Mi" 再看limits,cpu: "1000m" 说到memory,"1Gi" securityContext: privileged: false allowPrivilegeEscalation: false runAsUser: capabilities: 说到add,- SYS_RESOURCE 
  • Avoid hitting host-level limits by specifying container-specific overrides.

六、常见问题与常用方法

  • 超大阈值可能导致程序不稳定: 不要一次性把参数调到极高,例如>1M 的文件描述符;先逐步提高并观察程序负载。
  • 某些 PAM 配置会覆盖全局设置: 检查 /etc/pam.d/common-session 和 common-session-noninteractive 是否引用了 pam_limits.so。
  • systemd 服务需显式声明 Limit…参数: 否则即使全局已提高,也会被服务单元默认限制。
  • 容器与宿主机共享内核资源: 若宿主机已接近硬件极限。提高容器阈值不会帮助性能,只会增加崩溃风险。
  • 重启后依旧受限: 确认修改的是正确的配置文件,而且没有被其它脚本或服务覆盖;使用 dmesg | grep limit_error_log_level 。

& 行动清单 🚀

  • 诊断现有阈值 → 临时测试提高 → 持久化配置 → 容器环境调整 → 定期监控日志。 每一步都可根据自己的业务场景微调。别忘了备份原始配置文件,以防万一。开始行动吧,让你的 Ubuntu 程序彻底摆脱“慢跑”状态!如有进一步需求,可随时咨询专业运维团队或社区支持。

标签:Ubuntu
话说回来,

你是否在 Ubuntu 程序上遇到文件描述符或进程数限制导致应用程序频繁报错、性能低下?按理说,这些资源限制常常让本该顺畅运行的服务变得像乌龟一样慢。

一、认识 ulimit:痛点背后的根源

ulimit 用来控制单个进程可使用的程序资源。常见的限制包括:

如何轻松突破Ubuntu ulimit限制,实现系统性能的显著提升?
  • 文件描述符决定一次能打开多少个文件句柄。
  • 使用者进程数决定同一使用者能同时运行多少个进程。

当这些值被设置得过低时你会看到:

  • 数据库连接池耗尽;
  • Nginx/Apache 无法接受新请求;
  • Node.js/Go 服务出现 “too many open files” 错误。

二、临时调整:立即提高性能的第一步先

如果你只是想快速验证更高阈值是否能处理问题。可以在当前 shell 会话中临时修改:

# 查看当前阈值
ulimit -a
# 临时提高文件描述符和进程数
ulimit -n 4096 # 文件描述符上限
ulimit -u 1024 # 使用者进程数上限
# 验证更改
ulimit -a

此方法不需要重启,只适用于当前终端会话。若需要对所有使用者生效,请参考后续章节。

三、持久化配置:让更改永久生效

a) /etc/security/limits.conf

Edit file and add or modify following lines :

* soft nofile 4096
* hard nofile 4096
* soft nproc 1024
* hard nproc 1024

After saving,eir reboot or re‑login for changes to take effect.

b) /etc/profile 或 ~/.bashrc

Add se commands to automatically set limits each time a new shell starts:

# /etc/profile snippet
ulimit -n 4096
ulimit -u 1024
source /etc/profile

c) systemd 服务级别限制

If you want to raise limits for a particular service。edit its unit file:

如何轻松突破Ubuntu ulimit限制,实现系统性能的显著提升?

LimitNOFILE=4096
LimitNPROC=1024
Restart=always
RestartSec=10s
# After editing:
sudo systemctl daemon-reload && sudo systemctl restart postgresql.service

四、GRUB 参数:程序启动时就预设资源阈值

This approach ensures that even before any login happens,kernel enforces higher limits.

  1. Edit /etc/default/grub: find line starting with GRUB_CMDLINE_LINUX_DEFAULT** and append your settings.
  2. Add an inline script that sets limits early in boot:
  3. # Example snippet in GRUB_CMDLINE_LINUX_DEFAULT:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX="... your or params ..."
    # Create /etc/init.d/set_ulimits.sh
    #!/bin/bash
    # Set global limits at boot time before any user logs in.
    echo '* soft nofile 4096'> /etc/security/limits.d/99-ulimits.conf
    echo '* hard nofile 4096'>> /etc/security/limits.d/99-ulimits.conf
    echo '* soft nproc 1024'>> /etc/security/limits.d/99-ulimits.conf
    echo '* hard nproc 1024'>> /etc/security/limits.d/99-ulimits.conf
    chmod +x /etc/init.d/set_ulimits.sh
    # Add it to rc.local or systemd startup.
    sudo update-grub && sudo reboot
    

五、容器化环境中的 ulimit 调整

  • Docker: -m --cpus= --ulimit nofile=65536:65536 --ulimit nproc=8192:8192 
  • Kubernetes: : resources: requests: cpu这方面。 "500m" 再看memory,"512Mi" 再看limits,cpu: "1000m" 说到memory,"1Gi" securityContext: privileged: false allowPrivilegeEscalation: false runAsUser: capabilities: 说到add,- SYS_RESOURCE 
  • Avoid hitting host-level limits by specifying container-specific overrides.

六、常见问题与常用方法

  • 超大阈值可能导致程序不稳定: 不要一次性把参数调到极高,例如>1M 的文件描述符;先逐步提高并观察程序负载。
  • 某些 PAM 配置会覆盖全局设置: 检查 /etc/pam.d/common-session 和 common-session-noninteractive 是否引用了 pam_limits.so。
  • systemd 服务需显式声明 Limit…参数: 否则即使全局已提高,也会被服务单元默认限制。
  • 容器与宿主机共享内核资源: 若宿主机已接近硬件极限。提高容器阈值不会帮助性能,只会增加崩溃风险。
  • 重启后依旧受限: 确认修改的是正确的配置文件,而且没有被其它脚本或服务覆盖;使用 dmesg | grep limit_error_log_level 。

& 行动清单 🚀

  • 诊断现有阈值 → 临时测试提高 → 持久化配置 → 容器环境调整 → 定期监控日志。 每一步都可根据自己的业务场景微调。别忘了备份原始配置文件,以防万一。开始行动吧,让你的 Ubuntu 程序彻底摆脱“慢跑”状态!如有进一步需求,可随时咨询专业运维团队或社区支持。

标签:Ubuntu