如何解決 Linux 系統文件描述符耗盡的問題

在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…