网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 局域网DIY—专业局域网网站 >> 局域网教程 >> 服务器 >> Web服务器 >> 文章正文
  BSD上Apache性能的调整          【字体:
BSD上Apache性能的调整
作者:佚名    文章来源:yesky    点击数:    更新时间:2005-5-9    

  FreeBSD是一个性能稳定的免费操作系统,当前很多的商业网站使用在FreeBSD上的Apache来搭建Web服务器平台。在FreeBSD上,Apache的运行性能受到很多因素的影响,本文将介绍如何调整Apache的性能,使你的Web服务器运行的更好。

  和其他操作系统一样,监听队列(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服务器并且系统的反应很慢,那么如下工作将很有用处:

  • 运行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。

文章录入:    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    Web服务器安全指南
    在Apache上以 DSO 方式安装 
    Apache Web让JSP"动"起来
    通过内核httpd实现web服务加
    构建高负载Web服务器
    Apache服务器的用户认证
    Apache的httpd.conf文件常用
    安全维护 IIS ASP 站点的高级
    利用NT建立Web站简历点123
    Apache 性能最优化分析(上)
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    局域网DIY】.版权所有 客服QQ:5820031 站长:晨光
    Copyright © 2000-2020 www.LANDIY.net All Rights Reserved
     


    粤ICP备05009256号