Manjaro/Arch 彻底解决 "Too many open files":为什么你改的 limits.conf 不生效
问题现场
当你训练模型、处理大量文件或运行高并发服务时,突然出现:
Failed creating file: ... [Too many open files]
你按照标准方案修改了 /etc/security/limits.conf:
* soft nofile 65536
* hard nofile 65536
但重启后 ulimit -n 依然显示 1024 或 4096。为什么?
根本原因:Systemd 接管了资源限制
Manjaro(及 Arch 等现代 Linux 发行版)使用 Systemd 作为核心进程管理器。关键事实:
Systemd 管理的进程(包括用户桌面会话)在启动时会忽略传统的 limits.conf 配置!
它们只认 Systemd 自己的资源限制设置。
完整解决方案(四步走)
1. 修改系统级服务限制
sudo nano /etc/systemd/system.conf
取消注释并修改:
DefaultLimitNOFILE=65536:65536 # 格式:soft:hard
2. 修改用户级服务限制(关键!常被遗漏)
sudo nano /etc/systemd/user.conf
同样取消注释并修改:
DefaultLimitNOFILE=65536:65536
3. 重载配置并重启
# 重载系统配置
sudo systemctl daemon-reload
# 重载用户配置(必须执行!)
systemctl --user daemon-reload
# 彻底重启(否则不生效)
reboot
4. 验证生效情况
# 查看当前shell限制
ulimit -n # 应输出65536
# 检查任意进程的实际限制
sleep 1h & # 启动测试进程
cat /proc/$!/limits | grep "Max open files"
输出应包含:
Max open files 65536 65536 files
常见问题排查
1. 为什么桌面应用仍受限?
- 原因:图形应用由
systemd --user管理,只受user.conf约束 - 解决:确保修改了
user.conf并执行systemctl --user daemon-reload
2. 重启后部分终端仍显示旧限制
- 原因:终端会话未完全重启
- 解决:关闭所有终端窗口,重新打开新终端
3. 系统服务(如Docker)未生效
- 原因:系统服务受
system.conf约束 - 解决:确认已修改
system.conf并执行sudo systemctl daemon-reload
高级场景处理
只为特定服务增加限制
# 创建服务覆盖配置
sudo systemctl edit nginx.service
# 添加内容
[Service]
LimitNOFILE=1048576
临时调试解决方案
# 当前终端会话有效
ulimit -n 65536
# 修改运行中进程的限制
prlimit --pid <PID> --nofile=65536:65536
为什么 limits.conf 会失效?
limits.conf依赖 PAM 认证流程生效- Systemd 管理的进程(特别是桌面环境)绕过 PAM 初始化
- 用户级服务由
systemd --user直接启动,继承其默认限制
配置作用域总结
| 配置文件 | 影响范围 | 典型场景 |
|---|---|---|
/etc/systemd/system.conf |
系统级服务 | Docker, Nginx, PostgreSQL |
/etc/systemd/user.conf |
用户级进程 | 桌面应用,终端启动的脚本 |
/etc/security/limits.conf |
通过PAM登录的会话 | SSH登录,tty控制台 |
终极验证命令
# 查看系统全局限制
cat /proc/sys/fs/file-max
# 查看当前用户限制
ulimit -n
# 查看具体进程限制
cat /proc/$(pgrep -f your_process)/limits | grep open.files
# 查看已打开文件数
lsof -u $USER | wc -l
总结流程图
A[遇到错误] --> B{进程类型}
B -->|系统服务| C[修改 system.conf]
B -->|用户进程| D[修改 user.conf]
C --> E[执行双 reload]
D --> E
E --> F[重启系统]
F --> G[验证结果]
G -->|仍受限| H[检查特定服务]
Manjaro/Arch 彻底解决 "Too many open files":为什么你改的 limits.conf 不生效的更多相关文章
- 解决 browser-sync start --server --files 文件不能同步的问题!
解决 browser-sync start --server --files 文件不能同步的问题! 请看我的源命令: browser-sync start --server --file 'test2 ...
- [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数
[转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数 大话性能 · 2018年10月09日 · 最后由 大话性能 回复于 2018年10月09日 · ...
- Centos 修改limits.conf open files后不生效的解决办法
线上几台APACHE服务器报过三.四次open files的问题,导致服务不可用,执行ulimit -n 查看后,发现是默认的1024,找到原因所在了,就去修改下/etc/security/limit ...
- mysql5.7出现大量too many connections及too many open files错误,且配置最大连接数未生效
too many connections是由于mysql配置中连接数过少,不足以支撑当前的并发数,too many open files是由于mysql open_files_limit的值大小不够. ...
- Windows中Nginx配置nginx.conf不生效解决方法(路径映射)
Windows中Nginx配置nginx.conf不生效解决方法 今天在做Nginx项目的时候,要处理一个路径映射问题, location /evaluate/ { proxy_pass http:/ ...
- manjaro(arch)里的vbox 安装centos7后,centos无法联网的解决办法
第一步,在VirtualBox中设置网卡连接方式:点“设置”,在弹出的界面中点“网络”,最后选择“连接方式”为“桥接网卡”. 回到centOS中,进入终端,输入命令:ip addr,查看网络配置文件的 ...
- manjaro (arch) 安装搜狗输入法
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/sogou_input_install_in_arch_manja ...
- Manjaro/Arch linux 安装输入法
输入命令: sudo pacman -Syu fcitx fcitx-googlepinyin fcitx-im fcitx-configtool 编辑 ~/.xprofile:# xfcitxexp ...
- 解决Ubuntu系统的每次开机重启后,resolv.conf清空的问题
问题情况描述如下: 普及知识: /etc/resolv.conf ,其实是一个Link .它其实指向的是 /run/resolvconf/resolv.conf. Ubuntu 有一个 reso ...
- 解决iOS9苹果将原http协议改成了https协议问题
解决方法: 在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllo ...
随机推荐
- 开源姿势识别 Demo
最近项目中要用到姿势识别,调研了 BlazePose. MoveNet 等模型,以下是一些详细的对比. 包括 mediapipe 和 tfjs 等运行环境,webgl,webgpu,wasm 都做了尝 ...
- Gin CORS
Go 语言手搓一个简单的跨域还是比较容易的, 但自己手搓一批通用代码总归还是麻烦了点. 如果使用 Gin 的话, 有现成的跨域中间件可以用. github.com/gin-contrib/cors 注 ...
- yolov5常用命令记录
一.准备深度学习环境 首先,确保你的计算机上已经安装了Python.PyTorch以及CUDA等必要的深度学习框架和库.YOLOv5对Python版本和PyTorch版本有一定的要求,通常建议使用Py ...
- 使用Python解决Logistic方程
引言 在数学和计算机科学中,Logistic 方程是描述人口增长.传播过程等现象的一种常见模型.它通常用于表示一种有限资源下的增长过程,比如动物种群.疾病传播等.本文将带领大家通过 Python 实现 ...
- kette介绍-Step之Table output
表输入(Table output)介绍: Table output步骤常被用于将转换中的行集从内存持久化到数据库,对转换而言是 行集被拿出去的感觉,故名为输出.可以限制提交记录数量和指定插入的目标表 ...
- fiddler的自动响应器
1.点击autoresponder,勾选enable rules和unmatched requests passthrough 2.替换步骤 (1)把要替换的会话拉取到空白处,或者选中要替换的内容点击 ...
- 解决get和post请求提交数据中文乱码问题
目录 get请求乱码 乱码案例 解决办法 方法一:进行转码 方法二:修改tomcat中conf/server.xml post请求乱码 解决办法:在取参数之前设置编码格式 get请求乱码 Tomcat ...
- 通过SpringBoot配置文件配置Druid数据源
目录 引入坐标依赖 配置application.properties文件 新建一个controller观察使用的是哪一个数据源 在SpringBoot 1.X 中,spring-boot-starte ...
- 工具 | Hfish
0x00 简介 HFish是一款社区型免费蜜罐. 下载地址 HFish下载: HFish下载 0x01 功能说明 支持多种蜜罐服务 支持自定义Web蜜罐 支持流量牵引 支持端口扫描感知能力 支持多种告 ...
- ISO镜像做yum源
先上传一个镜像文件 centos-7-x86-1708.iso 挂载 mount -o loop /root/centos-7-x86-1708.iso /file 设置开机自动挂载 vi /etc/ ...