Linux 版 (精华区)

发信人: tcpip (俺的昵称改了), 信区: Linux
标  题: 调整BSD上Apache的性能
发信站: 紫 丁 香 (Wed Sep  8 13:36:11 1999), 转信

【 以下文字转载自 Joke 讨论区 】
【 原文由 tcpip 所发表 】
发信人: zzt (我命由我不由天), 信区: Linux

标  题: 调整BSD上Apache的性能

发信站: BBS 荔园晨风站 (Sat Sep  4 18:14:16 1999), 转信

调整BSD上Apache的性能 

From http://www.apache.org/docs/misc/perf-bsd44.html 

Cernet译 

和其他操作系统一样,监听队列(listen queue)是首要限制条件。下面是Aaron Gif

ford <agifford@InfoWest.COM> 对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的性能调整 

From Chuck Murcko <chuck@telebase.com> 

如果正运行着一个非常繁忙的BSD Apache服务器并且系统的反应很慢,那么如下工作将

很有用处: 

    运行vmstat检查内存使用情况、page/swap利用率等 

    运行netstat -m检查mbuf使用情况 

    运行fstat检查文件描述符使用情况 

这些应用提供给你该如何调整kernel的信息以及是否应该增加一些内存。下面是一个有

很重负载的BSD服务器的kernel配置参数(实际是BSDI服务器,但是与FreeBSD和4.4-L

ite相关),系统其他参数没有变化。 

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。该例中NPR

OC的值来源于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" <mi@ALDAN.ziplink.net> 写到: 

对kernel和经常使用的应用程序进行优化非常有用。在AMD-133(486类CPU)上重新编

译FreeBSD kernel时加上 

      -m486 -fexpensive-optimizations -fomit-frame-pointer -O2 

可以减少 "unable" errors。 

 -- 

日出东方,唯我不败;

    天上地下,唯我独尊。

--

※ 修改:.zzt 於 Sep  4 18:16:50 修改本文.[FROM: 210.39.3.68]

※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 210.39.3.68]

--

※ 转寄:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 202.96.134.135]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtftp.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.496毫秒