
文件是Linux系統(tǒng)中的一切事物的存在形式,計(jì)算機(jī)中的數(shù)據(jù)和硬件都是通過文件的形式進(jìn)行管理,Linux的文件主要有普通文件、文件夾、設(shè)備文件、鏈接文件、管道文件、套接字文件(數(shù)據(jù)通信的接口)等類型,Linux 中的各種事物比如像文檔、文件夾、鍵盤、監(jiān)視器、硬盤、可移動(dòng)媒體設(shè)備、打印機(jī)、調(diào)制解調(diào)器、虛擬終端等等都是定義在文件系統(tǒng)空間下的字節(jié)流。
因此在Linux系統(tǒng)上的web程序,在進(jìn)行TCP連接時(shí),系統(tǒng)為每個(gè)TCP連接創(chuàng)建一個(gè)socket句柄,而每個(gè)句柄也是一個(gè)文件句柄,所以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ù)量,就會(huì)拒絕接下來的文件訪問當(dāng)前用戶級的文件數(shù)限制,可以通過 ulimit -n 來查看,如圖:?

而系統(tǒng)級別的文件數(shù)限制,則通過sysctl -a來查看,如下圖:?

一般系統(tǒng)最大文件數(shù)會(huì)根據(jù)硬件資源計(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、查看某個(gè)進(jìn)程打開的文件數(shù):
lsof -p pid |wc -l

3、查看系統(tǒng)中各個(gè)進(jìn)程分別打開了多少句柄數(shù):
lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr|more

覺得本文對你有幫助?請分享給更多人
關(guān)注「編程無界」,提升裝逼技能