當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符(0,1,2)分別與標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)對應。因此,函式 scanf() 使用 stdin,而函式 printf() 使用 stdout。你可以用不同的檔案描述符改寫預設的設定並重定向程序的 i/o 到不同的檔案。
1、首先說什麼是檔案描述符,它有什麼作用?
檔案描述符是乙個簡單的整數,用以標明每乙個被程序所開啟的檔案和socket。第乙個開啟的檔案是0,第二個是1,依此類推。unix 作業系統通常給每個程序能開啟的檔案數量強加乙個限制。更甚的是,unix 通常有乙個系統級的限制。
因為squid 的工作方式,檔案描述符的限制可能會極大的影響效能。當squid 用完所有的檔案描述符後,它不能接收使用者新的連線。也就是說,用完檔案描述符導致拒絕服務。直到一部分當前請求完成,相應的檔案和socket 被關閉,squid 不能接收新請求。當squid發現檔案描述符短缺時,它會發布警告。
在執行./configure 之前,檢查你的系統的檔案描述符限制是否合適,能給你避免一些麻煩。大多數情況下,1024 個檔案描述符足夠了。非常忙的cache可能需要4096或更多。在配置檔案描述符限制時,我推薦設定系統級限制的數量為每個程序限制的2 倍。
2、怎麼突破,具體方法?
先檢視linux預設的檔案描述符:
#ulimit -n
1024
我們用命令
ulimit -hsn 65536
來增大檔案描述符
但這個變更只對當前的session有效當斷開連線重新連線後更改就失效了
如果想永久變更需要修改/etc/security/limits.conf 檔案
vi /etc/security/limits.conf* hard nofile 65536
* soft nofile 65536
儲存退出後重新登入,其最大檔案描述符已經被永久更改了。
這只是修改使用者級的最大檔案描述符限制,也就是說每乙個使用者登入後執行的程式占用檔案描述符的總數不能超過這個限制。
linux下檔案描述符的介紹
當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符 0,1,2 分別與標準輸入 stdin 標準輸出 stdout 和標準錯誤 stderr 對應。因此,函式scanf 使用 stdin,而函式 prin...
linux下檔案描述符的介紹
當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符 0,1,2 分別與標準輸入 stdin 標準輸出 stdout 和標準錯誤 stderr 對應。因此,函式scanf 使用 stdin,而函式 prin...
Linux 下檔案描述符(二)
程式設計中應該使用中定義的stdin fileno stdout fineno stderr fileno 三個巨集來表示0,1,2.在程式中可以使用close來關閉stdout fineno 標準輸出 然後再使用open系統呼叫開啟裝置或者檔案,則其對應的檔案描述符則為1,此時系統就會將其作為標準...