天天看點

[性能分析]linux檔案描述符(轉)

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是不夠的。

[性能分析]linux檔案描述符(轉)

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>

繼續閱讀