文件是Linux系統(tǒng)中的一切事物的存在形式,計算機(jī)中的數(shù)據(jù)和硬件都是通過文件的形式進(jìn)行管理西篓,Linux的文件主要有普通文件、文件夾憋活、設(shè)備文件岂津、鏈接文件、管道文件悦即、套接字文件(數(shù)據(jù)通信的接口)等類型吮成,Linux 中的各種事物比如像文檔、文件夾盐欺、鍵盤赁豆、監(jiān)視器、硬盤冗美、可移動媒體設(shè)備魔种、打印機(jī)、調(diào)制解調(diào)器粉洼、虛擬終端等等都是定義在文件系統(tǒng)空間下的字節(jié)流节预。
因此在Linux系統(tǒng)上的web程序,在進(jìn)行TCP連接時属韧,系統(tǒng)為每個TCP連接創(chuàng)建一個socket句柄安拟,而每個句柄也是一個文件句柄,所以web程序?qū)ξ募牟僮髑闆r宵喂,是影響到服務(wù)器性能的重要指標(biāo),像網(wǎng)站在高流量高并發(fā)的場景下出現(xiàn)"Too many open files"的異常就是因?yàn)榇蜷_的文件數(shù)超過限制糠赦,而程序中對資源(包括圖片、音視頻資源)锅棕、網(wǎng)頁拙泽、以及接口的請求在Linux系統(tǒng)里的表現(xiàn)為對文件的訪問,如果打開文件數(shù)超出了系統(tǒng)限制(系統(tǒng)級和用戶級)的數(shù)量裸燎,就會拒絕接下來的文件訪問當(dāng)前用戶級的文件數(shù)限制顾瞻,可以通過 ulimit -n 來查看,如圖:?
而系統(tǒng)級別的文件數(shù)限制德绿,則通過sysctl -a來查看荷荤,如下圖:?
一般系統(tǒng)最大文件數(shù)會根據(jù)硬件資源計算出來的,如果強(qiáng)行需要修改最大打開文件數(shù)可以通過ulimit -n 10240來修改移稳,當(dāng)這種方式只對當(dāng)前進(jìn)程有效蕴纳,如果需要永久有效則需要修改/etc/security/limits.conf(重啟系統(tǒng)生效),如下圖:?
其中:
root :指定用戶个粱,如對所有用戶袱蚓,則寫 *
soft:軟限制
hard:硬件限制
nofile 是代表最大文件打開數(shù)
除此之外,下面是一些打開文件數(shù)操作相關(guān)的指令几蜻,僅供參考:
1喇潘、查看所有進(jìn)程的文件打開數(shù):
lsof |wc -l?
2、查看某個進(jìn)程打開的文件數(shù):
lsof -p pid |wc -l
3梭稚、查看系統(tǒng)中各個進(jìn)程分別打開了多少句柄數(shù):
lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr|more
覺得本文對你有幫助颖低?請分享給更多人
關(guān)注「編程無界」,提升裝逼技能