Apache实战优化

Apache在Linux和Windows实战优化

在Linux下:

1. 首先要了解Apache采用的MPM(Multi -Processing Modules,多道处理模块)
MPM是Apache的核心,它的作用是管理网络连接、调度请求。

大家都知道在Apache2.0中MPM分为3种:perfork、worker、event。

perfork从Apache 1.3中继承下来的,它采用的是进程管理方式,所以它可以提供更可靠的性能和更好的兼容性;worker是Apache2.0中新增加的方式,它采用了线程控制方法,可以比perfork更节约系统开销、处理更多的数据量,但同时兼容性并不是很好,很多旧的程序无法工作在worker下;event仍处于试验阶段,它为每个任务分配不同的进程池,目前不应该采用。

通过命令 httpd -l 可以获取目前Apache采用的是哪种MPM
本文仅针对perfork方式进行讨论

2. 了解perfork的工作方式:
查看Apache2.0的配置文件httpd.conf,可以看到perfork的配置段,大致如下:

ServerLimit       256

StartServers       5

MinSpareServers   10

MaxSpareServers   15

MaxClients       256

MaxRequestsPerChild  4000

当Apache被启动时,Apache会自动创建StartServers个进程,并且尽力将空闲进程数保持在MinSpareServers和MaxSpareServers之间。
如果空闲进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建进程。
如果空闲进程小于MaxSpareServers,Apache将会删除多余的空闲进程,释放服务器资源。
进程数的最大值由MaxClients控制,在Apache1.3中最大只能设置为256,但在Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须 MaxClients ≤ ServerLimit ≤ 20000
MaxRequestsPerChild用来控制每个进程在处理了多少次请求之后自动销毁,这个参数可以设置为0表示无限(即不销毁进程)。

3. 优化perfork
首先,对于一个负载相对较高的网站来说,256的进程限制是不够的,如果服务器已经达到256的极限,那么接下去的访问就需要排队,这也就是为什么某些服务器负载不高,但是访问却很慢的原因之一。所以首先应该了解服务器在繁忙时的进程数量。

通过命令ps -ef|grep httpd|wc -l可以了解到当前系统中Apache进程数,通过设置ServerLimit和MaxClients来达到为服务器软扩容的目的。

然后,在访问量高峰期,经常会出现的情况是突然之间发生非常多的并发连接,然后突然之间减少了很多访问。如果Apache没有准备足够数量的预备进程,那访问只能等待Apache每秒1个的新增进程,随后又要将多余的进程删除,那Apache只能一直忙于新建和销毁进程,大大地降低了访问速度。可以适当增加StartServers、MinSpareServers、MaxSpareServers来使得Apache不需要一直忙于作无用功。

最后,强烈推荐MaxRequestsPerChild不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏的影响,因为你不知道运行在Apache上的应用程式在什么时候会出错导致内存泄漏。

设置完之后大致是这样的:

ServerLimit       1000

StartServers       30

MinSpareServers   30

MaxSpareServers   45

MaxClients       1000

MaxRequestsPerChild  4000

在Windows下:

(1)首选查看apache的工作模式
windows下的查看apache的工作模式命令:httpd -l
如果列出mod_win32.c,则表示是 win32.c 工作方式。 列出的全部内容如下所示:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c

mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。

(2)mod_win32.c工作模式,对应的优化内容如下
在httpd.conf文件中,加入以下内容
<IfModule mpm_winnt.c>
   ThreadsPerChild 250
   MaxRequestsPerChild 5000
</IfModule>

ThreadsPerChild
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。

mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。

MaxRequestsPerChild
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0.
官方参考手册中不建议设置为0, 主要基于两点考虑:
(1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存;
(2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为0或很大的数字,否则设置一个小的数值。需要说明的是,如果这个值设置的太小的话会造成Apache频繁重启,在日志文件中会看到如下的文字:
Process exiting because it reached MaxRequestsPerChild. Signaling the parent

这样一来降低了Apache的总体性能。

另外,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开它:

* # 首先需要加载mod_status模块
     LoadModule status_module modules/mod_status.so
    * # 然后设置访问的地址
     <Location /server-status>
         SetHandler server-status
         Order deny,allow
         Deny from all
         # 如果限制某个IP访问则设置为 Allow from 192.168.0.1
         Allow from all
     </Location>

时间: 2024-10-08 19:20:23

Apache实战优化的相关文章

centos mysql 实战 优化 汇总

centos mysql 实战   优化 汇总 my.cnf 汇总 包括主从 内核参数汇总 命令汇总 备份还原命令 主从命令 调优汇总 f

Linux课程笔记 Apache的优化

Apache服务优化 1 配置Apache日志轮询 apache自带的日志轮询工具也是可以使用的,但是老师测试会丢日志,所以采用cronolog来配置日志轮询 tar zxf cronolog-1.6.2.tar.gz cd cronolog-1.6.2 ./configure make make install <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/www" Ser

linux下编译安装的Apache安全优化方案

上节我们学习了Linux的系统优化解决方案,我个人总结为18项,当然还有别的,例如系统内核裁剪这些我没讲到,为什么呢?大家不用太关心了,要记得我们学习的目的是能够胜任工作即可.我们对一个知识点不要讲的太深,避免钻进死胡同了,那就不好啦. 今天我们讲解下lamp架构安全优化中的Apache服务的安全优化.在讲这节内容之前我说下,静态web请求的流程: 当客户端访问一个静态网站的时候,网站上的Apache服务就会给他发送html文档给客户端浏览器,客户端浏览器会进行解析,然后就是我们看到的内容了.

Windows下Apache的优化

Windows下Apache的优化 (2012-06-02 13:00:35) 转载▼ (1)首选查看apache的工作模式windows下的查看apache的工作模式命令:httpd -l如果列出mod_win32.c,则表示是 win32.c 工作方式. 列出的全部内容如下所示:core.cmod_win32.cmpm_winnt.chttp_core.cmod_so.c mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子

25个Apache性能优化技巧推荐

25个Apache性能优化技巧推荐 Apache至今仍处于web服务器领域的霸主,无人撼动,没有开发者不知道.本篇文章介绍25个Apache性能优化的技巧,如果你能理解并掌握,将让你的Apache性能有显著的提升! Apache部分: 1. 移除不用的模块. 2. 使用 mod_disk_cache NOT mod_mem_cache . 3. 扁平架构配置mod_disk_cache. 4. 安装恰当的Expires, Etag, 和 Cache-Control Headers . 5. 将缓

Apache 深度优化 ab压力测试

网站性能压力了测试是服务器网站性能调优过程中必不可少的一环,只有让服务器处在高压的情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_load.webbench.siege.ab是Apache自带的压力测试工具,非常实用,可以模拟多线程并发请求,测试服务器负载压力.它不仅可以对Apache服务器进行网站访问压力测试,而且可以对其他类型服务器进行压力测试.ab对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多内存,但却会

Apache深度优化

Apache深度优化一. 开启apache的Gzip(defalte)功能gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,还是相当不错的. 在 Apache2 之后的版本,模块名不叫 gzip,而叫 mod_deflate 在apache1.0版本软件本身不支持页面的压缩功能,通过第三方模块gzip完成,到2.2版本apache软件基金会自己开发了deflate压缩模块deflate压缩模块相比gzip压缩效率低,消耗资源少,压缩速度快,在压缩过程中需要定义压缩等级

apache网页优化之压缩功能和缓存时间

Apache网页优化 优化概述 压缩功能优化 配置Apache的网页压缩功能,是使用gzip压缩算法对网页内容进行压缩后再传输到客户端浏览器 先把宿主机的共享目录共享到Linux下 [[email protected] ~]# smbclient -L //192.168.100.23/ #访问宿主机的共享文件 Enter SAMBA\root's password: OS=[Windows 10 Enterprise 17763] Server=[Windows 10 Enterprise 6

Apache网页优化之防盗链和隐藏版本号

Apache网页优化之防盗链 防盗链的作用 防盗链就是防止别人的网址代码里面盗用服务器的图片,文件,视频等相关资源如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力所以作为网站的维护人员,要杜绝我们服务器的静态资源被其他网站盗用 防盗链的配置规则 %{}HTTP_REFERER}: 浏览header中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页 !^: 不以后面的字符串开头 .*$: 以任意字符结尾 NC: 不区分大写 R:强制跳转 防盗链规则匹配说明 Rewri