/etc/sysctl.conf 上的文件描述符設置
我最近了解到,能夠增加我們可以通過 Apache 服務的虛擬主機的數量取決於文件描述符。
他們說應該將值添加到 /etc/sysctl.conf 作為
fs.file-max = 65536
我擁有的 RAM 數量與上述數字之間有什麼關係?
你能告訴我嗎?
“您應該擁有 X GB RAM 和 Y GHz CPU 才能將 fs.file-max 設置為 Z”
我基本上想知道 X - Y - Z 關係以便能夠進行設置。
伺服器是 Ubuntu 8.04,我可以通過我的雲伺服器提供商將 RAM 或 CPU 增加到幾乎任意數量。
ps:或者我為什麼要關心這個?有沒有一種方法可以設置我的系統,讓它作為我的記憶允許它服務?
這是教程(官方 plesk 文件)
- 將以下行添加到 /etc/sysctl.conf:
$ fs.file-max = 65536
- 執行以下外殼命令:
$ /sbin/sysctl -w fs.file-max=65536
請注意,fs.file-max 的值最多可以等於 220=1048576)。 3. 將以下行添加到 /etc/init.d/apache2 和 /usr/sbin/apache2ctl 的開頭:
$ ulimit -n `cat /proc/sys/fs/file-max`
- 更改 /usr/include/bits/typesizes.h 和 /usr/include/nptl/bits/typesizes.h 文件中的 __FD_SETSIZE 值。它應該是這樣的:
$ define __FD_SETSIZE 65536
- 下載和重建包:
$ apt-get install apt-src $ apt-src --build install openssl $ dpkg -i libssl*.deb openssl*.deb $ apt-src --build install apache2 $ dpkg -i libapr*.deb apache2_*.deb apache2-common*.deb apache2-mpm-prefork*.deb apache2-utils*.deb $ cp /opt/psa/suexec/psa-suexec2 /usr/lib/apache2/suexec2 /etc/init.d/apache2 restart $ apt-src --build install libc-client2002edebian $ dpkg -i libc-client-dev_2002edebian1-*.deb libc-client2002edebian*.deb mlock*.deb $ apt-src --build install php4 $ dpkg -i `ls *deb|grep php4|grep -v apache-mod`
如果您安裝的 Ubuntu 預設情況下沒有超過 65536 個可用,我會感到驚訝。檢查您目前的設置
$ sudo sysctl fs.file-max
一般的經驗法則是,您可以
fs.file-max
為每 1MB 的 RAM 增加 64 個參數。e.g. 2 gigabytes = 2048 * 1MB = 2048 * 64 = 131072
那是 65536 的兩倍。如果您實際上不需要使用它,我會猶豫使用它,因為在某些情況下它可能會降低您的性能。與 sysctl 設置同樣重要的是 __FD_SETSIZE,因為這是您的應用程序在使用系統
select(2)
呼叫時所使用的。不過,我的總體建議是,在 Apcahe 的一個實例上 > 1000 個虛擬主機對於在一台機器上管理來說簡直是一場噩夢。一台受損的主機,任何停機時間等,您就會有更多的網站對您大喊大叫。
我在網路託管行業工作了 7 年多,我的建議是出於多種原因購買另一台機器,性能是其中之一,易於維護是另一個原因,一個籃子裡的所有雞蛋都是另一個,等等。