惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
博客园 - 聂微东
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
L
LangChain Blog
I
InfoQ
T
Tailwind CSS Blog
博客园 - 【当耐特】
V
V2EX
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
Vercel News
Vercel News
雷峰网
雷峰网
量子位
A
About on SuperTechFans
Martin Fowler
Martin Fowler
H
Help Net Security

博客园 - emanlee

python match case , 给出简单示例,并给出解释 Django3 核心入门知识点 HTML + CSS + JS 入门核心知识点 vs code 使用python,必须安装python解释器 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 Word里打出“方框中间带勾”的符号 Windows 10/11 安装 MySQL 5.7 步骤(内部使用) Python编程语言的运行速度(CPU时间),与C语言对比 设置MySQL随操作系统Ubuntu启动 2026年秋季,2027年春季,西安理工大学 校历 博文阅读密码验证 - 博客园 Windows 11,用任务栏的搜索框搜索到一个软件,点击无法打开, 是bug 拆分视频的软件工具,Avidemux 开源免费 无法在此设备上加载驱动程序,可行可用 ubuntu 设置北京日期时间 mysql 在新电脑上导入,出现错误:ERROR at line 4019: Unknown command '\''. - emanlee 安装 yarn npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 - emanlee VS code, 最近打开过哪些项目或文件夹,把这些备份下来,到另外一台电脑上恢复 傲梅分区助手 【好用】 ubuntu 可以使用Windows远程桌面连接吗?【可以】 把xshell的全部连接和密码,从一台Windows 10电脑,迁移到Windows11电脑。 Windows 远程桌面(mstsc)完整迁移方案(含历史连接记录、RDP 配置、保存的账号密码)【可行】 Endnote,如何能完整迁移库和模版 ubuntu 安装 locate
Ubuntu 修改 ulimit‑n(nofile,最大打开文件数)
emanlee · 2026-09-05 · via 博客园 - emanlee

Ubuntu 修改 ulimit‑n(nofile,最大打开文件数)

⚠️关键点:

  1. /etc/security/limits.conf 只对登录 shell 会话生效;systemd 托管的后台服务完全忽略该文件
  2. 进程一旦启动,ulimit 不会动态更新,必须重启进程 / 服务才生效
  3. 两层限制:用户层 ulimit;内核全局fs.file‑max

1. 查看当前值

# 当前shell软限制
ulimit -n
(base) [root@VM-8-12-centos ~]# ulimit -n
100001
# 当前shell硬限制 ulimit -Hn
(base) [root@VM-8-12-centos ~]# ulimit -Hn
100002
# 查看某个正在运行进程真实限制(PID替换成你的进程号) cat /proc/<PID>/limits | grep "Max open files"
# systemd服务查看LimitNOFILE systemctl show yourservice --property=LimitNOFILE
(base) [root@VM-8-12-centos ~]# systemctl show yourservice --property=LimitNOFILE
LimitNOFILE=1048576

# 内核全局最大文件句柄 sysctl fs.file-max
(base) [root@VM-8-12-centos ~]# sysctl fs.file-max
fs.file-max = 198942

2. 临时修改(仅当前 shell,重启 / 退出失效)

ulimit -n 65536

3. 普通登录用户(ssh 登录、本地终端)永久修改

编辑 limits.conf

sudo nano /etc/security/limits.conf

文件末尾追加(示例 65536,按需调整):

* soft nofile  65536
* hard nofile  65536
root soft nofile 65536
root hard nofile 65536

root 必须单独写,*不覆盖 root 用户。

检查 PAM 是否开启(Ubuntu 默认开启):

grep pam_limits.so /etc/pam.d/common-session

要有:session required pam_limits.so,没有就手动加上腾讯云。

生效:完全注销退出登录,重新 ssh/login,不要 su 切换,再执行ulimit‑n验证。

4. 重要:systemd 后台服务(systemctl 启动的程序)

limits.conf 对 systemd 服务无效!! 必须改 systemd 配置。

方式 A:仅单个服务(推荐,最小改动)

sudo systemctl edit myapp.service

填入:

[Service]
# soft:hard,示例:软65536,硬1048576
LimitNOFILE=65536:1048576

保存退出,重载并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart myapp

方式 B:全局所有 systemd 服务默认值

sudo mkdir -p /etc/systemd/system.conf.d
sudo nano /etc/systemd/system.conf.d/99-nofile.conf
[Manager]
DefaultLimitNOFILE=65536:1048576

生效:

sudo systemctl daemon-reexec

daemon‑reexec 重启 systemd 主进程,所有已运行的 systemd 服务需要各自重启才会拿到新限制,旧进程保持旧值。

5. 内核全局上限(fs.file‑max,所有进程合计)

一般默认足够,高并发场景调大:

sudo nano /etc/sysctl.conf
fs.file-max = 2097152

应用:

sudo sysctl -p

常见踩坑排查清单

  1. 修改 limits.conf 后ulimit‑n不变:没有完全注销重登录,su/sudo 不会加载 pam_limits,新开 ssh 会话测试。
  2. shell 里 ulimit‑n 正确,但 systemd 服务进程看/proc/PID/limits还是 1024:没有修改 systemd 的 LimitNOFILE,服务未重启
  3. 设置值超过内核fs.nr_open会失败;LimitNOFILE硬值不能超过fs.nr_open
  4. 已经启动的旧进程不会自动更新 ulimit,必须重启进程

验证命令集合,复制直接运行

echo "=== shell ulimit -n ==="
ulimit -n
ulimit -Hn
echo "=== kernel fs.file-max ==="
sysctl fs.file-max
echo "=== systemd全局默认 ==="
systemctl show --property=DefaultLimitNOFILE

如果你告诉我:是 ssh 登录运行程序,还是 systemd service 托管,我可以给你直接复制粘贴的整套配置。