<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>夜行人 &#187; Apache</title>
	<atom:link href="http://www.187299.com/archives/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://www.187299.com</link>
	<description>寻觅生命中的那一片浅草......</description>
	<lastBuildDate>Wed, 16 Nov 2011 11:25:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>使用Apache的Rewrite和Proxy实现跨主机透明转发</title>
		<link>http://www.187299.com/archives/1443</link>
		<comments>http://www.187299.com/archives/1443#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:27:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1443</guid>
		<description><![CDATA[PHPChina网友需求：123.badu.com 自动转向www.baidu.com/123 并且保持域名还是123.baidu.com 地址：http://bbs.phpchina.com/thread-169014-1-1.html 经过摸索，终于找到了实现方法，就是通过使用Apache的Rewrite和Proxy实现... ]]></description>
			<content:encoded><![CDATA[<p>PHPChina网友需求：123.badu.com 自动转向www.baidu.com/123 并且保持域名还是123.baidu.com</p>
<p>地址：http://bbs.phpchina.com/thread-169014-1-1.html</p>
<p>经过摸索，终于找到了实现方法，就是通过使用Apache的Rewrite和Proxy实现跨主机透明转发，不改变地址栏的URL网址。</p>
<p>下面是实现步骤：</p>
<p>1. 在123.baidu.com的.htaccess文件中开启重写规则：</p>
<p>RewriteEngine On<br />
RewriteRule ^(.*)$  http://www.baidu.com/123/$1 [P,L]</p>
<p>2. 在Apache的配置文件中开启以下模块：</p>
<p>mod_rewrite.so<br />
mod_proxy.so<br />
mod_proxy_http.so</p>
<p>3. 重启Apache服务器，载入最新的配置。</p>
<p>转载自：http://hi.baidu.com/fising/blog/item/54fa5bafbd1840f0faed507e.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1443/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTTP请求流程（二）----Telnet模拟HTTP请求</title>
		<link>http://www.187299.com/archives/1259</link>
		<comments>http://www.187299.com/archives/1259#comments</comments>
		<pubDate>Sun, 11 Oct 2009 03:03:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.187299.com/archives/1259</guid>
		<description><![CDATA[上一部分"流程简介"， 我们大致了解了下HTTP请求的流程，这一篇我向大家介绍下如何利用Telnet来模拟Http请求---访问百度。 我们直接开始吧！ 1、打开"运行"-&#62;cmd进入命令环境； 2、输入"telnet ... ]]></description>
			<content:encoded><![CDATA[<p>上一部分"<span style="font-family: Verdana;"><a href="http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html"><span style="font-family: Verdana;">流程简介</span></a>"， 我们大致了解了下HTTP请求的流程，这一篇我向大家介绍下如何利用Telnet来模拟Http请求---访问百度。<br />
我们直接开始吧！<br />
1、打开"运行"-&gt;cmd进入命令环境；<br />
2、输入"telnet www.baidu.com 80"，回车后 ,屏幕为全黑，此时我们利用快捷键"Ctrl+](右中括号)"来打开本地回显功能，这样我们就可以看见我们所打的东西了，如图：（注本阶段执行过程和以 下的过程均要求操作时间尽可能短，因为时间一长，便会被认为断开连接。）</p>
<div><img src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp1.jpg" border="0" alt="" width="261" height="125" /></div>
<p>3、单击回车，进行编辑状态。<br />
4、输入："<span style="font-family: Verdana;">GET / HTTP/1.1"后回车,在第二段接着输入："HOST:"然后按回车，这样一个简单的HTTP请求就完成了，接着我人只要再按下回车，便向服务器递交 这个请求了。如图：（我们来看一下这个是什么意思：GET表示请求方式，/表示请求的根目录下的文件，HTTP/1.1表示HTTP协议版本，HOST就 是一个消息头，据某些朋友说1.1的版本一定要加一个"HOST:"可是我实验后发现"HOST :"不加仍旧可以正常发送请求，但是GET HTTP这个必须大写，否则就该请求无法发送）<br />
</span></p>
<div><img style="width: 168px; height: 89px;" src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp2.jpg" border="0" alt="" width="168" height="89" /></div>
<p>5、接收服务器返回，这步其实不需要我们来做，因为当我们发送请求后，只需几秒钟，我们便会收到来自服务器反应.</p>
<div><img src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp3.jpg" border="0" alt="" /></div>
<div>6、这样,请求就算完成了。下面我们在百度中搜一下"1",浏览器中的地址应该是:<span style="font-family: Verdana;">http://www.baidu.com/s?wd=1.</span>看看请求是怎么样的</p>
<div><img src="http://images.cnblogs.com/cnblogs_com/stg609/telnethttp4.jpg" border="0" alt="" /></div>
</div>
<p>怎么样，大家会了吗？以上只是用GET方式进行请求，当然还可以用POST方式进行请求，只是POST我这不方便做实验，所以就不写了。大概的格式给大家参考下：<br />
POST /localhost/login.aspx HTTP/1.1<br />
HOST:<br />
Content-Type:application/x-www-form-urlencoded<br />
Content-Length:10</p>
<p>uid=xxxxxx</p>
<p><span style="font-family: Verdana;"><span style="color: #000000;">参考：<br />
</span>1.张孝祥老师的HTTP协议详解<br />
2.关于HTTP的请求头可以参考：<a href="http://hi.baidu.com/%C3%8A%C2%AB%C3%95%C2%B9/blog/item/13c2e3ddb3a133ee77c638cd.html">http://hi.baidu.com/Ê«Õ¹/blog/item/13c2e3ddb3a133ee77c638cd.html</a></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1259/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决TIME_WAIT连接太多</title>
		<link>http://www.187299.com/archives/1230</link>
		<comments>http://www.187299.com/archives/1230#comments</comments>
		<pubDate>Wed, 16 Sep 2009 15:45:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1230</guid>
		<description><![CDATA[小转一篇，出处未知。 前言：经常检查Apache的连接数，同样会发现很多无用的Time_Wait连接。有人说这是正常的，是因为一个请求中途中断造成的;还有人说微 软的 IE连接时产生的Time_wait会比用Fi... ]]></description>
			<content:encoded><![CDATA[<div>
<p>小转一篇，出处未知。</p>
<p>前言：经常检查Apache的连接数，同样会发现很多无用的Time_Wait连接。有人说这是正常的，是因为一个请求中途中断造成的;还有人说微 软的  IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的，如果超过了连接数的比例就不是很  正常，所以还是找来方法解决一下。</p>
<p>检查net.ipv4.tcp_tw当前值，将当前的值更改为1分钟：<br />
[root@aaa1  ~]# sysctl -a|grep net.ipv4.tcp_tw<br />
net.ipv4.tcp_tw_reuse =  0<br />
net.ipv4.tcp_tw_recycle = 0<br />
[root@aaa1 ~]#</p>
<p>vi  /etc/sysctl<br />
增加或修改net.ipv4.tcp_tw值：<br />
net.ipv4.tcp_tw_reuse =  1<br />
net.ipv4.tcp_tw_recycle = 1</p>
<p>使内核参数生效：<br />
[root@aaa1 ~]# sysctl  -p</p>
<p>[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw<br />
net.ipv4.tcp_tw_reuse  = 1<br />
net.ipv4.tcp_tw_recycle = 1</p>
<p>设置这两个参数：  reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接； recyse是加速TIME-WAIT  sockets回收</p>
<p>用netstat再观察正常<br />
这里解决问题的关键是如何能够重复利用time_wait的值，我们可以设置时检查一下time和wait的值<br />
#sysctl  -a | grep time | grep  wait<br />
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait =  120<br />
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait =  60<br />
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait =  120</p>
<p>这样的现象实际是正常的，有时和访问量大有关，设置这两个参数：  reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接； recyse是加速TIME-WAIT  sockets回收</p>
<p>说明：<br />
net.ipv4.tcp_syncookies = 1 表示开启SYN  Cookies。当出现SYN等待队列溢出时，</p>
<div>启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br />
net.ipv4.tcp_tw_reuse  = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br />
net.ipv4.tcp_tw_recycle  = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭。<br />
net.ipv4.tcp_fin_timeout = 30  表示如果套接字由本端要求关闭，这个参数决定了它保持在FIN-WAIT-2状态的时间。<br />
net.ipv4.tcp_keepalive_time = 1200  表示当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时，改为20分钟。<br />
net.ipv4.ip_local_port_range  = 1024 65000  表示用于向外连接的端口范围。缺省情况下很小：32768到61000，改为1024到65000。<br />
net.ipv4.tcp_max_syn_backlog  = 8192 表示SYN队列的长度，默认为1024，加大队列长度为8192，可以容纳更多等待连接的网络连接数。<br />
net.ipv4.tcp_max_tw_buckets = 5000  表示系统同时保持TIME_WAIT套接字的最大数量，如果超过这个数字，TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000，改  为5000。对于Apache、Nginx等服务器，上几行的参数可以很好地减少TIME_WAIT套接字数量，但是对于Squid，效果却不大。此项参  数可以控制TIME_WAIT套接字的最大数量，避免Squid服务器被大量的TIME_WAIT套接字拖死。</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1230/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>查看Apache并发请求数及其TCP连接状态</title>
		<link>http://www.187299.com/archives/1112</link>
		<comments>http://www.187299.com/archives/1112#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:45:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1112</guid>
		<description><![CDATA[[文章作者：张宴 本文版本：v1.1 最后修改：2007.07.27 转载请注明出处：http://blog.s135.com] 这两天搭建了一组Apache服务器，每台服务器4G内存，采用的是prefork模式，一开始设置的连接数太少了，需... ]]></description>
			<content:encoded><![CDATA[<p>[文章作者：张宴 本文版本：v1.1 最后修改：2007.07.27 转载请注明出处：http://blog.s135.com]</p>
<p>这两天搭建了一组Apache服务器，每台服务器4G内存，采用的是prefork模式，一开始设置的连接数太少了，需要较长的时间去响应用户的请求，后来修改了一下Apache 2.0.59的配置文件httpd.conf：<br />
引用<br />
# prefork MPM<br />
# StartServers: number of server processes to start<br />
# MinSpareServers: minimum number of server processes which are kept spare<br />
# MaxSpareServers: maximum number of server processes which are kept spare<br />
# MaxClients: maximum number of server processes allowed to start<br />
# MaxRequestsPerChild: maximum number of requests a server process serves</p>
<p>StartServers         10<br />
MinSpareServers      10<br />
MaxSpareServers      15<br />
ServerLimit          2000<br />
MaxClients           2000<br />
MaxRequestsPerChild  10000</p>
<p>查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：<br />
Linux命令：<br />
引用<br />
ps -ef | grep httpd | wc -l</p>
<p>返回结果示例：<br />
1388<br />
表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整，我这组服务器中每台的峰值曾达到过2002。</p>
<p>查看Apache的并发请求数及其TCP连接状态：<br />
Linux命令：<br />
引用<br />
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</p>
<p>（这条语句是从新浪互动社区事业部技术总监王老大那儿获得的，非常不错）<br />
返回结果示例：<br />
LAST_ACK 5<br />
SYN_RECV 30<br />
ESTABLISHED 1597<br />
FIN_WAIT1 51<br />
FIN_WAIT2 504<br />
TIME_WAIT 1057<br />
其中的SYN_RECV表示正在等待处理的请求数；ESTABLISHED表示正常数据传输状态；TIME_WAIT表示处理完毕，等待超时结束的请求数。</p>
<p>关于TCP状态的变迁，可以从下图形象地看出：<br />
点击在新窗口中浏览此图片<br />
状态：描述<br />
CLOSED：无连接是活动的或正在进行<br />
LISTEN：服务器在等待进入呼叫<br />
SYN_RECV：一个连接请求已经到达，等待确认<br />
SYN_SENT：应用已经开始，打开一个连接<br />
ESTABLISHED：正常数据传输状态<br />
FIN_WAIT1：应用说它已经完成<br />
FIN_WAIT2：另一边已同意释放<br />
ITMED_WAIT：等待所有分组死掉<br />
CLOSING：两边同时尝试关闭<br />
TIME_WAIT：另一边已初始化一个释放<br />
LAST_ACK：等待所有分组死掉</p>
<p>转载自：<a href="http://blog.s135.com/post/269/" target="_blank">http://blog.s135.com/post/269/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP程序页面打开空白</title>
		<link>http://www.187299.com/archives/1090</link>
		<comments>http://www.187299.com/archives/1090#comments</comments>
		<pubDate>Sat, 27 Jun 2009 05:35:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1090</guid>
		<description><![CDATA[已经遇到过两次了，打开一片空白，没有任何提示。 1次是Discuz！首页打开时一片空白，但UCenter又可以打开，登录进后台stat index.php，发现文件的修改日期有问题，被修改日期是6月16日，论坛改... ]]></description>
			<content:encoded><![CDATA[<p>已经遇到过两次了，打开一片空白，没有任何提示。</p>
<p>1次是Discuz！首页打开时一片空白，但UCenter又可以打开，登录进后台stat index.php，发现文件的修改日期有问题，被修改日期是6月16日，论坛改版做好后，很久没有修改过这些文件了。估计是被人入侵了！网上有说是编码问题。难道别人把我文件的编码修改了？查看了下备份目录，刚好在6月13日有个备份，把它解压缩出来，覆盖掉原来的，一切恢复正常。</p>
<p>2次是朋友的一个很简单的站，打开是一个空白页面，对比过配置文件，发现跟其他站点的配置一样，怀疑会不会是程序不能在二级目录下运行，就把该主机的根目录设置为那二级目录，结果打开还是不行，又改回来，查看了Nginx的日志，没有错。最后去程序官方，重新下载了一个，直接在服务器上解压缩，再访问，一切正常。注意啊！估计是从Windows传文件上去时，文件出现的问题。无论是SFTP还是FTP，都记得要用binary（二进制）方式上传。这样是最保险的！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1090/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Awstats注意问题</title>
		<link>http://www.187299.com/archives/1041</link>
		<comments>http://www.187299.com/archives/1041#comments</comments>
		<pubDate>Wed, 24 Jun 2009 13:47:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[MS]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=1041</guid>
		<description><![CDATA[很久以前把Apache的日志下载回来用awstats分析，先分析前天的日志，然后分析昨天的， 执行以下命令： C:\Program Files\AWStats\wwwroot\cgi-bin>awstats.pl -config=localhost 刷新浏览器页面，发现还是前天的数... ]]></description>
			<content:encoded><![CDATA[<p>很久以前把Apache的日志下载回来用awstats分析，先分析前天的日志，然后分析昨天的，</p>
<p>执行以下命令：</p>
<p>C:\Program Files\AWStats\wwwroot\cgi-bin>awstats.pl -config=localhost</p>
<p>刷新浏览器页面，发现还是前天的数据</p>
<p>经过一番查找，发现</p>
<p>C:\Program Files\AWStats\wwwroot\cgi-bin>awstats.pl -config=localhost</p>
<p>当运行此命令后，命令会生成一个txt文件，C:\Program Files\AWStats\wwwroot\cgi-bin\awstats112008.localhost.txt<br />
如果修改了access_log，需要先删除该awstats112008.localhost.txt（如果需要保留，则将其改名），再运行awstats.pl -config=localhost，这样，通过浏览器才能查看最新的日志</p>
<p>以上说法未必对，有待求证，有可能是awstats只允许按月来分析，而不允许整年地分析，才会导致无法update，试下加全年参数？</p>
<p>另外，要修改awstats.pl里perl命令的路径，因为它默认是类nix的路径，所以要把它修改为Windows下perl的安装路径</p>
<p>当然也用awstats来分析maillog，要先运行一个转换程序，忘了，太久了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/1041/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apache2关于libphp5.so的permission denied的解决方法</title>
		<link>http://www.187299.com/archives/993</link>
		<comments>http://www.187299.com/archives/993#comments</comments>
		<pubDate>Thu, 18 Jun 2009 17:07:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=993</guid>
		<description><![CDATA[今天弄一个CentOS,安装httpd-2.2.8 和php-5.2.5，一切顺利。 最后一步重新启动apache报如下错误: httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/... ]]></description>
			<content:encoded><![CDATA[<p>今天弄一个CentOS,安装httpd-2.2.8 和php-5.2.5，一切顺利。<br />
最后一步重新启动apache报如下错误:<br />
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied</p>
<p>原因：是Linux有一个SELinux保护模式引起的。</p>
<p>解决办法：</p>
<p>1关闭SELINUX的方法:<br />
vi /etc/selinux/config 将SELINUX=enforcing 改成SELINUX=disabled 需要重启<br />
这个方法可能会对服务器带来风险。</p>
<p>2不关闭SELINUX的方法:<br />
# setenforce 0<br />
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so<br />
# service httpd restart<br />
# setenforce 1</p>
<p>转载自：<a href="http://hi.baidu.com/shengit/blog/item/9d4da12b3b682993033bf6a2.html" target="_blank">http://hi.baidu.com/shengit/blog/item/9d4da12b3b682993033bf6a2.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/993/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>查看Apache服务器Module加载状况</title>
		<link>http://www.187299.com/archives/932</link>
		<comments>http://www.187299.com/archives/932#comments</comments>
		<pubDate>Sun, 24 May 2009 15:24:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=932</guid>
		<description><![CDATA[查看Apache服务器的Module加载状况 httpd -M 输出如下： Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) auth_basic_module (shared) authn_file_module (shared) authz_host_module (shared) ... ]]></description>
			<content:encoded><![CDATA[<p>查看Apache服务器的Module加载状况<br />
httpd -M</p>
<p>输出如下：</p>
<p>Loaded Modules:<br />
core_module (static)<br />
mpm_prefork_module (static)<br />
http_module (static)<br />
so_module (static)<br />
auth_basic_module (shared)<br />
authn_file_module (shared)<br />
authz_host_module (shared)<br />
authz_user_module (shared)<br />
authz_groupfile_module (shared)<br />
include_module (shared)<br />
log_config_module (shared)<br />
env_module (shared)<br />
setenvif_module (shared)<br />
mime_module (shared)<br />
status_module (shared)<br />
autoindex_module (shared)<br />
vhost_alias_module (shared)<br />
negotiation_module (shared)<br />
dir_module (shared)<br />
actions_module (shared)<br />
userdir_module (shared)<br />
alias_module (shared)<br />
rewrite_module (shared)<br />
cgi_module (shared)<br />
php5_module (shared)<br />
Syntax OK</p>
<p>查看已编译模块</p>
<p>httpd -l</p>
<p>输出如下：</p>
<p>Compiled in modules:<br />
core.c<br />
prefork.c<br />
http_core.c<br />
mod_so.c</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/932/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>谈谈Apache的优化</title>
		<link>http://www.187299.com/archives/897</link>
		<comments>http://www.187299.com/archives/897#comments</comments>
		<pubDate>Wed, 20 May 2009 09:46:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=897</guid>
		<description><![CDATA[版权声明：可以任意转载，但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2007/08/09/about-apache-perf-tuning/以及本声明。 今天说说Apache的优化。为什么要优化？因为服务器资源不够用。 ... ]]></description>
			<content:encoded><![CDATA[<p>版权声明：可以任意转载，但转载时必须标明原作者charlee、原始链接<a href="http://tech.idv2.com/2007/08/09/about-apache-perf-tuning/" target="_blank">http://tech.idv2.com/2007/08/09/about-apache-perf-tuning/</a>以及本声明。</p>
<p>今天说说Apache的优化。为什么要优化？因为服务器资源不够用。 资源有很多方面，但根据木桶理论，只要有一种资源不够用， 整个服务器的性能就会受到影响（所谓瓶颈）。</p>
<p>服务器资源</p>
<p>那么服务器的资源包括哪些？对于网站来说主要是CPU、TCP连接数这两者。 CPU表现在任务数上，在Linux下使用平均负载(loadavg)来衡量。 可通过以下命令来查看（参考这篇文章）：</p>
<p>cat /proc/loadavg<br />
对于单CPU的服务器，loadavg高于1，表明任务队列出现了等待，CPU忙不过来了。 超过2以上就会明显感到性能降低了。</p>
<p>TCP连接数可通过以下命令查看：</p>
<p>netstat -ant | grep :80 | wc -l<br />
如果要实时监控服务器资源，可参考OpenNMS项目。</p>
<p>注1：内存不算，低廉的价格使得网站服务器很少有因为内存不够而down掉的。<br />
注2：CPU%是瞬时的CPU使用率，通常无法反映出整体负载。</p>
<p><span id="more-897"></span></p>
<p>Apache配置命令</p>
<p>Apache在资源方面的配置命令主要有以下几条。</p>
<p>KeepAlive    是否允许持续连接<br />
MaxKeepAliveRequests    允许的持续连接的最大数<br />
KeepAliveTimeout    持续连接在没有请求多少秒后切断<br />
StartServers    最初启动时启动多少个服务器进程<br />
MinSpareServers    空闲服务器进程的最小数<br />
MaxSpareServers    空闲服务器进程的最大数<br />
MaxRequestsPerChild    每个子进程处理的最大请求数<br />
KeepAlive</p>
<p>前三个KeepAlive相关的指令用来设置持续连接。 通常都是每个HTTP请求对应一个TCP连接，但对于一个包含许多图片的网页来说， 客户端会在瞬间发出多个HTTP请求，此时多次建立TCP连接会大大降低响应速度。 此时通过持续连接，可以允许用户在一个TCP连接中发出多个HTTP请求， 减少TCP连接建立次数，提高响应速度。</p>
<p>这种情况下，应当通过access_log统计出连续HTTP请求出现的次数、间隔时间、访问量， 以确定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用；太大了，持续连接迟迟不断， 浪费TCP连接数不说，更糟糕的是系统中的 httpd 进程数目会因此不断增加， 使得系统负载升高，甚至会导致服务器失去响应。</p>
<p>但是在处理动态网页请求时，由于用户很少会瞬间请求多个动态网页 （一般都是打开页面之后阅读好半天才点下一页）， 此时打开KeepAlive无异于浪费TCP连接数。</p>
<p>结论就是，放动态网页的就 KeepAlive Off 以提高吞吐量， 放静态内容如图片、js代码等就 KeepAlive On 以减少TCP连接建立次数。</p>
<p>但一个Apache只能有一种 KeepAlive 设置，怎么办？很简单，弄两台服务器， 一个专门放脚本，一个专门放图片。</p>
<p>服务器进程数</p>
<p>再说说下面的 StartServers、MinSpareServers、MaxSpareServers。 StartServers基本不用修改，因为Apache会自动调节子进程数。 MinSpareServers和MaxSpareServers是空闲子进程数目，何为空闲子进程？ 假设某一时刻系统中共有30个httpd进程，其中一个是父进程，20个在处理请求， 那么空闲子进程数就是9个。</p>
<p>空闲进程少了，大量的突发请求会使服务器疲于进程创建，降低效率； 而太多反而会增加系统进程数，增大系统负载。</p>
<p>实际上，默认值已足够处理一般的突发请求，所以除非是流量特别特别巨大的网站， 否则不要修改这些设置。</p>
<p>就算流量特别特别大，也是通过负载平衡系统来降低每台服务器的访问量，不会修改这几个值。</p>
<p>MaxRequestsPerChild</p>
<p>这个值设置子进程在处理多少个请求之后自动结束。 这个选项是用来防止进程由于内存泄漏等使用内存过多。 一般默认值即可。</p>
<p>总结</p>
<p>说来说去其实最重要的还是 KeepAlive 的设置， 而性能调节也就是调整 KeepAlive、KeepAliveTimeout 值。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/897/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）</title>
		<link>http://www.187299.com/archives/844</link>
		<comments>http://www.187299.com/archives/844#comments</comments>
		<pubDate>Thu, 14 May 2009 03:00:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Network]]></category>

		<guid isPermaLink="false">http://www.187299.com/?p=844</guid>
		<description><![CDATA[查看httpd进程数（即prefork模式下Apache能够处理的并发请求数） Linux命令： ps -ef &#124; grep httpd &#124; wc -l 查看Apache的并发请求数及其TCP连接状态： Linux命令： netstat -n &#124; awk ‘/^tcp/ {++S[$NF]} END {f... ]]></description>
			<content:encoded><![CDATA[<p>查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）</p>
<p>Linux命令：<br />
ps -ef | grep httpd | wc -l</p>
<p>查看Apache的并发请求数及其TCP连接状态：</p>
<p>Linux命令：<br />
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’</p>
<p>返回结果示例：<br />
LAST_ACK 5<br />
SYN_RECV 30<br />
ESTABLISHED 1597<br />
FIN_WAIT1 51<br />
FIN_WAIT2 504<br />
TIME_WAIT 1057</p>
<p>说明:<br />
SYN_RECV表示正在等待处理的请求数；<br />
ESTABLISHED表示正常数据传输状态；<br />
TIME_WAIT表示处理完毕，等待超时结束的请求数</p>
<p>转载自：<a href="http://www.wunengwu.cn/see-the-number-of-httpd-process-ie-prefork-mode-apache-can-handle-several-concurrent-requests-collection.html" target="_blank">查看httpd进程数</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.187299.com/archives/844/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

