文件描述符

    一、首先說什麼是文件描述符,它有什麼做用?shell

    文件描述符是一個簡單的整數,用以標明每個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。Unix 操做系統一般給每一個進程能打開的文件數量強加一個限制。更甚的是,unix 一般有一個系統級的限制。bash

    因 爲squid 的工做方式,文件描述符的限制可能會極大的影響性能。當squid 用完全部的文件描述符後,它不能接收用戶新的鏈接。也就是說,用完文件描述符致使拒絕服務。直到一部分當前請求完成,相應的文件和socket 被關閉,squid 不能接收新請求。當squid發現文件描述符短缺時,它會發布警告。socket

    在運行./configure 以前,檢查你的系統的文件描述符限制是否合適,能給你避免一些麻煩。大多數狀況下,1024 個文件描述符足夠了。很是忙的cache可能須要4096或更多。在配置文件描述符限制時,我推薦設置系統級限制的數量爲每一個進程限制的2 倍。性能

    二、怎麼突破,具體方法?ui

    先查看LINUX默認的文件描述符:操作系統

    # ulimit -nunix

    1024進程

    咱們用命令it

    ulimit -HSn 65536編譯

    來增大文件描述符,而後編譯安裝squid,

    把ulimit -HSn 65536放到/etc/rc.d/rc.local讓啓動時加載。

    如下爲轉載:

    Linux

    在Linux 上配置文件描述符有點複雜。在編譯squid 以前,你必須編輯系統include 文件中的一個,而後執行一些shell 命令。請首先編輯/usr/include/bits/types.h 文件,改變__FD_SETSIZE 的值:

    #define _ _FD_SETSIZE 8192

    下一步,使用這個命令增長內核文件描述符的限制:

    # echo 8192 >; /proc/sys/fs/file-max

    最後,增長進程文件描述符的限制,在你即將編譯squid 的同一個shell 裏執行:

    sh# ulimit -Hn 8192

    該命令必須以root 運行,僅僅運行在bash shell。沒必要重啓機器。

    使用這個技術,你必須在每一次系統啓動後執行上述echo 和ulimit 命令,或者至少在squid 啓動以前。假如你使用某個rc.d 腳原本啓動squid,那是一個放置這些命令的好地方。

相關文章
相關標籤/搜索