一、問(wèn)題
bizware在部署中有一項(xiàng)
4诡右、檢查文件打開(kāi)數(shù)
命令:ulimit? -a
由于不了解就去學(xué)習(xí)了下這個(gè)參數(shù): open files
"open files (-n) 1024 "是Linux操作系統(tǒng)對(duì)一個(gè)進(jìn)程打開(kāi)的文件句柄數(shù)量的限制;
這個(gè)不是簡(jiǎn)單的打開(kāi)文件的個(gè)數(shù)另绩,而且很多操作會(huì)使用文件句柄辣垒,比如創(chuàng)建socket鏈路等,所以經(jīng)常會(huì)遇到應(yīng)用程序會(huì)報(bào)Too many open files的錯(cuò)誤龄句,是因?yàn)閛pen files 數(shù)目不夠。
說(shuō)明:
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是設(shè)置 系統(tǒng)所有進(jìn)程一共可以打開(kāi)的文件數(shù)量 。同時(shí)一些程序可以通過(guò)setrlimit調(diào)用欧漱,設(shè)置每個(gè)進(jìn)程的限制职抡。如果得到大量使用完文件句柄的錯(cuò)誤信息,是應(yīng)該增加這個(gè)值误甚。
也就是說(shuō)缚甩,這項(xiàng)參數(shù)是系統(tǒng)級(jí)別的。
在linux環(huán)境下窑邦,任何事物都以文件的形式存在擅威,通過(guò)文件不僅僅可以訪問(wèn)常規(guī)數(shù)據(jù),還可以訪問(wèn)網(wǎng)絡(luò)連接和硬件,應(yīng)用程序就是通過(guò)fd識(shí)別該文件/設(shè)備/服務(wù)..
【重點(diǎn): 所有進(jìn)程一共奕翔、系統(tǒng)級(jí)的裕寨,所以linux下多用戶的情況之前會(huì)相互影響,尤其業(yè)務(wù)量并發(fā)的時(shí)候派继,每個(gè)鏈路都占用一個(gè)文件句柄∧硌蓿】
二驾窟、解決問(wèn)題,了解了基本函數(shù)认轨,問(wèn)題解決相對(duì)比較簡(jiǎn)單
1.修改file-max
# echo? 6553560 > /proc/sys/fs/file-max? //sysctl -w "fs.file-max=34166"绅络,前面2種重啟機(jī)器后會(huì)恢復(fù)為默認(rèn)值或# vim /etc/sysctl.conf, 加入以下內(nèi)容,重啟生效fs.file-max=6553560
2.修改ulimit的open file,系統(tǒng)默認(rèn)的ulimit對(duì)文件打開(kāi)數(shù)量的限制是1024
# ulimit -HSn 102400? //這只是在當(dāng)前終端有效恩急,退出之后杉畜,open files又變?yōu)槟J(rèn)值。當(dāng)然也可以寫(xiě)到/etc/profile中衷恭,因?yàn)槊看蔚卿浗K端時(shí)此叠,都會(huì)自動(dòng)執(zhí)行/etc/profile或# vim /etc/security/limits.conf? //加入以下配置,重啟即可生效*soft nofile65535*hard nofile65535
三随珠、回顧分析一下問(wèn)題
擴(kuò)大open files數(shù)量限制的操作可以起效灭袁,但在此之前相比你應(yīng)該也對(duì)為何出錯(cuò)會(huì)感興趣吧,不妨先分析一下窗看。尤其是在已經(jīng)設(shè)置很大值的情況茸歧,如何去定位哪些進(jìn)程占用較多的文件句柄,是否合理显沈?
通常使用 lsof
linux下的命令软瞎, 全稱(chēng):list system open files
在終端下輸入lsof即可顯示系統(tǒng)打開(kāi)的文件,因?yàn)?lsof 需要訪問(wèn)核心內(nèi)存和各種文件拉讯,所以必須以 root 用戶的身份運(yùn)行它才能夠充地發(fā)揮其功能涤浇。直接輸入lsof部分輸出為:
常規(guī)統(tǒng)計(jì):
1. lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
以root用戶執(zhí)行上面的腳本,對(duì)進(jìn)程打開(kāi)的文件句柄進(jìn)行排序遂唧,可能出現(xiàn)的結(jié)果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
131 24204 3. 57 24244 4. 57 24231 5. 56 24264
其中第一行是打開(kāi)的文件句柄數(shù)量芙代,第二行是進(jìn)程號(hào)。得到進(jìn)程號(hào)后盖彭,我們可以通過(guò)ps命令得到進(jìn)程的詳細(xì)內(nèi)容纹烹。
ps -aef|grep 24204
然后跟蹤進(jìn)一步分析進(jìn)程或者pstree分析線程等;
總結(jié):初步簡(jiǎn)單學(xué)習(xí)了一下召边,還需要更加深入的去學(xué)習(xí)時(shí)間操作來(lái)積累铺呵;