生產報錯 too many open files

2021-10-19 17:17:29 字數 1365 閱讀 1793

生產環境上的定時任務指令碼本來在應用上是跑的好好的,突然發現就都失敗了,急忙去生產伺服器上面看。發現了下面這個報錯。

這裡的files不單是檔案的意思,也包括開啟的通訊鏈結(比如socket),正在監聽的埠等等,所以有時候也可以叫做控制代碼(handle),這個錯誤通常也可以叫做控制代碼數超出系統限制。

經常在使用linux的時候出現,大多數情況是由於程式沒有正常關閉一些資源引起的(比如讀寫檔案),所以出現這種情況,請檢查io讀寫,socket通訊等是否正常關閉。

經過檢查並不是資源未關閉而造成的。就懷疑是否當前伺服器的檔案控制代碼數太少而造成的。

下面都是在自己虛擬機器虛擬機器操作的。當出現這個錯誤時可以通過一下命令來排查問題。

檢視當前伺服器的檔案控制代碼數。這兩個命令都可以看

檢視當前伺服器使用的檔案控制代碼數

lsof

|wc -l

檢視每個程序使用的控制代碼數

第一列是持有控制代碼數量,第二列是每個程序的pid

使用該命令可以定位到是哪個程序使用的檔案控制代碼數較多,去定位問題。

lsof

|grep 程序id

linux是有檔案控制代碼限制的,而且預設不是很高,一般都是1024,作為一台生產伺服器,其實很容易就達到 這個數量,因此我們需要把這個值改大一些。

由於我們並沒有生產環境root的使用許可權就臨時修改檔案控制代碼數

臨時修改:使用ulimit -n size修改最大檔案控制代碼數(這種方法只針對當前程序有效)

ulimit -n 65535
後面通知系統組的去修改了

永久方法:修改linux系統引數。

vi /etc/security/limits.conf
*  soft  nofile  65536

*  hard  nofile  65536

VS 生產的DLL匯入Unity 報錯

vs 匯出乙個dll,放到unity 裡面以後,dll 的 inspector 下顯示如下警告資訊 this plugin references at least one unityengine module assemblies directly unityengine.coremodule.dl...

報錯mysql MySQL報錯總結

錯誤一 mysql從cmd使用命令 mysql u root p 啟動報錯,顯示 不能連線到埠 實際埠為3306 這裡的問題實際是由於我沒有設定mysql開機自啟動,所以解決方案就是啟動mysql伺服器 1 我的電腦 管理 服務 找到本機的mysql伺服器 我的是mysql80 然後啟動 可能還需要...

vue專案空格報錯,縮排不對報錯,格式報錯!!!

vue cli構建專案之後發現寫幾句 就會報錯,但是語法什麼的都沒有問題,只是因為縮排 空格之類的,對於初學者格式不規範的人來說是相當難受的 圖中框住的位置都會報錯!現在有兩種辦法 1 是因為你設定了eslint 規範化 如果你不想有規範的js 可以重新初始化關掉eslint。use eslint ...