1、什麼是檔案和檔案描述符
Linux中檔案可以分為4種:普通檔案、目錄檔案、連結檔案和裝置檔案。
1、普通檔案
是使用者日常使用最多的檔案,包括文本檔案、shell腳本、二進制的可執行和各種類型的資料。
ls -lh 來檢視某個檔案的屬性,可以看到有類似 -rw-r--r-- ,值得注意的是第一個符号是 - ,這樣的檔案在Linux中就是普通檔案。這些檔案一般是用一些相關的應用程式建立,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類檔案的删除方式是用rm 指令;
2、目錄檔案
在linux中,目錄也是檔案,它們是包含檔案名和子目錄名以及指向那些檔案和子目錄的指針
當我們在某個目錄下執行,看到有類似 drwxr-xr-x ,這樣的檔案就是目錄,目錄在Linux是一個比較特殊的檔案。注意它的第一個字元是d。建立目錄的指令可以用 mkdir 指令,或cp指令,cp可以把一個目錄複制為另一個目錄。删除用rm 或rmdir指令。
3、連結檔案
連結檔案類似于Windows中的“快捷方式”。
是通過ln -s 源檔案名 新檔案名 來建立的。
4、裝置檔案
包括兩種,塊裝置檔案,另一種是字元裝置檔案。字元裝置(無緩沖且隻能順序存取)、塊裝置(有緩沖且可以随機存取)。
塊裝置檔案是指資料的讀寫,它們是以塊為機關的裝置,如硬碟光驅。
字元裝置主要是指串行端口的接口裝置,如網卡等。
核心(kernel)利用檔案描述符(file descriptor)來通路檔案。檔案描述符是非負整數。打開現存檔案或建立檔案時,核心會傳回一個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。
習慣上,标準輸入(standard input)的檔案描述符是 0,标準輸出(standard output)是 1,标準錯誤(standard error)是 2。盡管這種習慣并非 Unix 核心的特性,但是因為一些 shell 和很多應用程式都使用這種習慣,是以,如果核心不遵循這種習慣的話,很多應用程式将不能使用。 檔案描述符的有效範圍是 0 到 OPEN_MAX。
在Windows作業系統上,檔案描述符被稱作檔案句柄。
2、檔案描述符對性能的影響
linux伺服器核心對檔案描述符的個數存在限制,預設在1024左右(視不同的伺服器類型,預設設定的值不太一樣),這對于不太繁忙的程式,一般是夠用的,但是如果是web伺服器或者性能測試用的加壓伺服器,這個限制是不夠用的,程式會打開大量的檔案,導緻檔案描述符不夠用,進而導緻無法通路新的檔案。
3、如何判斷檔案描述符設定存在問題
通過檢視當先系統使用的檔案描述符,可以判斷檔案描述符個數是否受限
使用cat /proc/sys/fs/file-nr
[root@localhost bin]# cat /proc/sys/fs/file-nr
5664 0 186405
其中第一個數表示目前系統已配置設定使用的打開檔案描述符數,第二個數為配置設定後已釋放的(目前已不再使用),第三個數等于file-max。
如圖,大量并發請求時,目前系統已配置設定使用的打開檔案描述符數會發生比較大的變化,預設的1024是不夠的。
4、如何修改linux伺服器核心的檔案描述符
(1)臨時修改,可以通過ulimit指令修改
//顯示目前檔案描述符
ulimit -n
//修改目前使用者環境下的檔案描述符為65536
ulimit -HSn 65536
使用ulimit指令的缺點:
1,隻能修改目前登入使用者環境下的檔案描述符,如果此使用者來另外打開一個連接配接,此連結環境的檔案描述符依然是沒改前的
2,如果系統重新開機,以前修改都不再生效
(2)永久修改,通過修改nf檔案
編輯/etc/security/nf 檔案,在最後加入如下兩行
* soft nofile 65536
* hard nofile 65536
儲存退出,都不需要重新開機伺服器,直接重新登陸用ulimit -n就能看到效果
這樣無論使用哪個使用者,無論是否重新開機都不會失效了。
<a href="http://www.cnblogs.com/reach296/p/3915512.html">http://www.cnblogs.com/reach296/p/3915512.html</a>