Apache的安装,考虑只用?/span>Tomcat的前D代理,处理囄和静态文件的hQƈ把动态请求{发到tomcat服务处理。本文用编译安装方式,把跟需求无关的模块关闭Q只使用最的模块~译Q提高Y件性能?/span>
配置~译命o请参考:
http://www.uplinux.com/download/doc/apache/ApacheManual/install.html#configure
~译参数说明Q?/span>
~译和包含是两个不同的概c编译是指这个模块被~译了,要想使用它,只用单的修改httpd.conf加上LoadModule xxx_module libexec/mod_xxx.so 明确指出?/span>
用以前命令可以查看缺省时已编译和包含q去的模块。不用显式的--enable-MODULE[=shared] ?/span>LoadModule 操作。就已经可以使用的?/span>
安装完成后,因ؓ~译关闭了很多默认的功能模块Q所以直接用发布的默认配置是不能启动服务器的,需要作调整?/span>
?/span>apache的安装目录ؓ$APACHE_HOME
备䆾默认配置文g$APACHE_HOME/conf/httpd.confQ然后?/span>highperformance.conf最为配|文?/span>
$ mv httpd.conf httpd.conf_bak
$ cp highperformance.conf httpd.conf
$ ../bin/apachectr start
如果启动p|Q请屏蔽?/span>httpd.conf中的mod_access相关命oQ如Order{,关于目录权限的控制在本例中可以用变通方式解冻I使用没有加蝲目录权限控制功能?/span>
启动验证Q访?/span>http://$IP/Q如果正常显C页面,表示成功?/span>
MPMQ?/span>Multi-Processing ModulesQ多道处理模块)
指定MPM的方?/span>
$ ./configure --help|grep mpm
昄如下Q?/span>
--with-mpm=MPM
Choose
the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|
perchild|leader|threadpool}
主要阐述preforkQ如果不用?/span>--with-mpm”显式指定某U?/span>MPMQ?/span>prefork是Unixq_上缺省的MPMQ?/span>prefork本nq没有用到U程Q?/span>2.0版用它是ؓ了与1.3版保持兼Ҏ;prefork用单独的子进E来处理不同的请求,q程之间是彼此独立的Q这也其成为最E_?/span>MPM之一?/span>
prefork的工作原理是Q控制进E在最初徏立?/span>StartServers”个子进E后Qؓ了满?/span>MinSpareServers讄的需要创Z个进E,{待一U钟Ql创Z个,再等待一U钟Ql创建四个……如此按指数U增加创建的q程敎ͼ最多达到每U?/span>32个,直到满MinSpareServers讄的gؓ止。这是预派生(preforkQ的由来。这U模式可以不必在h到来时再产生新的q程Q从而减了pȝ开销以增加性能?/span>
下面?/span>prefork的默认配|段Q?/span>
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
MinSpareServers
讄了最的I闲q程数?/span>
MaxSpareServers
讄了最大的I闲q程敎ͼ如果I闲q程数大于这个|Apache会自?/span>kill掉一些多余进E。这个g要设得过大,但如果设的值比MinSpareServers,Apache会自动把其调整ؓMinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers?/span>MaxSpareServers?/span>
MaxClients
MaxClients是这些指令中最为重要的一个,讑֮的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其~省?/span>150是远q不够的Q如果请求L已达到这个|可通过ps -ef|grep
http|wc -l来确认)Q那么后面的hp排队Q直到某个已处理h完毕。这是pȝ资源q剩下很多?/span>HTTP讉K却很慢的主要原因。系l管理员可以Ҏg配置和负载情冉|动态调整这个倹{虽然理Zq个D大,可以处理的请求就多Q但Apache默认的限制不能大?/span>256Q在2.0中源?/span>#define DEFAULT_SERVER_LIMIT 256Q。如果把q个D为大?/span>256Q那?/span>Apache无法v动。事实上Q?/span>256对于负蝲E重的站点也是不够的。在Apache 1.3中,q是个硬限制。如果要加大q个|必须在?/span>configure”前手工修改的源代码树下?/span>src/include/httpd.h中查?/span>256Q就会发现?/span>#define HARD_SERVER_LIMIT
MaxRequestsPerChild
讄的是每个子进E可处理的请求数。每个子q程在处理了?/span>MaxRequestsPerChild”个h后将自动销毁?/span>0意味着无限Q即子进E永不销毁。虽然缺省设?/span>0可以使每个子q程处理更多的请求,但如果设成非零g有两炚w要的好处Q可防止意外的内存泄漏;在服务器负蝲下降的时侯会自动减少子进E数?/span>
Apache+jk2的每个进E的的大是
apache_max_process_with_good_perfermance
< (
apache_max_process Q?/span>400 * 1.5 = 700
xx能讄?/span>:400
按照上面的分析,本系l的?/span>prefork.c配置为:
通过加入mode_deflate模块Ҏ务器输出压羃传输Q可以减输出压力,节约带宽?/span>
可以减少40%左右的流量,减少机器用于传输的负?/span>.
压羃输出的配|需要以下三个模块功能支?/span>
mod_setenvif.c
mod_deflate
mod_headers
具体说明请参考:http://www.uplinux.com/download/doc/apache/ApacheManual/mod/
配置
参考:http://www.uplinux.com/download/doc/apache/ApacheManual/mod/mod_deflate.html
# Compress everything except images
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
1Q删除不需要的理应用和帮助应用,提高tomcat安全性?/span>
# 删除webapps下所有文?/span>
# rm –fr $CATALINA_HOME/webapps/*
# 删除server/wenapps下所有文?/span>
# rm –fr $CATALINA_HOME/server/webapps/*
2Q精sever.xml配置文g
使用tomcat发布版本中的最配|文Ӟ提高性能Q如果有功能上的需求,在逐个的加入功能配|?/span>
# 备䆾原来?/span>server.xml?/span>server.xml_bak
# mv server.xml server.xml_bak
# 复制server-minimal.xml?/span>server.xml
# cp server-minimal.xml server.xml
?/span>$CATALINA_HOME/conf/server.xml配置文g中的Connetctor节点Q和q接数相关的参数配置和优化?/span>
maxThreads
Tomcat使用U程来处理接收的每个h。这个DC?/span>Tomcat可创建的最大的U程数。默认?/span>200?/span> 可以Ҏ机器的时期性能和内存大调_一般可以在400-500。最大可以在800左右?/span>
acceptCount
指定当所有可以用的处理h的线E数都被使用Ӟ可以攑ֈ处理队列中的h敎ͼ过q个数的h不予处理。默认?/span>10?/span>
minSpareThreads
Tomcat初始化时创徏的线E数。默认?/span>4?/span>
maxSpareThreads
一旦创建的U程过q个|Tomcat׃关闭不再需要的socketU程。默认?/span>50?/span>
enableLookups
是否反查域名Q默认gؓtrue。ؓ了提高处理能力,应设|ؓfalse
connnectionTimeout
|络q接时Q默认?/span>20000Q单位:毫秒。设|ؓ0表示怸时Q这栯|有隐患的。通常可设|ؓ30000毫秒?/span>(本系l由于与后台pȝ接口时旉较长Q用设|ؓ60000)
maxKeepAliveRequests
保持h数量Q默认?/span>100?/span>
bufferSize
输入缓冲大,默认?/span>2048 bytes?/span>
compression
压羃传输Q取?/span>on/off/forceQ默认?/span>off?/span>
其中和最大连接数相关的参CؓmaxThreads?/span>acceptCount。如果要加大q发q接敎ͼ应同时加大这两个参数?/span>web server允许的最大连接数q受制于操作pȝ的内核参数设|,通常Windows?/span>2000个左叻ILinux?/span>1000个左叟?/span>
Tomcat中如何禁止和允许列目录下的文?/span>
?/span>$CATALINA_HOME/conf/web.xml中,?/span>listings参数讄?/span>false卛_Q如下:
listings
false
...
具体操作
# vi $CATALINA_HOME/conf/server.xml
修改用于AJP的连接:
<Connector port="8009" protocol="AJP/1.3" />
为:
<Connector port="8009"
maxTreads="500" minSpareThreads="10" maxSpareThreads="50"
acceptCount="50" connectionTimeout="60000"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
修改通用q接Q?/span>
<Connector port="8080" />
为:
<Connector port="8080"
maxTreads="500" minSpareThreads="10" maxSpareThreads="50"
acceptCount="50" connectionTimeout="60000"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml"/>
修改L和应用配|:
<Host name="localhost" appBase="webapps" />
为:
<Host name="localhost" appBase=" "
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/www/xxxx/site/web" reloadable="true" debug="0"/>
</Host>
Tomcat默认可以使用的内存ؓ128MB,Windows?/span>,在文?/span>{tomcat_home}/bin/catalina.batQ?/span>Unix下,在文?/span>$CATALINA_HOME/bin/catalina.sh的前面,增加如下讄Q?/span>
JAVA_OPTS='$JAVA_OPTS
-Xms[初始化内存大?/span>] -Xmx[可以使用的最大内?/span>]
?/span>
讄环境变量Q?/span>export JAVA_OPTS=?JAVA_OPTS -Xms[初始化内存大?/span>] -Xmx[可以使用的最大内?/span>]?/span>
一般说来,你应该用物理内存的 80% 作ؓ堆大。如果本Z?/span>Apache服务器,可以先折?/span>Apache需要的内存Q然后修改堆大小。徏议设|ؓ70Q;讄[[初始化内存大?/span>]{于[可以使用的最大内?/span>]Q这样可以减^凡分配堆而降低性能?/span>
本例使用加入环境变量的方式:
# vi /etc/profile
加入Q?/span>export JAVA_OPTS=?JAVA_OPTS -Xms700 –Xmx700
# source /etc/profile
%TOMCAT_HOME%/bin/catalina.sh
扑ֈq样一D:
在其后加上: