当前位置: 主页 > 编程知识 > 其他编程 > 网站优化之服务器配置优

网站优化之服务器配置优

时间:2009-9-17来源:互联网 点击:
网站的前台页面进行了优化,后端的数据库服务器也进行优化,cgi程序也根据服务器的配置

进行了相关的优化,剩下的就是对应用的服务器进行相关的优化了。

这些web服务器如果按照默认的配置来运行的话,可以满足大部分的需求,如果只需要

根据业务的特性来更改几项配置就能获得较好的性能,用户能够得到更加良好的用户体验,

那还是很值得的。

常用的web类服务器有如下几个方面的:

1 负载均衡类:haproxy nginx

2 cgi服务器类:apache lighttpd nginx

3 前端cache类:varnish squid

本文主要讲讲apache 2.0的配置优化。

1 apache

apache1.3支持prefork进程模式,apache2.0支持multi thread模式。

进程模式和线程模式的却别在于进程模式重量级一些,所以性能稍微低一些;

但是,稳定一些,一个进程core掉不影响其它的进程。

线程模式轻量级,性能较高;但是多个线程共享一个进程空间,一个线程的core就会影响当前的

所有线程,稳定度低一些。

至于选择线程模式还是进程模式需要根据自己的业务需要的选择了,还有就是开发写的程序是不是

足够的稳定。

httpd.conf中下面的几个参数需要注意:

MaxClients:缺省值是256,描述了最多接受的客户端的数量,如果并发超过256

个客户端的话,就会被阻塞住,放到等待的队列里,所以对大并发的网站

将这个值设置大一些,如1024,不过这个值需要根据你的硬件的配置,如cpu和内存

以及带宽来定,而且2.0的环境下还需要在这个值之前设置ServerLimit 2000,否则启动时会报错

StartServers:缺省值5,意义是apache启动的时候创建的控制进程数目。

这个值也可以设置大一些,这样的话,就可以从容处理一开始的大并发

MinSpareServers:缺省值5,至少保留的空闲进程数目,如果空闲进程小于这个数目,

然后创建1个,1秒后创建2两个,然后1秒后4个直到32个。

MaxSpareServers:缺省值10,最多的空闲进程的数目,如果超过这个数目的进程数,将会被kill掉

MaxRequestsPerChild:缺省值0,每一个子进程能够处理的请求数,设置为0表示从不终止子进程,

不过最好设置为10000或稍大一点值,从而避免内存泄漏,尽早的释放占用的一些资源。

SendBufferSize:缺省值为操作系统的设置,设置tcp中的缓冲区的大小,以字节为单位,

设置这个值需要根据自己的应用来定,对于网络比较拥塞的情况,将值设置为下发包的最大的大小,

不过需要注意,这个值会影响每个tcp链接;如果网络情况良好,可以将这个值设置小一些,

从而浏览器这边可以较早的得到数据,尽早的开始渲染。

KeepAlive:缺省值是On,http1.1的协议为了减少以前每次请求都要连接的情况,设置了keepalive

这个属性,从而可以减少网络连接的负载;对于cgi的服务器建议将这个值设置为off,由于请求相对不连续,

可以提高并发量;然而对于静态文件服务器,如js、css、图片等,由于请求频繁,数据量小,建议

打开这个选项,减少网络的开销。

KeepAliveTimeout:缺省值15,服务器保持连接存活的时间,对于大并发,建议关小一点这个值,

从而可以接受更多的请求。建议设置为3~5秒。

MaxKeepAliveRequests:缺省值100,如果服务器打开的连接接受的请求已经达到这个数目,连接

将会被关闭,这个值的优先级高于MaxClients和ThreadsPerChild。

TimeOut:缺省值300,连接空闲的时间,如果空闲时间大于这个值,连接会被关闭。对于网络延迟

比较小,并发比较大,建议将这个值设置小一些,如10。

LimitRequestBody:缺省值0,PUT或者POST模式请求时的最大包的大小,0值表示没有限制。

根据自己的业务来设置这个值,避免一些恶意的过大的请求包导致服务器瘫痪。

HostnameLookups:缺省值on,输出日志时是否吧用户的IP地址转换为域名,建议关闭这个值,设置为

off,dns比较费时间的。

AllowOverride:缺省值为打开,这样apache会对每个子目录检查htaccess文件,

对性能有一定的影响,如果有必要,建议关闭这个值,设置为none

Options:对于目录的操作设置,建议关闭SymLinksIfOwnerMatch,从而减少lsstat的调用,

打开FollowSymLinks

ServerTokens Prod,减少返回给客户端浏览器的包的大小

在httpd.conf中注释掉你不需要的的module,一方面可以减少apache

的内存占用,毕竟每个module需要一定的内存来保存其信息;另一方面,

可以较少一些回调时的不必要的处理流程。

如果并发很大的话,还需要调整apache服务器的listenbacklog数量。

listenbacklog=511,缺省值是511(具体也要参考操作系统的相关设置),用于设置apache的等待连接队列的最大数量,如果并发很大,

或者遭遇了SYN攻击,需要将这个值设置大一些,如4096,避免一些用户的连接在队列满后被丢弃。

apache服务器尽量的开启压缩功能,由于传输的基本上都是一些html等文本数据,压缩比是很高的,开启压缩功能,能够将网络传输的字节数降到最少,

一方面节约了带宽,毕竟带宽是要花钱的,一方面可以加速下载的时间,提升用户的体验

通过添加mod_deflate模块,并进行最基本的压缩设置

AddOutputFilterByType DEFLATE text/html text/plain text/xml后,通过httpwatch观察的测试结果如下:

GET /test.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Foxy/1; WPS; TencentTraveler 4.0; Foxy/1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

Host: localhost

Connection: Keep-Alive

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 565

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html

1.5K大小的页面test.htm,传输到浏览器时的大小是565字节。压缩比例相当高!

apache的配置与业务的类型有很大的关系的,所以我们在修改了配置后,最好能够进行一下并发和压力测试,从而能够得到一个较好的值:

性能测试客户端工具:

1 ab

ab -n10000 -c100 http://****/php/my.php

-n总共发起的请求数

-c并发的请求数

2 loadrunner

3 服务器性能查看命令:

1)iostat

2)vmstat

3)top

4) netstat

如Php的CGI这边也需要进行一下自身的性能统计,如果cgi性能已经很差了,apache的优化是很难看到。

性能测试CGI:

1 XDEBUG工具的使用

2 CGI代码开启性能测试代码

function getmicrotime()

{

list($usec, $sec) = explode(" ",microtime());

return ((float)$usec + (float)$sec);

}

$time = getmicrotime();

//业务代码

echo "

所用时间: ",getmicrotime() - $time, " seconds";

后续会跟进其它服务器的优化,更多的服务器配置参考:web服务器配置
站长资讯网
. TAG: 网站优化 服务器
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言