文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>网站服务器性能

网站服务器性能

时间:2006-09-25  来源:net_xiaobao

1,

影响网站服务器性能的最大的因素是内存。 一个网站服务器应该从不使用交换机制,因为交换产生的滞后使用户总感觉“不够快”, 所以用户就可能去按“停止”和“刷新”,从而带来更大的负载。 你可以,也应该,控制MaxClients的设置, 以避免服务器产生太多的子进程而发生交换。

其他因素就很普通了,装一个足够快的CPU, 一个足够快的网卡,几个足够快的硬盘, 这里说的“足够快”是指能满足际应用的需求。

操作系统是很值得关注的又一个因素,已经被证实的很有用的经验有:

  • 选择能够得到的最新的最稳定的版本并打好补丁。 近年来,许多OS厂商都提供了可以显著改善性能的TCP的栈和线程库。

  • 如果你的OS支持sendfile(2)系统调用,则务必安装带有此功能的版本或补丁 (对Linux来说,就是使用Linux 2.4或更高版本,对Solaris 8的早期版本,则需要安装补丁)。 在支持sendfile的系统中,Apache 2可以更快地发送静态内容而占用较少的CPU时间。

  • HostnameLookups

    在Apache 1.3以前的版本中, HostnameLookups被默认地设置为On. 它会带来延迟,因为对每一个请求都需要作一次DNS查询。 在Apache 1.3中,它被默认地设置为Off. 但是(在1.3及其以后的版本中), 如果使用了任何Allow from domain 或者 Deny from domain指令,则代价是要进行两次DNS查询 (一次正向的,和一次反向的,以确认没有作假). 所以,为了得到最高的性能, 应该避免使用这些指令(不用域名而用IP地址也是可以的).

    注意,可以把这些指令包含在<Location /server-status>段中使之局部化。 在这种情况下,只有对这个区域的请求才会发生DNS查询。 下例禁止除了.html和.cgi以外的所有DNS查询:

    HostnameLookups off <Files ~ "\.(html|cgi)$"> HostnameLookups on </Files> 

    如果在某些CGI中偶尔需要DNS名称,则可以调用gethostbyname。

    类似地,如果需要日志文件提供主机名信息以生成分析报告, 则可以使用日志后处理程序logresolve, 以完成DNS搜索,而客户端无须等待。最好是在其他机器上, 而不是在网站服务器上执行后处理和其他日志统计操作,以免影响服务器的性能。

    FollowSymLinks和SymLinksIfOwnerMatch

    如果URL空间中没有Options FollowSymLinks, 或者有Options SymLinksIfOwnerMatch,Apache就必须执行额外的系统调用以验证符号连接。 每一个文件名组成部分需要一个额外的调用。例如,如果设置了:

    DocumentRoot /www/htdocs <Directory /> Options SymLinksIfOwnerMatch </Directory> 

    在请求URI /index.html时,Apache将对/www, /www/htdocs和/www/htdocs/index.html执行lstat(2)。 而lstats的执行结果不会被缓存,因此对每一个请求都要执行一次。 如果确实需要验证符号连接的安全性,则可以这样:

    DocumentRoot /www/htdocs <Directory /> Options FollowSymLinks </Directory> <Directory /www/htdocs> Options -FollowSymLinks +SymLinksIfOwnerMatch </Directory> 

    如此,至少可以避免多余的对DocumentRoot路径的验证。 注意,如果Alias或者RewriteRule中含有DocumentRoot以外的路径,那么就需要增加相应的这样的段。 为了得到最佳性能,并放弃对符号连接的保护,可以在需要的地方都设置FollowSymLinks, 而放弃使用SymLinksIfOwnerMatch.

    AllowOverride

    如果URL空间允许覆盖(通常是用.htaccess文件), 则Apache会试图对每一个文件名组成部分打开.htaccess,例如:

    DocumentRoot /www/htdocs <Directory /> AllowOverride all </Directory> 

    如果请求URI /index.html,则Apache会试图打开/.htaccess, /www/.htaccess和/www/htdocs/.htaccess. 其解决方法于前面所述的Options FollowSymLinks类似。 为了得到最佳性能,在文件系统中需要的地方都使用AllowOverride None。

  • 协商

    实践中,内容协商的好处大于性能的损失, 如果你很在意那一点点的性能损失,则可以避免使用内容协商。 但是仍然有个方法可以提高服务器的速度,就是,不要用通配符,如:

    DirectoryIndex index 

    而使用完整的列表,如:

    DirectoryIndex index.cgi index.pl index.shtml index.html 

    其中最常用的应该放在前面.

    还有,建立一个明确的type-map文件在性能上优于MultiViews, 因为必要的信息都在一个单一的文件中,而无须搜索目录.

  • 内存映射

    在Apache 2.0需要搜索被发送文件的内容时,比如处理服务器端包含时, 如果OS支持某种形式的mmap(2),则会对此文件执行内存映射。

    在某些平台上,内存映射可以提高性能,但是在某些情况下, 内存映射会降低性能甚至影响到httpd的稳定性:

    • 在某些操作系统中,如果增加了CPU,mmap还不如read(2)。 比如,在多处理器的Solaris服务器上,关闭了mmap, Apache 2.0传送服务器解析文件有时候反而更快。

    • 如果你对作为NFS装载的文件系统中的一个文件进行了内存映射, 而另一个NFS客户端的进程删除或者截断了这个文件, 那么你的进程在下一次访问已经被映射的文件内容时,会产生一个总线错误。

    如果有上述情况发生,则应该使用EnableMMAP off关闭对发送文件的内存映射。 (注意: 此指令可以被针对目录的设置覆盖)

  • 进程的建立

    在Apache 1.3以前,MinSpareServers, MaxSpareServers和StartServers的设置对性能都有很大的影响。 尤其是,为了应对负载而建立足够的子进程时,Apache需要有一个"渐进(ramp-up)"的过程。 在最初建立StartServers子进程后, 为了满足MinSpareServers设置的需要,每一秒钟只能建立一个子进程。 所以,对一个需要同时处理100个客户端的服务器,如果StartServers使用默认的设置5, 则为了应对负载而建立足够的子进程的时间需要95秒。 在实际应用中,如果不频繁重新启动服务器,这样还可以, 但是如果仅仅为了提供10分钟的服务,这样就很糟糕了。

    "一秒钟一个"的规定目的是为了避免在创建子进程过程中服务器对请求的响应停顿, 但是它对服务器性能的影响太大了,必须予以改变。在Apache 1.3中, 这个"一秒钟一个"的规定变得宽松了,创建一个进程,等待一秒钟,继续创建第二个, 等待一秒钟,继而创建四个,如此按指数级增加创建的进程数,最多达到每秒32个, 直到满足MinSpareServers设置的值为止。

    从多数反映看来,似乎没有必要调整MinSpareServers, MaxSpareServers和StartServers. 如果每秒钟创建的进程数超过4个, 则会在ErrorLog中产生一条消息, 如果产生大量此消息,则可以考虑修改这些设置。 可以使用mod_status的输出作为参考。

    与进程的创建相关的是由MaxRequestsPerChild引发的进程的销毁。 其默认值是0, 意味着每个进程所处理的请求数是不受限制的。 如果此值设置得很小,比如30,则可能需要大幅增加。在SunOS或者Solaris的早期版本上, 其最大值为10000以免内存短缺。

    如果keep-alives有效,子进程将保持忙碌状态以等待被打开连接上的新的请求。 为了最小化其负面影响,KeepAliveTimeout的默认值被设置为15秒, 以谋求网络带宽和服务器资源之间的权衡。如果比较空闲,则可以提高此值到60秒左右, 参见 most of the benefits are lost.

  •  

相关阅读 更多 +
排行榜 更多 +
卡通射击战场

卡通射击战场

飞行射击 下载
飞行汽车模拟器3d

飞行汽车模拟器3d

飞行射击 下载
弓箭手传奇魔法英雄免费版

弓箭手传奇魔法英雄免费版

休闲益智 下载