GB | BIG5
|
| 首頁 > 應用技術 > Apache > 正文 |
 |
| 調整BSD上Apache的性能 |
| http://www.apache.org Cernet譯 (2001-04-16 14:26:50) |
From http://www.apache.org/docs/misc/perf-bsd44.html
Cernet譯
和其他操作系統一樣,監聽隊列(listen queue)是首要限制條件。下面是Aaron Gifford 對BSDI 1.x,2.x和FreeBSD 2.0(包括舊版本)上的建議。
編輯下面兩個文件:
/usr/include/sys/socket.h
/usr/src/sys/sys/socket.h
在每個文件中,搜尋:
/*
* Maximum queue length specifiable by listen.
*/
#define SOMAXCONN 5
將5修改為任何可以工作的值即可。經測試調整到32是不會有什問題的。
修改,重新編譯kernel和Apache Server然重新啟動。
FreeBSD 2.1在SOMAXCONN設置為32時工作的非常好。
附錄:BSD服務器在重負載下Apache的性能調整
From Chuck Murcko
如果正運行著一個非常繁忙的BSD Apache服務器並且系統的反應很慢,那如下工作將很有用處:
運行vmstat檢查內存使用情況、page/swap利用率等
運行netstat -m檢查mbuf使用情況
運行fstat檢查文件描述符使用情況
這些應用提供給你該如何調整kernel的信息以及是否應該增加一些內存。下面是一個有很重負載的BSD服務器的kernel配置參數(實際是BSDI服務器,但是與FreeBSD和4.4-Lite相關),系統其他參數沒有變化。
maxusers 256
maxusers對其他kernel參數產生影響:
進程的最大數目
每個用戶進程的最大數目
系統打開文件數目限制
每個用戶打開文件數目限制
mbuf clusters最大數目
Proc/pgrp hash表大小
這些引申參數的定義公式在/usr/src/sys/conf/param.c中。這些計算出來的參數部分會被kernel配置文建裡自己定義的值覆蓋:
# Network options. NMBCLUSTERS defines the number of mbuf clusters and
# defaults to 256. This machine is a server that handles lots of traffic,
# so we crank that value.
options NMBCLUSTERS=4096 # mbuf clusters at 4096
#
# Misc. options
#
options CHILD_MAX=512 # maximum number of child processes
options OPEN_MAX=512 # maximum fds (breaks RPC svcs)
在許多情況下,NMBCLUSTERS應該設置的比第一眼看上去需要設置的值大的多。這是因為如果瀏覽器在傳輸中中斷了連接,與特定連接相關的socket fd要在TIME_WAIT狀態等幾分鐘才釋放,在等待時mbuf並沒有釋放。另外,在服務器的timeouts中,一些連接會停留在FIN_WAIT_2狀態,這個狀態不會超時,瀏覽器又不會發出最終的FIN信號。
關mbuf clusters更多的信息(From sys/mubf.h)
/*
* Mbufs are of a single size, MSIZE (machine/machparam.h), which
* includes overhead. An mbuf may add a single "mbuf cluster" of size
* MCLBYTES (also in machine/machparam.h), which has no additional overhead
* and is used instead of the internal data area; this is done when
* at least MINCLSIZE of data must be stored.
*/
CHILD_MAX和OPEN_MAX設置成允許512個子進程(與每用戶最大進程數不同)和文件描述符。這個值可以根據你的特殊配置進行修改(如果你的模塊或CGI要打開許多文件時,就設置一個較大的OPEN_MAX)。如果在同一機器上除httpd外還有其他許多工作,就需要設置較大的NPROC。該例中NPROC的值來源maxusers。
增大listen() queue的大小,需要調整SOMAXCONN的值。SOMAXCONN不是來自maxusers的。所以需要自己增大這個值。目前,這個值在sys/socket.h中設置。調整這個參數最好的方式時run-time(運行時更改),這要比在頭文件中修改要好。要在運行時更改,編輯/etc/rc.local,增加:
/usr/sbin/sysctl -w kern.somaxconn=256
這裡使用256,可以進行更改以適合你的需要。許多情況下,設置成128就可以了。
警告:
如果配置的kernel使用的資源超過了你可使用的系統RAM的數量,系統可能不能啟動。保証任何時候有一個可以啟動系統的kernel。使用一些系統工具了解一下你是否需要增加一些內存。
當OPEN_MAX大256時,RPC服務會失敗。這是由原始的RPC庫的一個函數使用1 byte保存文件描述符導致的。BSDI release 2.1解決了部分問題,但最終的解決需要等待重新設計RPC。
最還有一個在Apache中對子進程配置的硬限制。
對Apache 1.0.5以的版本,需要改變httpd.h中HARD_SERVER_LIMIT的定義並重新編譯才能運行超過150個httpd進程。
在conf/httpd.conf-dist中:
# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# Unix with it as it spirals down...
MaxClients 150
在增大這個值之前,要檢查一下你的系統,RAM 擴展,並調整kernel。
M. Teterin" 寫到:
對kernel和經常使用的應用程序進行優化非常有用。在AMD-133(486類CPU)上重新編譯FreeBSD kernel時加上
-m486 -fexpensive-optimizations -fomit-frame-pointer -O2
可以減少 "unable" errors。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
====== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |