Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 檔案描述符洩漏診斷與處理實戰

編輯:Linux 系統常見問題解答

背景

Linux「一切皆檔案」,Socket、管道、目錄、裝置皆佔用檔案描述符(FD)。預設單進程上限 1024,洩漏會導致「Too many open files」,服務拒絕連線。

查看與調整上限

ulimit -n          # 查看目前上限
ulimit -HSn 10240  # 硬/軟上限調大(需 root 或 /etc/security/limits.conf 永久生效)

定位洩漏進程

方法一:/proc 檔案系統

ls -l /proc/<PID>/fd/ | wc -l   # 計算 FD 數量
ls -l /proc/<PID>/fd/           # 列出所有 FD 指向

方法二:lsof 專業工具

/usr/sbin/lsof -p 21404
# 輸出欄位:COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
# FD 欄位:cwd(工作目錄) txt(程式碼) mem(記憶體映射) 0u/1u/2u/3u...(編號+存取模式)

範例輸出:

COMMAND PID USER FD   TYPE DEVICE SIZE    NODE NAME
vas   21404 root cwd  DIR   8,3  4096 30195729 /home/users/root/vas
vas   21404 root txt  REG   8,3 112201650 30195914 /home/users/root/vas
vas   21404 root mem  REG   8,2  105080  339377 /lib64/ld-2.3.4.so
...

方法三:查詢佔用特定埠

/usr/sbin/lsof -i :9001

程式碼層面預防

  • 所有 open()/socket()/pipe() 必配對 close()
  • 錯誤路徑同樣釋放資源(goto cleanup 模式)
  • 使用 RAII / 智慧指標(C++)或 with 語句
  • 定期以 lsof -p <PID> 監控長期服務 FD 數量趨勢

快速定位 FD 洩漏,守護線上服務穩定。

Copyright © Windows教程網 All Rights Reserved