VeryCD已經(jīng)多處用到了squid作為反向代理,但是使用中發(fā)現squid頻繁報錯
CODE
WARNING! Your cache is running out of filedescriptors
起初以為是cache文件的設置問(wèn)題,嘗試了多種解決方案,增大cache容量,清空cache目錄,都沒(méi)有解決此問(wèn)題。
多方求助+STFW后發(fā)現,filedescriptors即為文件描述符。
QUOTE
文件描述符是一個(gè)簡(jiǎn)單的整數,用以標明每一個(gè)被進(jìn)程所打開(kāi)的文件和socket。第一個(gè)打開(kāi)的文件是0,第二個(gè)是1,依此類(lèi)推。Unix 操作系統通常給每個(gè)進(jìn)程能打開(kāi)的文件數量強加一個(gè)限制。更甚的是,unix 通常有一個(gè)系統級的限制。
因為squid 的工作方式,文件描述符的限制可能會(huì )極大的影響性能。當squid 用完所有的文件描述符后,它不能接收用戶(hù)新的連接。也就是說(shuō),用完文件描述符導致拒絕服務(wù)。直到一部分當前請求完成,相應的文件和socket 被關(guān)閉,squid 不能接收新請求。當squid發(fā)現文件描述符短缺時(shí),它會(huì )發(fā)布警告。
在運行./configure 之前,檢查你的系統的文件描述符限制是否合適,能給你避免一些麻煩。大多數情況下,1024 個(gè)文件描述符足夠了。非常忙的cache可能需要4096或更多。在配置文件描述符限制時(shí),我推薦設置系統級限制的數量為每個(gè)進(jìn)程限制的2 倍。
在我們的Linux下運行
CODE
# ulimit -n
1024
很明顯1024個(gè)file descriptors無(wú)法滿(mǎn)足VeryCD的訪(fǎng)問(wèn)需求。
重新設置
CODE
# ulimit -HSn 65536
# ulimit -n
65536
然后重新編譯安裝squid,問(wèn)題解決。
注:
1. 需要將ulimit -HSn 65536設置在/etc/rc.d/rc.local中,防止重啟后失效
2. 我在網(wǎng)上找到的方法,說(shuō)是還需要重新編譯內linux核,但實(shí)際嘗試后發(fā)現不需要
3. 參考url:
http://bbs.chinaunix.net/forum/viewtopic.php?t=562142 http://www.infosecurity.org.cn/content/fir...ge_ip_squid.htm
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。