永久修改 Debian 12 的 ulimit 参数:解决重启后限制不生效问题

Linux 系统中,ulimit 是一个用于控制用户资源限制的重要工具。通过它,我们可以设置文件描述符数量、进程数、栈大小等资源限制。然而,在 Debian 12 中,许多用户发现即使修改了 /etc/security/limits.conf,重启后 ulimit 的限制仍然恢复为默认值(如 1024)。本文将详细介绍如何永久修改 ulimit 参数,并解决重启后限制不生效的问题。


问题背景

在 Debian 12 中,ulimit 的默认文件描述符限制通常为 1024。对于需要高并发的应用(如 Web 服务器、数据库等),这个值显然不够。虽然可以通过修改 /etc/security/limits.conf 来调整限制,但在 systemd 系统中,这些设置可能会被覆盖,导致重启后限制失效。

此外,/etc/security/limits.conf 中的通配符 *root 用户无效。这意味着即使你为所有用户设置了限制,root 用户的限制可能仍然保持不变。本文将解决这些问题,并确保 ulimit 参数永久生效。


解决方案

要永久修改 ulimit 参数并确保其生效,需要从以下几个方面入手:

1. 修改 /etc/security/limits.conf

这是传统的资源限制配置文件,适用于通过 PAM 登录的会话。使用 vi 编辑文件:

sudo vi /etc/security/limits.conf

添加以下内容(以文件描述符为例):

root            soft    core            unlimited
root            soft    nofile          65535
*               soft    core            unlimited
*               soft    nofile          65535
  • root 表示针对 root 用户的设置。
  • * 表示所有用户(不包括 root)。
  • nofile 表示最大文件描述符数量,其他参数如 nproc(进程数)可根据需求调整。

保存并退出。

注意事项:

  • 根据 man 5 limits.conf,通配符 *root 用户无效。必须显式指定 root 用户名。
  • 如果你主要使用 root 用户部署环境,请确保为 root 单独设置限制。

2. 配置 systemd 的全局限制

在 systemd 系统中,用户级服务的资源限制由 systemd 控制,而非 limits.conf。因此,需要修改 systemd 的全局配置文件。

使用 vi 编辑文件:

sudo vi /etc/systemd/system.conf

找到并取消注释以下行(修改值后保存):

DefaultLimitNOFILE=65536
DefaultLimitNOFILESoft=65536

重新加载 systemd 配置:

sudo systemctl daemon-reload

3. 检查 PAM 配置

确保 PAM(Pluggable Authentication Modules)启用了 pam_limits 模块,以便加载 /etc/security/limits.conf 中的设置。

使用 vi 编辑文件:

sudo vi /etc/pam.d/common-session

确认存在以下行(若无则添加):

session required pam_limits.so

保存并退出。


4. 重启并验证

完成上述配置后,重启系统以确保所有更改生效:

sudo reboot

验证方法:

# 用户会话(需通过登录 shell)
ulimit -n          # 应显示 65536

# 检查内核全局限制
cat /proc/sys/fs/file-max  # 应显示 2097152 或更大

# 检查 systemd 服务的默认限制
systemctl show --property DefaultLimitNOFILE

常见问题原因

  • 未使用 su -su 不加载 PAM 会话,改用 su - 或直接登录。
  • 图形界面限制:某些桌面环境(如 GNOME)会覆盖限制,需在 systemd 用户实例中配置。
  • 第三方工具干扰:如 Docker 或某些容器化工具可能单独设置限制。

标签: Linux, 运维

相关文章

KingbaseES V9 全自动静默安装指南与一键部署脚本

一、静默安装原理与优势KingbaseES的静默安装通过预置配置文件实现无人值守部署,特别适合批量环境与自动化运维场景。相比交互式安装,静默模式具有以下优势:通过配置文件统一管理安装参数支持自动...

一些编程语言学习心得

作为一名专注于PHP、Go、Java和前端开发(JavaScript、HTML、CSS)的开发者,还得会运维、会谈客户....不想了,都是泪,今天说说这些年学习编程语言的一些体会,不同编程语言在...

在1Panel中解决Docker内PHP网络请求超时问题

在1Panel管理面板中,我们可能会遇到在使用Docker运行的PHP环境中发起网络请求时出现的超时问题。最近给博客写了一个远程请求插件,之前还是正常,这两天突然请求500错误了...问题分析当...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件