Linux open file與 fs-max
概要:
linux系統預設open files數目為1024, 有時應用程式會報Too many open files的錯誤,是因為open files 數目不夠。這就需要修改ulimit和file-max。特別是提供大量靜態檔案訪問的web伺服器,快取伺服器(如squid), 更要注意這個問題。
網上的教程,都只是簡單說明要如何設定ulimit和file-max, 但這兩者之間的關係差別,並沒有仔細說明。
說明:
1. file-max的含義。man proc,可得到file-max的描述:
/proc/sys/fs/file-max
This file defines a system-wide limit on the number of open files for all processes. (See
also setrlimit(2), which can be used by a process to set the per-process limit,
RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages
about running out of file handles, try increasing this value:
即file-max是設定 系統所有程式一共可以開啟的檔案數量 。同時一些程式可以通過setrlimit呼叫,設定每個程式的限制。如果得到大量使用完檔案控制程式碼的錯誤資訊,是應該增加這個值。
也就是說,這項引數是系統級別的。
2. ulimit
Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
即設定當前shell以及由它啟動的程式的資源限制。
顯然,對伺服器來說,file-max, ulimit都需要設定,否則就可能出現檔案描述符用盡的問題
修改:
1.修改file-max
# echo 6553560 > /proc/sys/fs/file-max //sysctl -w "fs.file-max=34166",前面2種重啟機器後會恢復為預設值
vim /etc/sysctl.conf, 加入以下內容,重啟生效
fs.file-max = 6553560
2.修改ulimit的open file,系統預設的ulimit對檔案開啟數量的限制是1024
# ulimit -HSn 102400 //這只是在當前終端有效,退出之後,open files又變為預設值。當然也可以寫到/etc/profile中,因為每次登入終端時,都會自動執行/etc/profile
或
# vim /etc/security/limits.conf //加入以下配置,重啟即可生效
* soft nofile 65535
* hard nofile 65535
ulimit命令
-H 使用硬資源控制
-S 使用軟資源控制
-a 檢視所有的當前限制
-n 能開啟的最大檔案描述符數
-t 限制最大的 CPU 佔用時間(每秒)
-u 限制最大使用者程式數
-v 限制虛擬記憶體大小(kB)
附錄:
附錄1.
為了讓一個程式的open files數目擴大,可以在啟動指令碼前面加上ulimit -HSn 102400命令。但當程式是一個daemon時,可能這種方法無效,因為沒有終端。
附錄2.
如果某項服務已經啟動,再動態調整ulimit是無效的,特別是涉及到線上業務就更麻煩了。
這時,可以考慮通過修改/proc/’程式pid’/limits來實現動態修改!!!
註明:
檢視linux系統哪些程式開啟了file:
用lsof -p [程式ID] 可以看到某ID的開啟檔案狀況。
程式ID可能用 ps -ef|grep java列出weblogic的程式ID,然後用此ID套入lsof -p ID號,咳,一大堆的請求喲,這顯然是網路請求過多造成了 Too many open files。
適當調整後便已消除這種現象。
當前預設設定的最大檔案數 ulimit -n
系統開啟最大檔案數: cat /proc/sys/fs/file-max
統計當前某個使用者開啟的檔案數(包含socket數和會話數) lsof -u username|wc -l
統計當前所有程式的檔案開啟數 lsof |egrep -v 'TCP|UDP'|awk '{print $8}' |sort |uniq |wc -l
分析當前程式開啟檔案數的排序並此開啟檔案數最多的程式開啟了哪些檔案。
lsof |egrep -v 'TCP|UDP'|awk '{print $2}' |sort -n |uniq -c |sort -nr |head -n1
假如結果為 125 1150,第一個數字是個數,第二個數字是pid
lsof -p 1150
檢視當前的開啟最大數檔案數的設定引數:cat /etc/security/limits.conf
檢視當前執行緒總數
echo "`ps -eLf |awk '{print $6}'|grep -v NLWP |xargs |sed 's/ /+/g'`" |bc
檢視當前程式數:
ps aux |grep -v 'USER'|wc -l
統計SOCKE聯接數:
netstat |awk '$1=="unix"'|wc -l
當然我們可以利用指令碼動態統計某個程式的檔案開啟數
sh-4.1# more test.sh
#/bin/sh
while :; do
sleep 1800
lsof -p 29728 |wc -l
done
上面建立了一個test.sh指令碼,每1800秒(半個鍾)統計29728程式的檔案開啟數,while :; 的意思是死迴圈
然後將test.sh放到後臺執行,執行的資訊放在openfiles.txt這個檔案中
sh-4.1# nohup ./test.sh > openfiles.txt 2>&1 &
sh-4.1# more test.sh
#/bin/sh
while :; do
sleep 1800
lsof -p 29728 |wc -l
done
相關文章
- Can't open file: (errno: 24)
- WPF open image and print as pdf file
- libmysqlclient.so.16: cannot open shared object file: No such file or directoryIBMMySqlclientObject
- open_basedir() restrictijon in effect. FIle()REST
- ImportError: libffi.so.7: cannot open shared object file: No such file or directoryImportErrorObject
- [20181214]open file using O_DIRECT.txt
- python libclntsh.so.12.1: cannot open shared object filePythonObject
- 呼叫torchtext報錯OSError: libtorch_cpu.so: cannot open shared object file: No such file or directoryErrorObject
- 【Open-Falcon】Linux下安裝Open-FalconLinux
- cat > file << EOF 與 cat > file << -
- libcudart.so.8.0: cannot open shared object file解決方案DartObject
- inplace-abn 報錯解決: ImportError: libcudart.so.9.0: cannot open shared object file: No such file or dirImportErrorDartObject
- [Linux] convert .img to .iso fileLinux
- Nginx安裝啟動過程報錯libpcre.so.1 cannot open shared object file: No such file or directoryNginxObject
- nginx: [error] open() “/var/run/nginx/nginx.pid“ failed (2: No such file or directory)NginxErrorAI
- Linux中open與fopen區別主要體現在哪些方面?Linux
- 解決問題:OSError: Unable to open file (truncated file: eof = 22118400, sblock->base_addr = 0, stored_eofErrorBloC
- CentOS7提示 libsasl2.so.2: cannot open shared object fileCentOSObject
- 影片匯聚平臺EasyCVR啟動出現報錯“cannot open shared object file”的原因排查與解決VRObject
- linux中file命令和find命令Linux
- Java - 異常與FileJava
- File與IO基礎
- Laravel5.6安裝:Warning: require(../vendor/autoload.php): failed to open stream: No such file or directoryLaravelUIPHPAI
- linux解決“XXX is not in the sudoers file”錯誤Linux
- ./XXX.XX: error while loading shared libraries: libGLEW.so.2.1: cannot open shared object file: NoErrorWhileObject
- open feign 呼叫超時與重試
- “no source“: Error: #5: cannot open source input file “C:\Users\xxx\AppData\Local\Temp\p4228: PermiErrorAPP
- rpm: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such fi...ErrorWhileGCObject
- error while loading shared libraries: libpython3.7m(2.7).so.1.0: cannot open shared object file: NErrorWhilePythonObject
- 解決GD32新建工程時提示:cannot open source input file “RTE_Components.h“
- 【JAVA :File類的用法(一)】File類的構造方法-File類建立檔案與資料夾Java構造方法
- [20200423]防水牆與v$open_cursor.txt
- 在 Linux 中執行.sh 指令碼 No such file or directoryLinux指令碼
- File name too long window和linux排查,解決Linux
- python 讀取 csv 檔案報錯:file = builtins.open (filename, mode, buffering),OSError: [Errno 22] Invalid argumentPythonUIError
- iostat -n來統計NFS讀寫資訊時碰到了Cannot open /proc/self/mountstats: No such file or directoryiOSNFS
- 第一次開啟Android Studio建立專案執行報錯Failed to open zip fileAndroidAI
- 高效解決Failed to open zip file.Gradle‘s dependency cache may be corrupt(Android初學者遇到的問題—gradle的地址配置與安裝)AIGradleAndroid