Apache_性能调优

Apache 音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。相传阿帕奇是一 个武士,他英勇善战,且战无不胜,被印第安人奉为勇敢和胜利的代表,因此后人便用他的名字为印第安 部落命名,而阿帕奇族在印第安史上也以强悍著称。Apache 是世界使用排名第一的 Web 服务器。它可以 运行在几乎所有广泛使用的计算机平台上。
    在进行 web 性能容量规划的时候首先利用 Apahce 计算内存消耗:
    apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_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,系统会因为开始使用硬盘做 虚拟内存交换空间而导致系统效率急剧下降。 此外, 同样的服务: 内存的机器的 apache_max_process 2G 一般只设置到 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
    Apache 所在的机器与操作系统环境是对性能影响最大因素,很明显,一以 368 的 PC 与一台 P4 或双 处理器的机器不会有同样的性能。不过,如果不涉及硬件的改变,我们可以做的最大的事是首先看一下 Apache 是否运行在一台专用的服务器上,如果与其它应用共用一台服务器肯定会影响服务器的性能。
    在大多数情况下, 特别是对静态网站而言, 内存数量是一个影响性能的关键因素, 因为它决定了 Apache 可以缓存多少内容。它缓存的内容越多,在硬盘上读取内容的机会就越少,而存取硬盘上的特定文件是一 件很费时的操作。如果你的网站主要是一些静态内容,你最好使用 mod_cache 选项,如果你的内存足够 大,可以使用 mod_mem_cache 选项。
    第一个选项将信息缓存在磁盘上,当它与 mod_include 选项一起使用时会有很好的效果,这个选项在 建立一个页面时在缓存中保存它的最终版本。使用 mod_mem_cache 将缓存内容保存在一个可以被所有 Apache 进程共享的内存堆中。
    使用更快的磁盘或进一步使用 RAID 可以提高 Apache 对磁盘文件的访问速度。注意,如果你做了下 面的所有这些优化, 一个硬件的(而非软件)升级方案是更好的选择。 最后一个谈到的关于硬件的问题是 CPU 能力,这对动态内容网站的影响很大,动态内容越多要求越高。
    以下是影响 Apache 的性能配置参数:
    Timeout 300
    指定站点响应的时间秒数。若超过这段时间仍未收到或送出数据,就断开连接。意思是该参数指定 Apache 在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间 Apache 则放弃处理该请
    求,并释放连接。该参数默认值为 120,推荐设置为 60,对于访问量较大的网站可以设置为 30。
    KeepAlive On|Off
    启用此项,表示允许保持持久连接,让每次连接能提出多个请求。避免每请求一个文件就跟服务器建 立一次连接。也就是控制 Apache 是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型 站点来说,通常设置为 off 以关闭该支持。
    MaxKeepAliveRequests 100
    每次连接可提出请求的数量,设置为 0 表示数量不限,默认值为 100。.
    KeepAliveTimeout 15
    每次连接连续两个请求之间的时间如果超过 15 秒还未到达, 则视为连接中断。 这种做法可以最大限度 地利用有限的资源,这也是 Apache 性能如此优越的原因之一。
    MinSpareServers 5
    MaxSpareServers 20
    Apache 在运行时会根据负载的轻重自动调整空闲子进程的数目。
    提供浏览服务的 httpd 进程的数目需要随连接数目的多少而变化,因此需要随时保持几个闲置的 httpd 进程等候新的连接请求。若闲置的进程数少于 5 个(默认值),则表示闲置进程太少,需要将其增加到 5 个;
    若多于 20 个(默认值)则表示闲置进程太多,需将其减少到 20 个。
    MaxClients 150
    同时接入的数目太多时会降低系统访问性能,设置此参数可限制同时连接的最大数值,默认值为 150,
    它设定的就是 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
    优化建议:
    # 升级 Apache 到最新版本,新版本往往包含性能提升和安全更新。
    # 在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的反向查询。
    # 对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 230" 或者更高。这项设置让更多的 httpd 进 程同时响应请求,并避免了处理器排队的情况发生。
    # 采用另外一台服务器处理图片文件。
    # 确保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的文章可以参考本站:采用 mod_gzip 加速 Zope 和 Apache # 保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改 src/Configuration 文件,
    在那些不需要的模块之前用 # 号注释掉。
    # 如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/
    # 除非你确定使用 .htaccess 文件来控制一些目录的权限,否则设置 "AllowOverride None" ,这样 就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。
    # 不要让不需要的后台进程运行。
    # 千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。
    # 不要让 Apache (httpd) 运行于 inetd 模式。
    # 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。
    # 避免使用 SSI tag。
    # 在 CGI 脚本中:
    * 文件 I/O:打开的文件数目越少越好。
    * Shell 命令:采用全路径来调用 shell 命令。
    * 如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。
    * 在你的 Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。
    # 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。
    # 对你的网站做压力测试,建议采用 Apache 自带的 ab 命令来测试。
    # 为了最好的性能,最好把网线拔掉,这样你的 Web 服务器就十分安全,而且负载马上降为 0

时间: 2024-10-13 15:33:55

Apache_性能调优的相关文章

iOS应用性能调优的25个建议和技巧

目录 我要给出的建议将分为三个不同的等级: 入门级. 中级和进阶级: 入门级(这是些你一定会经常用在你app开发中的建议) 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片大小 7. 选择正确的Collection 8. 打开gzip压缩 中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, C

Android性能调优篇之Hierarchy Viewer工具的使用

详细内容请查看我的简书地址:Android性能调优篇之Hierarchy Viewer工具的使用 或者我的个人博客地址:Android性能调优篇之Hierarchy Viewer工具的使用

性能调优攻略

关于性能优化这是一个比较大的话题,在<由12306.cn谈谈网站性能技术>中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法.本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充. 在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的<代码优化概要>,这篇文章基本上告诉你--要进行优化,先得找到性能瓶颈! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后

性能调优之:缓存

在执行任何查询时,SQL Server都会将数据读取到内存,数据使用之后,不会立即释放,而是会缓存在内存Buffer中,当再次执行相同的查询时,如果所需数据全部缓存在内存中,那么SQL Server不会产生Disk IO操作,立即返回查询结果,这是SQL Server的性能优化机制. 一,主要的内存消费者(Memory Consumer) 1,数据缓存(Data Cache) Data Cache是存储数据页(Data Page)的缓冲区,当SQL Server需要读取数据文件(File)中的数

SQL 语句性能调优

经常听到有做应用的朋友抱怨数据库的性能问题,比如非常低的并发,令人崩溃的响应时间,长时间的锁等待,锁升级 , 甚至是死锁,等等.在解决这些问题的过程中,DBA 经常发现应用开发人员对数据库的"误用".包括 , 返回过多不必要的数据 , 不必要和不适当加锁,对隔离级别的误用和对存储过程的误用等等.但是,面对浩如烟海的数据库知识 , 要求完全掌握 , 对应用开发人员来说也确实枯燥艰深 . 因此,笔者特别提炼对应用开发人员有帮助的 SQL 书写部分,以期望能对数据库开发人员有所帮助. &qu

JVM性能调优

一.JVM性能调优策略 二.性能调优 1.Java线程池(java.util.concurrent.ThreadPoolExecutor) 大多数JVM6上的应用采用的线程池都是JDK自带的线程池,之所以把成熟的Java线程池进行罗嗦说明,是因为该线程池的行为与我们想象的有点出入.Java线程池有几个重要的配置参数: corePoolSize:核心线程数(最新线程数) maximumPoolSize:最大线程数,超过这个数量的任务会被拒绝,用户可以通过RejectedExecutionHandl

性能调优

性能调优 1.设计调优 宏观层面质的优化 2.代码调优 熟悉相关API,并在合适的场景中正确使用相关API或类库,同时,对算法.数据结构的灵活运用也是代码优化的重要内容 3.JVM调优 代码和JVM属于系统微观层面量的优化 4.数据库调优 使用preparestatement代替statement提高查询效率 Select,使用要查询的具体的列名,避免使用*号, 合理地使用冗余字段 Oracle的分区表 根据不同的数据,以Oracle为例,设置合理大小的共享池.缓存缓冲区或者PGA 5.操作系统

Java性能调优笔记

Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多.外部处理系统的性能不足.资源消耗不多但程序的响应速度却仍达不到要求. 资源消耗:CPU.文件IO.网络IO.内存. 外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够. 资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高.未充分使用资源.程序结构不合理. C

Spark&amp;Spark性能调优实战

Spark特别适用于多次操作特定的数据,分mem-only和mem & disk.其中mem-only:效率高,但占用大量的内存,成本很高;mem & disk:内存用完后,会自动向磁盘迁移,解决了内存不足的问题,却带来了数据的置换的消费.Spark常见的调优工具有nman.Jmeter和Jprofile,以下是Spark调优的一个实例分析: 1.场景:精确客户群 对一个容量为300g的客户信息表在spark上进行查询优化,该大宽表有1800多列,有效使用的有20列. 2.优化达到的效果: