如何通过ulimit在CentOS中巧妙突破内存使用限制,实现系统性能飞跃?

更新于
2026-08-16 14:18:01
14阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

ulimit 与内存限制

在 CentOS 程序中,ulimit 是用来设置或查看当前 shell 进程及其子进程的资源限制的工具。它可以控制文件描述符、CPU 时间、进程数、虚拟内存等多种资源。最常见的需求之一就是调整 内存使用上限从而防止单个进程占用过多 RAM,导致程序整体性能下降甚至崩溃。

至于痛点一,应用频繁崩溃。程序响应慢

许多管理员在面对高并发或大型数据库时经常遇到“应用突然停止工作”或“程序卡顿”的情况。原因往往是某些进程被强制终止,因为它们触碰了默认的内存阈值。解决这类问题,需要先确认当前的 memory limit。再根据业务实际需求调整一下。

如何通过ulimit在CentOS中巧妙突破内存使用限制,实现系统性能飞跃?

快速排查步骤

# 查看所有资源限制
ulimit -a
# 关注虚拟内存和物理内存锁定两项
ulimit -v # 单位:KB
ulimit -m # 单位:KB

至于痛点二。临时提高不够灵活,缺乏持久化方案

仅在单次登录会话中执行 ulimit -v 4194304 等命令可以立即生效,但每次重新登录后都会恢复默认值。这给需要持续高性能运行的服务带来了不便。

A. 临时提高示例

# 将虚拟内存软硬限设为 8GB
ulimit -Sv 8388608 # soft limit
ulimit -Hv 8388608 # hard limit
# 或一次性设置软硬限相同
ulimit -v 8388608

B. 永久性提高

  • /etc/security/limits.conf: 对所有使用者统一设置。
  • .bashrc / .bash_profile: 针对特定使用者自动执行。
# 编辑 /etc/security/limits.conf
* soft memlock 512000 # 512MB soft lock
* hard memlock 512000 # 512MB hard lock
# 对于想要无上限的使用者。可使用 'unlimited'
username soft memlock unlimited
username hard memlock unlimited
# 在 ~/.bashrc 添加:
export MEMLOCK=unlimited
ulimit -l unlimited # 设置最大锁定页面大小为无限制

说到注意事项,

  • -m vs -v:-m 限制可锁定的物理内存; 话说回来,-v 限制可使用的虚拟内存。
  • `unlimited` 的前提:- 必须在 PAM 配置中允许 `pam_limits.so`。
  • `memlock` 必须与 kernel 参数 `vm.max_map_count` 配合使用,以避免因映射过多导致错误。

PAM & Sysctl 的配合使用

AWS Cloud 的大多数实例默认开启了 `/etc/pam.d/system-auth` 中 `pam_limits.so`。但若你手动禁用了它,则无法通过 limits.conf 生效。请确保以下行存在:

# /etc/pam.d/system-auth
session required pam_limits.so

如果你需要进一步调优,还可以修改 /etc/sysctl.conf :

# 增大最大可映射页面数
vm.max_map_count=262144
# 开启 ulimits 对 kernel 参数影响的支持
kernel.panic_on_oops=1
kernel.panic=30
sysctl -w vm.max_map_count=262144
sysctl --system

Smooth Transition: 从临时到永久配置的一步到位方案

  • Create a script :
#!/bin/bash
# 设置无穷大 virtual memory 和 memlock 上限
ulimit -v unlimited # 虚拟内存无限制
ulimit -l unlimited # 锁定页面无限制
echo "ULimits 已经永久生效"
exit 0
  • Add this script to /etc/profile.d/50-ulimits.sh :

# /etc/profile.d/50-ulimits.sh

if;n source /usr/local/bin/set_ulimits.sh fi chmod +x /etc/profile.d/50-ulimits.sh

如何通过ulimit在CentOS中巧妙突破内存使用限制,实现系统性能飞跃?

这样。无论是普通使用者还是 root 登录,都能自动获得你期望的 memory limit。

& 快速检查清单:

  • ✔️ 确认 pam_limits.so 已启用;
  • ✔️ 修改 /etc/security/limits.conf.bashrc
  • ✔️ 使用 ulimit -a 验证结果;
  • ✔️ 如有必要,再配合 sysctl 调整 kernel 参数。完成后你将不再受限于默认低阈值。CentOS 程序将拥有更大的可用 RAM,这样就能实现性能飞跃!

标签:CentOS

ulimit 与内存限制

在 CentOS 程序中,ulimit 是用来设置或查看当前 shell 进程及其子进程的资源限制的工具。它可以控制文件描述符、CPU 时间、进程数、虚拟内存等多种资源。最常见的需求之一就是调整 内存使用上限从而防止单个进程占用过多 RAM,导致程序整体性能下降甚至崩溃。

至于痛点一,应用频繁崩溃。程序响应慢

许多管理员在面对高并发或大型数据库时经常遇到“应用突然停止工作”或“程序卡顿”的情况。原因往往是某些进程被强制终止,因为它们触碰了默认的内存阈值。解决这类问题,需要先确认当前的 memory limit。再根据业务实际需求调整一下。

如何通过ulimit在CentOS中巧妙突破内存使用限制,实现系统性能飞跃?

快速排查步骤

# 查看所有资源限制
ulimit -a
# 关注虚拟内存和物理内存锁定两项
ulimit -v # 单位:KB
ulimit -m # 单位:KB

至于痛点二。临时提高不够灵活,缺乏持久化方案

仅在单次登录会话中执行 ulimit -v 4194304 等命令可以立即生效,但每次重新登录后都会恢复默认值。这给需要持续高性能运行的服务带来了不便。

A. 临时提高示例

# 将虚拟内存软硬限设为 8GB
ulimit -Sv 8388608 # soft limit
ulimit -Hv 8388608 # hard limit
# 或一次性设置软硬限相同
ulimit -v 8388608

B. 永久性提高

  • /etc/security/limits.conf: 对所有使用者统一设置。
  • .bashrc / .bash_profile: 针对特定使用者自动执行。
# 编辑 /etc/security/limits.conf
* soft memlock 512000 # 512MB soft lock
* hard memlock 512000 # 512MB hard lock
# 对于想要无上限的使用者。可使用 'unlimited'
username soft memlock unlimited
username hard memlock unlimited
# 在 ~/.bashrc 添加:
export MEMLOCK=unlimited
ulimit -l unlimited # 设置最大锁定页面大小为无限制

说到注意事项,

  • -m vs -v:-m 限制可锁定的物理内存; 话说回来,-v 限制可使用的虚拟内存。
  • `unlimited` 的前提:- 必须在 PAM 配置中允许 `pam_limits.so`。
  • `memlock` 必须与 kernel 参数 `vm.max_map_count` 配合使用,以避免因映射过多导致错误。

PAM & Sysctl 的配合使用

AWS Cloud 的大多数实例默认开启了 `/etc/pam.d/system-auth` 中 `pam_limits.so`。但若你手动禁用了它,则无法通过 limits.conf 生效。请确保以下行存在:

# /etc/pam.d/system-auth
session required pam_limits.so

如果你需要进一步调优,还可以修改 /etc/sysctl.conf :

# 增大最大可映射页面数
vm.max_map_count=262144
# 开启 ulimits 对 kernel 参数影响的支持
kernel.panic_on_oops=1
kernel.panic=30
sysctl -w vm.max_map_count=262144
sysctl --system

Smooth Transition: 从临时到永久配置的一步到位方案

  • Create a script :
#!/bin/bash
# 设置无穷大 virtual memory 和 memlock 上限
ulimit -v unlimited # 虚拟内存无限制
ulimit -l unlimited # 锁定页面无限制
echo "ULimits 已经永久生效"
exit 0
  • Add this script to /etc/profile.d/50-ulimits.sh :

# /etc/profile.d/50-ulimits.sh

if;n source /usr/local/bin/set_ulimits.sh fi chmod +x /etc/profile.d/50-ulimits.sh

如何通过ulimit在CentOS中巧妙突破内存使用限制,实现系统性能飞跃?

这样。无论是普通使用者还是 root 登录,都能自动获得你期望的 memory limit。

& 快速检查清单:

  • ✔️ 确认 pam_limits.so 已启用;
  • ✔️ 修改 /etc/security/limits.conf.bashrc
  • ✔️ 使用 ulimit -a 验证结果;
  • ✔️ 如有必要,再配合 sysctl 调整 kernel 参数。完成后你将不再受限于默认低阈值。CentOS 程序将拥有更大的可用 RAM,这样就能实现性能飞跃!

标签:CentOS