在Linux系统中,文件描述符(File Descriptor, FD)是操作系统管理打开文件、套接字、管道等资源的抽象标识。当进程或系统耗尽文件描述符时,会导致服务崩溃、连接失败等严重问题。以下是详细的排查和解决方案:

---

### **一、问题确认**
#### 1. **检查当前文件描述符使用情况**
   ```bash
   # 查看系统已使用的FD数量
   cat /proc/sys/fs/file-nr
   # 输出示例:7864  0  9223372036854775807
   # 分别表示:已分配FD数 | 未使用FD数 | 系统最大FD限制

   # 查看各进程的FD使用量(按使用量排序)
   lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | head
   ```

#### 2. **确认系统级限制**
   ```bash
   # 查看系统全局限制
   cat /proc/sys/fs/file-max
   # 临时修改限制(重启失效)
   sysctl -w fs.file-max=1000000
   ```

#### 3. **检查用户级限制**
   ```bash
   # 查看当前用户的软/硬限制
   ulimit -n      # 软限制
   ulimit -Hn     # 硬限制
   ```

---

### **二、临时解决方案**
#### 1. **增加进程的FD限制**
   ```bash
   # 临时提高当前会话的限制(仅对当前Shell有效)
   ulimit -n 65535
   ```

#### 2. **重启受影响的服务**
   ```bash
   # 找到高FD占用的进程并重启
   systemctl restart <service_name>
   ```

---

### **三、永久解决方案**
#### 1. **修改系统全局限制**
   ```bash
   # 编辑/etc/sysctl.conf,增加以下行
   fs.file-max = 1000000
   # 生效配置
   sysctl -p
   ```

#### 2. **修改用户级限制**
   ```bash
   # 编辑/etc/security/limits.conf,针对用户或组设置
   * soft nofile 65535    # 所有用户软限制
   * hard nofile 100000   # 所有用户硬限制
   # 特定用户示例
   www-data soft nofile 50000
   www-data hard nofile 100000
   ```

#### 3. **修改服务单元配置(Systemd)**
   ```bash
   # 编辑服务配置文件(如nginx)
   sudo systemctl edit nginx.service
   # 添加以下内容:
   [Service]
   LimitNOFILE=100000
   # 重载并重启服务
   systemctl daemon-reload
   systemctl restart nginx
   ```

---

### **四、深入排查与优化**
#### 1. **定位FD泄漏的进程**
   ```bash
   # 统计进程FD使用量
   ps aux | awk '{print $2}' | xargs -I {} sh -c 'echo {} $(ls /proc/{}/fd/ 2>/dev/null | wc -l)' | sort -k2 -nr | head
   ```

#### 2. **分析FD类型**
   ```bash
   # 查看某进程打开的FD详情(替换<PID>)
   ls -l /proc/<PID>/fd
   # 检查是否有异常(如大量未关闭的socket或文件)
   ```

#### 3. **代码层面修复**
   - **检查应用程序**:确保文件、套接字、数据库连接等资源使用后正确关闭。
   - **使用工具检测**:
     - `valgrind`(C/C++内存和FD泄漏检测)
     - `lsof -p <PID>`(实时监控进程FD)

#### 4. **内核参数调优(高并发场景)**
   ```bash
   # 增加TCP连接相关限制(避免socket耗尽)
   echo "net.ipv4.tcp_max_tw_buckets = 200000" >> /etc/sysctl.conf
   echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
   sysctl -p
   ```

---

### **五、预防措施**
1. **监控与告警**
   - 使用Prometheus+Grafana监控`file-nr`指标。
   - 设置告警规则(如FD使用率超过80%时触发)。

2. **定期维护**
   - 日志轮转(避免日志文件过多占用FD)。
   - 定期重启长期运行的服务(如数据库、Web服务器)。

3. **压力测试**
   - 使用工具(如`ab`、`wrk`)模拟高并发场景,提前发现FD瓶颈。

---

### **六、常见场景示例**
#### **案例1:Nginx服务器FD耗尽**
   ```bash
   # 1. 修改Nginx配置
   worker_rlimit_nofile 100000;
   events {
       worker_connections 50000;
   }
   # 2. 调整Systemd限制(见上文)
   ```

#### **案例2:MySQL连接泄漏**
   ```sql
   -- 查看当前连接数
   SHOW STATUS LIKE 'Threads_connected';
   -- 优化连接池配置(如JDBC的maxActive参数)
   ```

---

通过以上步骤,可彻底解决文件描述符耗尽问题。关键点在于:  
1. **合理设置系统/用户级限制**  
2. **定位并修复资源泄漏**  
3. **建立长期监控机制**。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/80457.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/80457.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/80457.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVGL简易计算器实战

文章目录 &#x1f4c1; 文件结构建议&#x1f539; eval.h 表达式求值头文件&#x1f539; eval.c 表达式求值实现文件&#xff08;带详细注释&#xff09;&#x1f539; ui.h 界面头文件&#x1f539; ui.c 界面实现文件&#x1f539; main.c 主函数入口✅ 总结 项目效果&…

使用countDownLatch导致的线程安全问题,线程不安全的List-ArrayList,线程安全的List-CopyOnWriteArrayList

示例代码 package com.example.demo.service;import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class UnSafeCDTest {Executor…

ALLinSSL:一站式SSL证书管理解决方案

引言 在当今互联网安全日益重要的背景下,SSL证书已成为保护网站安全的必备工具。然而,管理多个SSL证书常常是一项繁琐且容易出错的任务。ALLinSSL应运而生,它提供了一个一站式的SSL证书管理解决方案,大大简化了证书的申请、安装和更新过程。本文将深入介绍ALLinSSL的特性、…

嵌入式通信协议总览篇:万物互联的基石

嵌入式系统的世界,是靠协议“说话”的世界。 在你设计一个智能设备、构建一个工业控制系统、开发一款 IoT 网关时,一个核心问题始终绕不开:**这些设备之间如何“对话”?**答案就是——通信协议。 本篇作为系列第一章,将带你全面理解嵌入式通信协议的全貌,为后续深入学习…

【数据结构】红黑树(C++)

目录 一、红黑树的概念 二、红黑树的性质 三、红黑树结点定义 四、红黑树的操作 1. 插入操作 1.1 插入过程 1.2 调整过程 1.2.1 叔叔节点存在且为红色 1.2.2 叔叔节点存在且为黑色 1.2.3 叔叔节点不存在 2. 查找操作 2.1 查找逻辑 2.2 算法流程图 2.3 使用示例 …

Oracle数据库DBF文件收缩

这两天新部署了一套系统&#xff0c;数据库结构保持不变&#xff0c;牵扯导出表结构还有函数&#xff0c;图省事就直接新建用户&#xff0c;还原数据库了。然后咔咔咔&#xff0c;一顿删除delete&#xff0c;truncate&#xff0c;发现要不就是表删了&#xff0c;还有num_rows&a…

【字节拥抱开源】字节豆包团队开源首发 Seed-Coder 大模型

我们非常高兴地向大家介绍 Seed-Coder&#xff0c;它是一个功能强大、透明、参数高效的 8B 级开源代码模型系列&#xff0c;包括基础变体、指导变体和推理变体。Seed-Coder 通过以下亮点促进开放代码模型的发展。 以模型为中心&#xff1a;Seed-Coder主要利用大语言模型&#…

Qt 无边框窗口,支持贴边分屏

常规操作, 无法进行窗口的大小缩放和移动贴边分屏等操作 // 去掉标题栏,去掉工具栏&#xff0c;窗口置顶 setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);重点介绍 QWindowKit https://github.com/stdware/qwindowkit 跨平台的支持Windows\…

Qt 样式表:全面解析与应用指南

在 Qt 开发中,样式表(Style Sheets)是定义应用程序界面外观的关键工具。它采用文本格式的规则集合,借鉴了 CSS 语法,借助选择器、属性和值,能精准把控各类控件的外观表现,极大提升了界面设计的灵活性与美观性。 文章目录 一、样式可更改的效果​1、颜色相关效果​2、字体…

追踪大型语言模型的思想(上)(来自针对Claude的分析)

概述 像 Claude 这样的语言模型并非由人类直接编程&#xff0c;而是通过大量数据进行训练。在训练过程中&#xff0c;它们会学习解决问题的策略。这些策略被编码在模型为每个单词执行的数十亿次计算中。对于我们这些模型开发者来说&#xff0c;这些策略是难以捉摸的。这意…

Python pandas 向excel追加数据,不覆盖之前的数据

最近突然看了一下pandas向excel追加数据的方法&#xff0c;发现有很多人出了一些馊主意&#xff1b; 比如用concat,append等方法&#xff0c;这种方法的会先将旧数据df_1读取到内存&#xff0c;再把新数据df_2与旧的合并&#xff0c;形成df_new,再覆盖写入&#xff0c;消耗和速…

MYSQL 索引和事 务

目录 一 MYSQL 索引介绍 1.索引概念 2.索引作用 3.索引的分类 3.1普通索引 3.2唯一索引 3.3组合索引&#xff08;最左前缀&#xff09; 3.4全文索引 4.3查看索引 4.4删除索引 二 MYSQL事务 一&#xff1a;MYSQL索引介绍 索引是一个排序的列表,在这个列表中存储着索…

【C/C++】ARM处理器对齐_伪共享问题

文章目录 1 什么是伪共享&#xff1f;2 为什么对齐&#xff1f;3 伪共享的实际影响4 为什么必须是 64 字节&#xff1f;5 其他替代方案6 验证对齐效果总结 1 什么是伪共享&#xff1f; 伪共享是 多线程编程中的一种性能问题&#xff0c;其本质是&#xff1a; 缓存行&#xff…

Kafka Controller的作用是什么?故障时如何恢复? (管理分区和副本状态;通过ZooKeeper选举新Controller)

Apache Kafka Controller 是 Kafka 集群的核心协调组件&#xff0c;主要承担两大核心职责&#xff1a; 一、核心作用 分区领导者选举 1 // 分区领导者选举逻辑示例&#xff08;伪代码&#xff09; def electLeader(partition: Partition): Unit {val isr partition.inSync…

阿里云前端Nginx部署完,用ip地址访问却总访问不到,为什么?检查安全组是否设置u为Http(80)!

根据你的描述&#xff0c;Ping测试显示数据包无丢失但无法通过公网IP访问服务&#xff0c;说明网络基础层&#xff08;ICMP协议&#xff09;是通畅的&#xff0c;但更高层&#xff08;如TCP/UDP协议或服务配置&#xff09;存在问题。以下是系统性排查与解决方案&#xff1a; 一…

关于STM32 SPI收发数据异常

问题描述&#xff1a; STM32主板做SPI从机&#xff0c;另一块linux主板做主机&#xff0c;通信的时候发现从机可以正确接收到主机数据&#xff0c;但是主机接收从机数据时一直不对&#xff0c;是随机值。 问题原因&#xff1a; 刚发现问题的时候&#xff0c;用逻辑分析仪抓包…

特励达力科LeCroy推出Xena Freya Z800 800GE高性能的800G以太网测试平台

Xena Freya Z800 800GE 是由全球领先的测试与测量解决方案提供商特励达力科公司&#xff08;Teledyne LeCroy&#xff09;开发的高性能以太网测试平台&#xff0c;专为满足从10GE到800GE数据中心互连速度的需求而设计。特励达力科公司在网络测试领域拥有超过50年的技术积累&…

基于Django框架的股票分红数据爬虫和展示系统

项目截图 一、项目简介 本项目是一个基于 Django 框架的股票分红数据爬虫和展示系统。它可以从东方财富网站爬取股票分红数据&#xff0c;并将数据存储到 Django 数据库中&#xff0c;同时提供数据查询、导出和图表展示功能。该系统为用户提供了一个方便的平台&#xff0c;用于…

nginx性能优化与深度监控

一、性能调优方向 1. 系统层面优化 内核参数调整 TCP队列与连接管理&#xff1a; net.core.somaxconn&#xff08;最大连接队列长度&#xff0c;建议设为65535&#xff09;net.ipv4.tcp_max_syn_backlog&#xff08;SYN队列长度&#xff0c;建议65535&#xff09;net.ipv4.tc…