在Linux下,我們使用ulimit -n 命令可以看到單個進程能夠打開的最大文件句柄數量(socket連接也算在裡面)。系統默認值1024。
對於一般的應用來說(象Apache、系統進程)1024完全足夠使用。但是如何象squid、mysql、java等單進程處理大量請求的應用來說就有 點捉襟見肘了。如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到「too many files open」的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?下面一段小腳本可以幫你查看:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
在系統訪問高峰時間以root用戶執行上面的腳本,可能出現的結果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
131 24204
57 24244
57 24231
56 24264
其中第一行是打開的文件句柄數量,第二行是進程號。得到進程號後,我們可以通過ps命令得到進程的詳細內容。
ps -aef |grep 24204
mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld
哦,原來是mysql進程打開最多文件句柄數量。但是他目前只打開了131個文件句柄數量,遠遠底於系統默認值1024。
但是如果系統並發特別大,尤其是squid伺服器,很有可能會超過1024。這時候就必須要調整系統參數,以適應應用變化。Linux有硬性限制和軟性限制。可以通過ulimit來設定這兩個參數。方法如下,以root用戶運行以下命令:
ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的打開文件句柄數量。個人覺得最好不要超過4096,畢竟打開的文件句柄 數越多響應時間肯定會越慢。設定句柄數量後,系統重啟後,又會恢復默認值。如果想永久保存下來,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最後。
⑵ linux 一個進程最多打開多少個文件
1、在linux系統中,理論上一個進程可以打開的文件數可以通過如下命令查找到。在終端執行:ulimit -a命令,找到open files一行即可。
2、這個值只是一個理論值,隨著你的系統硬體資源而變化,如果配置低,可能遠達不到這個值,如果系統配置很高級,也可以設置增加這個值。
⑶ Linux查看進程打開多少文件描述符命令
1、當linux打開一個文抄件的時候,Linux內核會為每一個進程在/proc/ 建立一個以其pid
為名的目錄用來保存進程的相關信息,而其子目錄fd保存的是該進程打開的所有文件的fd(fd:file descriptor)。
2、例如/proc/13844/fd/目錄(13844為pid)
3、ps -ef|grep java
root 13884 1 0 Aug15 ? 08:51:38 /doyoo/jdk1.8/bin/java
4、ll /proc/13884/fd
⑷ linux默認情況下,一個進程最多能打開多少文件
現在一般能打開64個。
文件描述符的范圍是0 ~ O P E N _ M A X 。早期的U N I X版本採用的上限值是1 9 (允許每個進程打開2 0個文件),現在很多系統則將其增加至6 3。
⑸ 怎樣查看linux進程打開的文件數
Linux文件數打開數復
查看當前系統最大的制文件打開數,
在linux終端中輸入ulimit -a
「open files」參數選項後面的數值就是當前系統支持的最大打開文件數
修改linux最大文件打開數
如果要修改linux最大文件打開數,可以通過參數命令 unlimit -n 後面接需要設置的文件數量。
設置好之後,再次查看 unlimit -a 你會發現已經設置為新的數量了
設置好之後,再次編輯修改重啟設置的服務,已經沒有剛剛那個1024文件數限制的報錯提示
其他修改方法
除此之外,如果針對不同的用戶。也可以通過編輯修改 /etc/rc.local文件設置環境變數,添加 unlimit -n
,重啟之後一般就自動設置好了
查看系統句柄文件數
當前系統文件句柄的最大數目,只用於查看,不能設置修改
cat /proc/sys/fs/file-max
查看進程打開文件數
如果需要查看所有進程的文件打開數,命令lsof |wc -l
⑹ linux 系統統計進程打開文件數方法
1 打開文件數各參數含義
參考 https://blog.csdn.net/xifeijian/article/details/9088137
查看某進程打開文件數
need-to-insert-img
2 統計文件所有進程文件數
lsof | awk '{print $2,$1}' | sort | uniq -c | sort -rn >> b.txt
need-to-insert-img
3 統計pid 進程打開的文件數
lsof -p pid
need-to-insert-img
4 統計pid 進程打開所有的文件數
lsof | awk "{print $NF}" | grep 10555 > proct.txt
need-to-insert-img
5 分析pid 進程打開文件數連接 排序 和 統計
awk '{print $NF}' proct.txt |sort |uniq -c |sort -nr > sort2.txt
need-to-insert-img
⑺ linux默認情況下,一個進程最多能打開多少文件
linux
系統中單個進程的最大線程數有其最大的限制
pthread_threads_max
這個限制可以在
/usr/include/bits/local_lim.h
中查看
對
linuxthreads
這個值一般專是
1024,對於
nptl
則沒有屬硬性的限制,僅僅受限於系統的資源
1024,是系統默認的能打開fd的最大值
修改的話需要重新編譯內核
⑻ Linux的too many open files解析
Linux中如果一個進程打開文件或者socket連接過多,有沒有及時處理和關閉掉文件或連接,當該進程打開文件的數量超過open files的數量時候,就會報too many open files的錯誤
Linux 的open files 是在一個同一個進程里限制的,當然也有全局的限制(查看/proc/sys/fs/file-max文件),ulimit -a pid命令可以看到open files進程級別限制的大小。
如果當前open files配置的是1024,則這個進程最多隻能打開1024個文件,/proc/PID/fd 目錄下的打開文件描述符的數量不會超過1024, 使用 lsof -p PId | wc -l 來查看進程打開的文件數, 超過1024則報too many open files的錯誤,這時候其他進程仍然可以打開文件,進程之間互不影響。
可以臨時通過 ulimit -n 4096 這樣設置 open files為4096,然後在同一個用戶session下重新啟動程序。這樣的設置只能在Session級別生效,如果切換用戶或者切換shell session就失效了。如果要永久生效,需要修改/etc/security/limits.conf文件,在文件末尾添加下列參數並重啟機器:
noproc 是代表最大進程數
Golang等動態GC的語言,會通過GC來回收沒有正確關閉的文件(比如使用完文件後沒有調用Close()去關閉釋放資源),這樣就導致一些已經打開的文件又被GC關閉掉,然後此進程又可以打開另外的文件,從而會使/proc/PID/fd目錄下文件描述符會指向不同的文件,可能鏈接到不同的文件。
通過設置GOGC=off環境變數關閉GO GC, 再執行go程序,此問題解決, /proc/PID/fd目錄下的文件描述符一直保持在max open files 數量 1024,同時lsof -p pid|grep REG|wc -l 為1024.
打開文件後一定要記得f.Close()關閉,這樣就能避免產生too many open files的報錯。
⑼ 怎樣查看linux進程打開的文件數
linux系統下查看進程打開文件在/proc下,對應每個進程有一個以進程號命名的目錄,該目錄下有一個fd目錄,該目錄下面的每個文件是一個符號連接,其文件名對應該進程佔用的一個文件描述符,而連接指向的內容表示文件描述符對應的實際文件,有多少個文件描述符表示該進程打開了多少文件。
另外Linux
默認的進程打開文件上限是1024個,可以通過ulimit
-n查看。很多系統上限可以通過修改/etc/security/limits.conf文件改變,這個文件有詳細的注釋,對如何修改做了說明。如果希望
把所有用戶的進程打開文件上限改為65536,可以加入下面兩行
* soft nofile 65535
* hard nofile 65535
還可以只真對某個用戶或某個組做修改,具體方法參見文件注釋。修改後需要重新啟動系統才能生效。學習linux基本命令,推薦《linux就該這么學》!
⑽ Linux操作系統中打開文件數量的查看方法
ulimit -a 查看系統文件打開數
查看所有進程的文件打開數
lsof |wc -l
指定查看某個進程打開的文件數
lsof -p pid |wc -l
修改Linux文件數和進程數
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* 代表針對所有用戶
noproc 是代表最大進程數
nofile 是代表最大文件打開數
ulimit -a
最大進程數
max user processes (-u) 4096
修改許可權
vim /etc/security/limits.d/20-nproc.conf
* soft nproc unlimited
root soft nproc unlimited