2024年5月5日发(作者:)

Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来

说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在

动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行

积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学

习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务

(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。

本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装

/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全

互不影响。

1. WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简

单的估算公式;

2. Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;

修改 HARD_SERVER_LIMIT:

vi /path/to/apache_src/src/include/httpd.h

#define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加

个“0”

apache编译:

./configure --prefix=/home/apache --enable-shared=max --enable-module=mo

st

3. 可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配

合;

mod_php安

装:./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --

with-mysql

mod_resin安装:./configure --with-apxs=/home/apache/bin/apxs

mod_gzip安装:修改Makefile中的 apxs路径:然后make make install

工具:日志轮循工具cronolog安装:

4. 升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;

按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。

系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,

应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置

中相关的配置。

系统升级:系统管理员:升级操作系统/升级Apache

应用升级:应用管理员:升级应用模块,PHP Resin等。

WEB应用的容量规划

Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:

apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memo

ry_per_process ) * 2

apache_max_process = apache_max_process_with_good_perfermance * 1.5

为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?

原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求

的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,

系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:

2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会

因为进程过多导致性能下降。

例子1:

一个apache + mod_php的服务器:一个apache进程一般需要4M内存

因此在一个1G内存的机器上:

apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500

apache_max_process = 500 * 1.5 = 750

所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的

软上限在800个。

例子2:

一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存

在一个2G内存的机器上:

apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000

apache_max_process = 2000 * 1.5 = 3000

以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站

点,可能还会受其他因素:比如带宽等的影响。

Apache安装过程

服务器个数的硬上限HARD_SERVER_LIMIT的修改:

在Apache的源代码中缺省的最大进程数是256个,需要修改

apache_/src/include/httpd.h

#ifndef HARD_SERVER_LIMIT

#ifdef WIN32

#define HARD_SERVER_LIMIT 1024

#elif defined(NETWARE)

#define HARD_SERVER_LIMIT 2048

#else

#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”

#endif

#endif

解释:

Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个

非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当

时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,

而且Apache的软上限 max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器