linux 系統下open file檔案數限制修改

2021-09-09 06:06:40 字數 1609 閱讀 7953

由於druid的大查詢會產生很多臨時的中間檔案,如/tmp/druid/druid-groupby-27e88733-d1f1-4589-bf63-ef3a40d4d945_273009ff-02cd-4085-b9f6-e94c7931111c/02135564.tmp (too many open files)",會造成查詢中斷,需修改相應的系統的open file限制,其中存在以下條件約束。

(1)所有程序開啟的檔案描述符數不能超過/proc/sys/fs/file-max

(2)單個程序開啟的檔案描述符數不能超過user limit中nofile的soft limit

(3)nofile的soft limit不能超過其hard limit

(4)nofile的hard limit不能超過/proc/sys/fs/nr_open

本人伺服器版本為 3.10.0-229.el7.x86_64  ,則修改open file值步驟如下:  

1:通過ulimit -a 檢視系統所有的limit資訊。

2:檢視nr_open值  cat /proc/sys/fs/nr_open

系統預設的nr_open 值為1024*1024=1048576,如果要修改的open files的值要小於1048576的話,則參考步驟3,否則參考步驟4

3: 如果要修改的open files< 1048576的情況下,vi  /etc/security/limits.conf  新增

* soft nofile ***x

* hard nofile ***x

***x 的值小於1048576,退出終端,重新登入,ulimit -a 檢視修改是否成功;重啟伺服器,重新登入,ulimit -a 檢視修改是否成功

4: 如果要修改的open files > 1048576的情況下,則首先需要增大nr_open的預設值,

(1)在vi  /etc/sysctl.conf 中增加 fs.nr_open=3269420,在ssh 端執行 sysctl -p 使配置生效。   經過測試退出ssh之後重新ssh ,通過檢視cat /etc/sys/fs/nr_open 配置生效,但是伺服器重啟的情況下,配置失效,不啟作用。

(2)針對(1)中情況,解決方案如下 ,在/etc/bashrc中新增sysctl -p 命令,當每當ssh 登入時會執行sysctl - p命令,則nr_open的配置會生效。

(3)重要! 此時不要在/etc/security/limits.conf 中永久性的修改nofile的值,經測試,如果在/etc/security/limits.conf 修改nofile值,則導致伺服器重啟ssh無法連線,同樣在/etc/bashrc的 sysctl -p 之後新增命令ulimit -shn ***x ,***x值的為要修改的大小,這樣每個ssh終端登入,會使nr_open值生效,並手動設定nofile 的值。

(4)綜合(1)(2)(3)可解決open files > 1048576的修改。

5: chcon system_u:object_r:etc_t:s0 /etc/security/limits.conf

執行此命令是增加selinux 訪問許可權,避免ssh 啟動終端無法訪問/etc/security/limits.conf,此命令為aws服務人員推薦。關於selinux可參考推薦文章1     

Linux系統下TCP keepalive屬性檢視

會員收藏 遊客收藏 大中小 tcp是面向連線的,在實際應用中通常都需要檢測連線是否還可用.如果不可用,可分為 a.連線的對端正常關閉.b.連線的對端非正常關閉,這包括對端裝置掉電,程式崩潰,網路被中斷等.這種情況是不能也無法通知對端的,所以連線會一直存在,浪費國家的資源.tcp協議棧有個keepal...

雙系統下解除安裝linux系統

雙系統 win10 centos6.8 目的 電腦加裝硬碟後,想把centos安裝到新的磁碟上,第一步,先解除安裝原有centos。注意 雙系統都知道,先按windows,再安裝linux,windows是通過linux系統下的啟動引導檔案引導的,若解除安裝linux,windows自然無法啟動,這...

Linux下獲取系統資訊

相關函式 include int gethostname char name,size t name include int uname struct utsname name 相關結構 struct utsname 例子int main void printf host name s n comp...