apache,Apache优化

apache,Apache优化

阅读:2516次   时间:2011-01-04 12:07:30   字体:[  ]

Apache 2.0中prefork.c模块和worker.c模块 
空闲子进程:是指没有正在处理请求的子进程。 
1、prefork.c模块(一个非线程型的、预派生的MPM) 
prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。 
<IfModule prefork.c> 
ServerLimit 20000 
StartServers 5 
MinSpareServers 5 
MaxSpareServers 10 
MaxClients 1000 
MaxRequestsPerChild 0 
</IfModule> 
ServerLimit 2000 
//默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。 
生效前提:必须放在其他指令的前面 
StartServers 5 
//指定服务器启动时建立的子进程数量,prefork默认为5。 
MinSpareServers 5 
//指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。 
MaxSpareServers 10 
//设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。 
MaxClients 256 
//限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit 。 
MaxRequestsPerChild 10000 
//每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。 
将MaxRequestsPerChild设置成非零值有两个好处: 
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。 
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 
工作方式: 
一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的 (spare)或者是空闲的子进程用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。在Unix系统中,父进程通常以root身份运行以便邦定80端口,而Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于设置子进程的低特权用户。运行子进程的用户必须要对它所服务的内容有读取的权限,但是对服务内容之外的其他资源必须拥有尽可能少的权限。 
2、worker.c模块(支持混合的多线程多进程的多路处理模块) 
worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。 
<IfModule worker.c> 
ServerLimit 50 
ThreadLimit 200 
StartServers 5 
MaxClients 5000 
MinSpareThreads 25 
MaxSpareThreads 500 
ThreadsPerChild 100 
MaxRequestsPerChild 0 
</IfModule> 
ServerLimit 16 
//服务器允许配置的进程数上限。这个指令和ThreadLimit结合使用设置了MaxClients最大允许配置的数值。任何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却会生效。 
ThreadLimit 64 
//每个子进程可配置的线程数上限。这个指令设置了每个子进程可配置的线程数ThreadsPerChild上限。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。默认值是"64". 
StartServers 3 
//服务器启动时建立的子进程数,默认值是"3"。 
MinSpareThreads 75 
//最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。 
MaxSpareThreads 250 
//设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和 
MaxClients 400 
//允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。 
ThreadsPerChild 25 
//每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。 
MaxRequestsPerChild 0 
//设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。 
将MaxRequestsPerChild设置成非零值有两个好处: 
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。 
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 
注意 
对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。 
工作方式: 
每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立 ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。Apache总是试图维持一个备用(spare)或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。在Unix中,为了能够绑定80端口,父进程一般都是以 root身份启动,随后,Apache以较低权限的用户建立子进程和线程。User和Group指令用于设置Apache子进程的权限。虽然子进程必须对其提供的内容拥有读权限,但应该尽可能给予它较少的特权。另外,除非使用了suexec ,否则,这些指令设置的权限将被CGI脚本所继承。 
公式: 
ThreadLimit >= ThreadsPerChild 
MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数 
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild 
硬限制: 
ServerLimi和ThreadLimit这两个指令决定了活动子进程数量和每个子进程中线程数量的硬限制。要想改变这个硬限制必须完全停止服务器然后再启动服务器(直接重启是不行的)。 
Apache在编译ServerLimit时内部有一个硬性的限制,你不能超越这个限制。 
prefork MPM最大为"ServerLimit 200000" 
其它MPM(包括work MPM)最大为"ServerLimit 20000 
Apache在编译ThreadLimit时内部有一个硬性的限制,你不能超越这个限制。 
mpm_winnt是"ThreadLimit 15000" 
其它MPM(包括work prefork)为"ThreadLimit 20000 
注意 
使用ServerLimit和ThreadLimit时要特别当心。如果将ServerLimit和ThreadLimit设置成一个高出实际需要许多的值,将会有过多的共享内存被分配。当设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。 
http://www.linuxdiyf.com/bbs/viewthread.php?tid=16027 
Apache优化对于访问量稍大的站点,Apache的这些默认配置是无法满足需求的,我们仍需调整Apache的一些参数,使Apache能够在大访问量环境下发挥出更好的性能。以下我们对Apache配置文件httpd.conf中对性能影响较大的参数进行一些说明。 
(1) Timeout 该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30。 
(2) KeepAlive 该参数控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。 
(3) MPM - prefork.c 在默认情况下Apache使用Prefork(进程)工作模式,可以说这部分的参数设置是对Apache性能影响的核心和关键。用户可以在配置文档中找到以下配置段: 复制内容到剪贴板 代码:<IfModule prefork.c> 
StartServers 5 
MinSpareServers 5 
MaxSpareServers 10 
MaxClients 15 
MaxRequestsPerChild 0 
</IfModule> 
这就是控制Apache进程工作的配置段,为了更好的理解上述配置中的各项参数,下面让我们先了解一下Apache是如何控制进程工作的。我们知道,在Unix系统中,很多服务(Service)的守护进程(Daemon)在启动时会创建一个进程以准备应答可能的连接请求,服务即进入了端口监听状态,当一个来自客户端(Client)的请求被发送至服务所监听的端口时,该服务进程即会处理该请求,在处理过程中,该进程处于独占状态,也就是说如果此时有其他请求到达,这些请求只能“排队”等待当前请求处理完成且服务进程释放。这样就会导致越来越多的请求处于队列等待状态,实际表现就是该服务处理能力非常低下。Apache使用Prefork模式很好的解决了这一问题。下面我们来看看Apache实际上是如何高效率工作的。 
Apache启动时,Apache会启动StartSpareServers个空闲进程同时准备接收处理请求,当多个请求到来时,StarSpareServers进行会越来越少,当空闲进程减少到MinSpareServers个时,Apache为了能够继续有充裕的进程处理请求,它会再启动StartsServers个进程备用,这样就大大减少了请求队列等待的可能,使得服务效率提高,这也是为什么叫做Pre-fork的原因;让我们继续跟踪Apache的工作,我们假设Apache已经启动了200个进程来处理请求,理论上来说,此时Apache一共有205个进程,而过了一段时间,假设有100个请求都得到了Apache的响应和处理,那么此时这100个进程就被释放成为空闲进程,那么此时Apache有105个空闲进程。而对于服务而言,启动太多的空闲进程时没有任何意义的,反而会降低服务器的整体性能,那么Apache真的会有105个空闲进程么?当然不会!实际上Apache随时在检查自己,当发现有超过MaxSpareServers个空闲进程时,则会自动停止关闭一些进程,以保证空闲进程不过过多。说到这里,用户应该对Apache的工作方式有了一定的了解,如果想获得更多更详细的说明请参阅Apache手册文档。 
我们还有两个参数没有介绍:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您MaxClients最大只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界一流的Web Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于ServerLimit的设定数值的! 
下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048。 
好了,解释了这么多,让我们看看经过修改后Perfork.c配置段的推荐配置: 复制内容到剪贴板 代码:<IfModule prefork.c> 
StartServers 5 
MinSpareServers 5 
MaxSpareServers 10 
ServerLimit 1024 
MaxClients 768 
MaxRequestsPerChild 0 
</IfModule> 
完成了上述对Apache的调整,Apache已经获得了较大的性能改善。记住,在修改任何参数后都需要重启Apache才能生效的。有关Apache的优化远远不止这些,有兴趣的用户可以阅读Apache手册文档或者寻找一些文献资料学习。 
2. PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置。 复制内容到剪贴板 代码:# vi /etc/php.ini 
(1) PHP函数禁用找到: 复制内容到剪贴板 代码:disable_functions = 
该选项可以设置哪些PHP函数是禁止使用的,PHP中有一些函数的风险性还是相当大的,可以直接执行一些系统级脚本命令,如果允许这些函数执行,当PHP程序出现漏洞时,损失是非常严重的!以下我们给出推荐的禁用函数设置: 复制内容到剪贴板 代码:disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
需注意:如果您的服务器中含有一些系统状态检测的PHP程序,则不要禁用shell_exec,proc_open,proc_get_status等函数。 
(2) PHP脚本执行时间找到: 复制内容到剪贴板 代码:max_execution_time = 30 
该选项设定PHP程序的最大执行时间,如果一个PHP脚本被请求,且该PHP脚本在max_execution_time时间内没能执行完毕,则PHP不再继续执行,直接给客户端返回超时错误。没有特殊需要该选项可保持默认设置30秒,如果您的PHP脚本确实需要长执行时间则可以适当增大该时间设置。 
(3) PHP脚本处理内存占用找到: 复制内容到剪贴板 代码:memory_limit = 8M 
该选项指定PHP脚本处理所能占用的最大内存,默认为8MB,如果您的服务器内存为1GB以上,则该选项可以设置为12MB以获得更快的PHP脚本处理效率。 
(4) PHP全局函数声明找到: 复制内容到剪贴板 代码:register_globals = Off 
网络上很多关于PHP设置的文章都推荐将该选项设置为On,其实这是一种及其危险的设置方法,很可能引起严重的安全性问题。如果没有特殊的需要,强烈推荐保留默认设置! 
(5) PHP上传文件大小限制找到: 复制内容到剪贴板 代码:upload_max_filesize = 2M 
该选项设定PHP所能允许最大上传文件大小,默认为2MB。根据实际应用需求,可以适当增大该设置。 
(6) Session存储介质找到: 复制内容到剪贴板 代码:session.save_path 
如果你的PHP程序使用Session对话,则可以将Session存储位置设置为/dev/shm,/dev/shm是Linux系统独有的TMPFS文件系统,是以内存为主要存储方式的文件系统,比RAMDISK更优秀,因为可以使用DISKSWAP作为补充,而且是系统自带的功能模块,不需要另行配置。想想看,从磁盘IO操作到内存操作,速度会快多少?只是需要注意,存储在/dev/shm的数据,在服务器重启后会全部丢失。不过这对于Session来说是无足轻重的。 
http://blog.donews.com/zzw45/archive/2005/10/21/596603.aspx 
今天在已经编译好的apache2.0.48(mpm为默认的prefork)想改大MaxClient的大小超过256,在网上论坛上看说如下增加serverlimit一行就行了。 
<IfModule prefork.c> 
StartServers 10 
MinSpareServers 10 
MaxSpareServers 15 
ServerLimit 2000 
MaxClients 1000 
MaxRequestsPerChild 10000 
</IfModule> 
但如上所说加了一行,还是不行,提示MaxClient超过256,须添加ServerLimit参数才行。 
郁闷了很久,我就估计是ServerLimit一行没生效,又google一下,翻过千山万水,终于找到原因 
需要把ServerLimit放到最前面,如下就行了 
<IfModule prefork.c> 
ServerLimit 2000 
StartServers 10 
MinSpareServers 10 
MaxSpareServers 15 
MaxClients 1500 
MaxRequestsPerChild 10000 
</IfModule>

时间: 2024-10-13 11:32:52

apache,Apache优化的相关文章

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

Apache网页优化—网页压缩

Apache网页与安全优化 Apache网页优化 1.网页压缩2.网页缓存 Apache安全优化 1.配置防盗链2.隐藏版本信息 Apache网页优化概述 1.在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代 2.为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容 3.优化内容 配置网页压缩功能工作模式的选择与参数优化配置防盗链配置隐藏版本号 gzip介绍