檔案開啟未關閉達到系統上限引起的錯誤

2021-08-19 11:18:36 字數 1153 閱讀 1567

在使用無線網路通過mqtt

上傳資料的過程中,發現無線掉線一段時間後,程序好像休眠了沒有定時生成資料了,後?

賜ü魘栽詼賢那榭觶?000多次就會出現這種「休眠」,進一步跟蹤日誌發現,

1000多次後發現從一開始一直去開啟的乙個檔案就會顯示開啟錯誤,

列印錯誤碼是:24.

檢視對應的錯誤碼資訊

too many open files。於是到proc/程序號資料夾/fd去檢視已經開啟1023個檔案描述符。

檢視系統檔案描述限制

lec-3070[log]# ulimit -a

-f: file size (blocks)             unlimited

-t: cpu time (seconds)             unlimited

-d: data seg size (kb)             unlimited

-s: stack size (kb)                8192

-c: core file size (blocks)        0

-m: resident set size (kb)         unlimited

-l: locked memory (kb)             64

-p: processes                      512

-n: file descriptors               1024

-v: address space (kb)             unlimited

-w: locks                          unlimited

-e: scheduling priority            0

-r: real-time priority             0

就是1024

個,所以就會報檔案開啟失敗,然後將我原來的資料備份檔案全部刪掉。沒有了資料檔案?

沒有了資料檔案就導致了資料傳送程序就無事可幹,所以造成「休眠」的假象

檢視到開啟的檔案描述符連線的對應檔案,就知道是哪個函式開啟的,

去檢查確實乙個地方開啟就返回,卻沒有關閉,造成的這個問題。

有開啟就有關閉,引以為戒!

檔案限制修改參考此文

open ,close 開啟 關閉檔案

open open 是乙個系統呼叫函式,用來開啟或建立乙個檔案,通過不同的oflag選項實現不同功能。使用時open 函式需要包含的標頭檔案 函式原型 int open const char pathname,int oflags int open const char pathname,int o...

Linux單程序開啟檔案控制代碼數上限

單個程序最多允許開啟的檔案控制代碼數 包括socket連線數 是有限制的,當大於這個系統限制時,程式會丟擲大量的無法開啟檔案的報錯。ulimit acore file size blocks,c unlimited data seg size kbytes,d unlimited file size...

系統「檔案保護」的開啟 關閉 應用方法

有時在安裝一些必須的軟體會提示系統重要檔案被系統 檔案保護 所控制而無法安裝的情況,下面提供其開啟與關閉的六種具體方法。一 控制系統 檔案保護 操作方法 執行 登錄檔編輯器 然後找到 hkey local machine software microsoft windows nt currentve...