优化Apache 2.0 性能

Simon Jandreski (February 2003)

深受欢迎的Apache Web服务器最新版本Apache 2.0已经上市,它具有使服务器能够更经济高效、可靠和可扩展运行的特性。本文介绍新特性,研究配置Apache 2.0的最佳方案,重点关注优化在使用Intel; Xeon; 处理器的DellTM PowerEdgeTM  服务器上运行的Apache 2.0的方法。

从作为国家超级计算机应用中心(NCSA)Web服务器的一系列补丁低调进入市场(因此也被称为:"补丁服务器"),Apache HTTP服务器目前已经成为了最流行的Web服务器。超过63%的互联网网站使用一些Apache版本来为网站访问者提供内容服务1 。Apache HTTP服务器由Apache Software Foundation负责开发,这种开源的交叉平台HTTP服务器是标准、安全和稳定的服务器。由于越来越多的公司接受另外一个开源对象 Linux®  操作系统 (OS),Apache Web服务器显示出它有机会迅速增长,因为Apache通常与Linux捆绑。这两种产品都得到了开放源社区的鼎力支持。Apache 2.0新版本增强了核心功能和模块。本文介绍最关键的更改,帮助管理员选择正确的配置和编译选项来优化性能。

介绍Apache的增强功能

Apache 2.0引入了Apache Portable Runtime (APR)组件,添加了新的多重处理模块(MPM)并改进了现有模块。此外,Apache 2.0增强了核心功能,如新的Apache应用编程接口(API)、IP版本6 (IPv6) 支持、新的构建系统以及简单的配置。从而成为具有一套丰富特性的Web服务器, 并且变得便携、可靠和高效。


Apache Portable Runtime
APR是使几乎所有平台都能够支持Apache功能的关键组件。一旦程序人员编写完程序代码,可以使用ANSI C编译器来编译并在任何平台上运行。而且,APR可以随时使用本机的OS调用。因此,当Apache在 Microsoft® Windows®  OS上运行,它就像本机的Windows程序,而在 UNIX®  OS上,它就像UNIX程序。由于使用本机调用不涉及仿真或OS子系统转换,程序代码可以更快地运行,从而提高性能,增强可移动性。

多重处理模块 在Apache处理多个请求时MPM控制如何运行,并负责打开接口(Socket),然后把这些请求映射到线程和流程。Apache 2.0中的APR和MPM使HTTP服务器能够在非UNIX平台上更迅速、更可靠的运行,同时使UNIX用户能够选择适用于操作系统和满足需求的preforked或线程MPM。 Apache 2.0中的新MPM不使用在非UNIX操作系统中构建的 POSIX®  (便携式操作系统接口) 子系统。


模块更改
Apache服务器在提供灵活的方式以向核心系统添加新特性方面拥有很高的声誉。Apache 2.0秉承了这一传统,现在几乎整个都是基于模块。核心系统提供基本的功能,但几乎服务器的所有其它组件实际上都是可承载的模块。已经完全重写了多个Apache模块并添加了一些新模块。通过模块的使用,Apache核心增强了大量特性。

了解流程、线程和混合服务器

在了解如何优化Apache 2.0之前,管理员必须了解MPM及他们与流程和线程的关系。Apache 1.3是一种基于流程的服务器: 它启动一个父流程,该父流程创建(fork)与自身一样的副本,称为子流程(见图1 )。 每个子流程可以服务一个请求,与其它子流程无关。这种方法提供可扩展性:如果子流程之一未正确运行(misbehave),可以立即终止且不影响服务器的其它子流程。但是,这种增加的可扩展性会导致性能下降:每个子流程要占用额外的内存,并且OS要花费额外的时间来进行上下文切换-也就是为每个子流程分配处理器时间。此外,流程也是相互隔离,使得流程通信和数据共享变得繁琐。



图1.流程、线程和混合服务器模式

线程服务器与基于流程的服务器类似,只有一种区别:线程可以与其它线程共享内存和数据(见图1 )。由于线程是同一流程的一部分,无需进行上下文切换,从而可以提高性能。但是, 未正确运行的线程会覆盖和破坏属于其它线程的数据和程序代码,导致整台服务器不能正常运行。

Apache 2.0是一种混合服务器,这样做的原因是基于线程和流程的服务器都有自己的优势和不足。当配置为混合服务器时,Apache 2.0可以创建不同的流程,每个流程都包含多个线程(见图1 )。

配置过程中选择MPM

Apache 2.0配置流程中最重要的决策是决定运行哪种MPM。当从源代码进行编译时,管理员必须在配置过程中选择MPM并把它编译到服务器中(对于二进制文件来说,如 RPMTM  [Red Hat®  Program Manager] 文件,软件分销商将预先选定并编译了MPM)。由于UNIX上的某些MPM使用线程,而某些MPM不使用线程,如果管理员在配置期间选择了MPM并把它编译到Apache中,Apache将能更好地运行。管理员通过在运行configure脚本程序时包括自变量-with-mpm=NAME 来规定把MPM编译到服务器中,其中NAME是希望的MPM的名称。在编译服务器之后,管理员可以通过发布指令httpd -l来列出所有编译的模块,包括MPM。对于UNIX平台来说,与Apache 2.0一同提供的三个主要MPM为prefork、worker和perchild。


prefork MPM
管理员应选择prefork MPM来实施基于流程的Web服务器。虽然基于流程的服务器有一些速度较慢的性能,它们通过模块来提供稳定性和兼容性,这些模块不支持线程。为了改进性能,服务器的父流程fork多个子流程并使它们能够用于应答请求。当接收到请求时,服务器把其分配给子流程。如果没有子流程可用,服务器创建新的子流程并把它添加到库中。但是,子流程的创建会导致延迟。当配置这一MPM时,管理员可以限制启动时可以创建的子流程数、最大的子流程数等。这一MPM有利于形成一个稳定的Apache服务器,但同时会影响性能和占用内存,因为单个流程的大小会占很大一部分。

The worker MPM 为了实施混合服务器,管理员可以选择worker MPM,它提供比prefork MPM更卓越的可靠性、故障恢复能力和可扩展性。启动时父流程创建规定数量的子流程,反过来每个子流程包含多个线程。每个子流程中只有一个线程聆听网络,它简化了程序代码,减少了流程之间的协作,从而提高性能。虽然这一MPM稳定且性能优于prefork,由于它是基于线程,与其一同使用的所有模块都必须是完全的线程-安全。大多数Apache 1.3模块不是线程安全,并且由于worker MPM不向后兼容,因此,使用这一MPM的管理员也不能一同使用Apache 1.3模块和Apache 2.0。但是使用prefork MPM来编译服务器允许管理员使用Apache 1.3模块。


The perchild MPM
如果遇到这样一种情况,考虑到安全性和性能,需要Apache流程基于不同的用户ID来运行,管理员可以使用perchild MPM 来编译混合服务器。互联网服务供应商(ISP)通常使用这一MPM来实现虚拟托管。当perchild启动时,它创建规定数量的流程,每个流程有规定数量的线程和专用的用户ID。如果服务器上的负载增加,它使用现有流程之一来创建新线程,而不是创建新流程。这种MPM是最可扩展,但也最不可靠。

调整Apache 2.0和服务器硬件以实现卓越性能

Apache管理员必须同时考虑Web服务器的性能和可扩展性。由于服务器访问者增加,并且如果未事先采取适当的措施来支持更多的工作负载,随着服务器上负载的增加,服务器的性能会下降。

虽然大多数Linux分销包括Apache的二进制安装程序,考虑到性能和安全性,Apache应使用Configure脚本程序从源代码进行编译。在这种方式下,管理员可以只包括需要的选项并度身定制Apache来满足他们特殊的环境,因为不需要的特性会降低性能。MPM应被编译到服务器中以获得最佳性能。如果可能的话,线程应用于提高性能。

为了进一步缩短Apache的应答时间,管理员可以增加限制流程和线程数量的OS设置。在Linux 2.2.x内核中,这一流程需要增加NR_TASKS的值, 它规定OS同时支持的流程的最大数,并重新编译内核。在2.4.x内核中,应增加/proc/sys/kernel/threads-max的值,它定义线程的最大数。建议使用2.4.x内核,因为这一内核系列支持发送文件系统呼叫;这些呼叫取消了单独的读取和发送机制,从而提高性能。


硬件考虑因素
基本硬件严重影响Web服务器的性能。Web服务器将不需要切换,因为切换会增加每次请求的等待时间。当在 DellTM PowerEdgeTM  服务器上运行Apache时,管理员应确保服务器有足够的RAM。他们还应获得快速的CPU、磁盘和网卡。


设置指示(directive)
当配置Apache时,管理员应设置MaxClients 指示为一合理的高数值,它规定服务器流程(同时连接客户机)的最大值;在服务器开始切换时这一操作阻止服务器创建如此多的子流程。HostnameLookups指示应设为关闭,因为域名服务器(DNS)查找每次请求的延长等待时间。如果在服务器日志文件中需要DNS信息来生成报告,管理员可以使用日志分析(logresolve) 指令来后处理(postprocess)日志文件。最理想的状况是后处理在别处执行,而不是在生产Web机器。

如果使用mod_include和server-side includes (SSI),管理员应对Apache进行配置,从而它不分析所有的HTML文件,这需要额外的处理时间。实际上,服务器应只分析具有特定文件扩展名的文件(SSI将被替换的文件,使用最常用的文件扩展名以外的扩展名),如.shtml。

管理员可以在所有目录上设置AllowOverride None,从而Apache不检测基于目录的配置文件,这些文件通常命名为.htaccess。提高性能的另一种方式是禁用mod_status模块,确保ExtendedStatus设为关闭。这些设置收集服务器、连接和请求的统计数据,它会降低Apache的性能。

应避免用于根据浏览器功能和语言喜好自动向客户机提供内容的内容协商,以实现高性能。但是,如果需要内容协商,管理员应使用type-map文件,它提供比使用MultiViews选项更卓越的性能。

为了阻止频繁存取的文件的磁盘存取,管理员可以使用mod_file_cache模块把这些文件映射到存储器。要映射的文件列表规定作为全局MmapFile指示的自变量。另一个指求CacheFile读取一些文件并把文件缓冲到文件描述符中,从而可以缩短时间,节约资源。


负载测试
在为Apache服务器配置编译优化和运行优化之后,管理员应对Web网站进行负载测试。Apache应用版本中包括称为ApacheBench (ab)的负载测试工具。例如,下面指令将使用50台同时使用的客户机,在任何指定时间段内请求http://www.companyxyz.com主页5,000次:

/usr/local/apache2/bin/ab -n 5000 -c 50 http://www.companyxyz.com/

完成测试需要一些时间,但结果容易理解并可用于微调性能。管理员还可以使用高负载测试(Flood load-testing)实用程序,它由Apache Software Foundation提供。


负载平衡
提高Web网站性能的另一种方式是使用硬件负载平衡器,如Dell PowerEdge Load Balancing Server-BIG-IP®  Powered, 在多台服务器之间分摊负载。这种设备在多台服务器中分摊网络和HTTP业务,使Web网站看起来就像是由一台服务器提供服务。

管理员还可以使用软件负载平衡器,如Apache服务器自己。另一种选项是提供一台或多台单独的版本服务器,为大型版本文件和其它静态内容提供服务。基于内核的HTTP加速器,如TUX,可以配置有Apache来进一步加速为静态页面提供服务。


代理支持
转发代理,或代理接收一台或多台内部客户机的Web网站请求,联系远程Web服务器并返回应答。逆向代理可以用于对Web网站进行负载平衡。逆向代理部署在其它服务器的前面,为后台Web服务器提供统一的前台。例如,如果客户机请求http://www.companyxyz.com,请求发送到逆向代理服务器来应答这一URL。逆向代理服务器然后联系一台后台服务器来服务客户机的请求。客户机只与逆向代理服务器通信。Apache的代理支持已经完全重写,以遵循最新的HTTP标准。为了实现代理支持,管理员在编译期间把-with-proxy自变量传送到配置脚本程序。proxy_module应在Apache配置文件中列出:

LoadModule proxy_module modules/mod_proxy.so

两个指示可以与这一模块一同使用:ProxyPass和ProxyPassReverse。如图2 中所示, Dell PowerEdge2650服务器可以配置作为逆向代理,并把所有动态内容和安全套接层(SSL)业务重新传送到Dell PowerEdge 6650后台服务器,同时允许PowerEdge 2650为所有静态页面和版本提供服务。此外,管理员可以在Apache中激活缓冲支持,从而可以把一些内容缓冲到PowerEdge 2650。为了实现这一目标,Apache应使用具有-enable-cache、 -enable-disk-cache和-enable-mem-cache自变量的Configure脚本程序,然后装载和配置适当的模块来构建。提供内容的最快方式是使用缓冲而不是重复提供静态页面。



图2.配置作为逆向代理的Dell PowerEdge 2650服务器

未来性能增强

Apache 2.0 Web服务器是功能强大和广泛流行的HTTP服务器,有大量的配置选项和丰富的应用。通过优化Apache 2.0构建和配置设置,管理员可以更有效地使用Apache在其上运行的硬件。试验各种配置选项,使用为Apache提供的大量文档有助于进一步提高性能。

Simon Jandreski (simon_jandreski@dell.com) 是Dell在拉丁美洲企业专家中心的网络工程师兼顾问。他的兴趣包括UNIX和Linux安装和管理,以及性能调整。此外,还包括Apache的排障、优化和管理。Simon获得了计算机科学学位,并获得了RHCE、SCSA、SCNA、MCSE、MCSE+I、MCSA、CCNA和A+证书。

更多信息

Apache HTTP服务器项目: http://httpd.apache.org

ApacheBench (ab): http://httpd.apache.org/docs/programs/ab.html

Dell PowerEdge服务器: http://www.dell.com/servers

1 来源: August 2002 Netcraft survey,http://www.netcraft.com/survey

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、Nginx 简介1. 什么是Nginx2. 反向代理3. 负载均衡4. 动静分离二、Nginx基本使用1. Nginx常用的操作命令2. Nginx的配置文件提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、Nginx 简介1. 什么是Nginx2. 反向代理3. 负载均衡4. 动静分离二、Nginx基本使用1. Nginx常用的操作命令2. Nginx的配置文件一、Nginx 简介1. 什么是Nginx  Nginx(“engine x”)是一个_nginx代理
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的过程中需,有时候需要对容器中的文件进行修改管理,如果不做文件映射的化,我们使用docker exec -it 容器ID/容器名 /bin/bash 才能进入nginx中的文件里面如图。架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将原本要直接发送到web服务器上的http请求发送到代理服务器中。A想要组C的房子,但是A并不认识C所以租不到,但是B认识C,A找B帮忙租到了C的房子。客户端代理服务器服务器。_docker nginx 配置
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时,通常情况下应该显示一个友好的错误页面,而不是仅仅显示一个简单的错误提示。在Nginx中,可以通过配置来实现404错误自动跳转到首页的功能。如果您的网站使用动态内容生成页面(如PHP或其他服务器端语言),则应相应地修改配置以适应您的网站架构。这样,当用户访问一个不存在的页面时,Nginx会自动将其重定向到首页。为了使配置生效,需要重新加载Nginx配置。首先,需要打开Nginx的配置文件。现在,当用户访问一个不存在的页面时,Nginx会自动将其重定向到首页。_nginx 404 重定向
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+mysql+wordpress 实战_docker wordpress mariadb
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以在任务管理器中查看到nginx的进程。重新启动下 直接访问8090端口 ok 访问成功。1 :查看80端口占用情况,pid的值为3960。3:在运行中输入regedit打开注册表编辑器。2: 通过以下命令查看3960所对应的服务名称。4:找到Start,右键修改将其制改为4。_nginx80端口无法访问
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx 被设计为能够处理大量并发连接而不显著增加系统负担。它采用异步事件驱动的架构,可以有效地处理高流量的 Web 请求。负载均衡:Nginx 支持负载均衡,可以将请求分发到多个后端服务器,以提高网站性能和可用性。反向代理:Nginx 可以充当反向代理,将客户端请求转发到后端服务器,隐藏后端服务器的真实 IP 地址,增加安全性和可扩展性。静态文件服务:Nginx 可以高效地提供静态文件(如 HTML、CSS、JavaScript、图像等)的服务,减轻应用服务器的负担。
文章浏览阅读976次。nginx作为常用的web代理服务器,某些场景下对于性能要求还是蛮高的,所以本片文章会基于操作系统调度以及网络通信两个角度来讨论一下Nginx性能的优化思路。我们的大学教程大部分讲述七层模型,实际上现代网络协议使用的都是四层模型,如下图,应用层报文经过四层的首部封装到对端。对端链路层拆开首部查看mac地址是自己在网上,拆开ip首部查看目的地址是不是自己,然后到达传输层应用层完成报文接收。文章是基于原有个人知识基础上,对旧知识进行巩固,以及新知识实践学习。
文章浏览阅读5.4k次,点赞9次,收藏15次。最后再说一种情况,就是后端处理了跨域,就不需要自己在处理了(这里吐槽下,某些后端工程师自己改服务端代码解决跨域,但是又不理解其中原理,网上随便找段代码黏贴,导致响应信息可能处理不完全,如method没添加全,headers没加到点上,自己用的那个可能复制过来的并不包含实际项目所用到的,没有添加options请求返回状态码等,导致Nginx再用通用的配置就会可能报以下异常)里面的就好了,因为这里如果是预检请求直接就ruturn了,请求不会再转发到59200服务,如果也删除了,就会报和情况1一样的错误。_nginx 允许跨域
文章浏览阅读2.5k次。项目配置了多个域名,如下,php 代码中有获取的值。当访问a.demo.com时,其获取的值是符合预期的。但是当访问b.demo.com时,其获取的值还是a.demo.com,导致代码中的判断出现错误。_nginxservername多个域名
文章浏览阅读1k次,点赞2次,收藏5次。采用YAML manifest的方式来安装ingress-nginx,用registry.lank8s.cn镜像库来替换 registry.k8s.io的库。_ingress-nginx安装
文章浏览阅读1.6k次,点赞2次,收藏2次。在windows平台编译nginx_windows 编译nginx
文章浏览阅读5.8k次,点赞2次,收藏18次。nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器。nginx 的特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在高连接并发的情况下,nginx是Apache服务器不错的替代品,能够支持高达50000个并发连接数的响应。使用epoll and kqueue作为开发模型。_nginx
文章浏览阅读2k次。Linux启动(systemctl start nginx)nginx服务时出现:Failed to start nginx.service: Unit not found._为什么nginx的systemctl start nginx.service不能使用
文章浏览阅读1.3k次。重启之后,打开浏览器,输入http://localhost:8900/myBaidu,这时候就会自动的跳转到百度的页面。按照我们不同的需求修改nginx文件夹中的nginx-1.16.1conf里面的nginx.conf文件。启动nginx:打开nginx的文件夹,然后双击nginx.exe文件,启动nginx。打开之后假设我们需要跳转到百度则在配置文件nginx.conf中的下面加上。1、打开任务管理器关闭nginx的进程。端口在配置文件的(下图)进行查看nginx端口。_nginx 代理百度
文章浏览阅读5.7k次,点赞5次,收藏3次。nginx重定向问题解决(rewrite or internal redirection cycle)_rewrite or internal redirection cycle while internally redirecting to "/inde
文章浏览阅读1.3k次。请注意,上述命令假设 Nginx 已经在系统的 PATH 环境变量中配置。如果没有,请提供正确的 Nginx 安装路径,或者在命令中使用完整的路径来替换。将该命令与所有 Nginx 进程的 PID 一起使用,以终止所有正在运行的 Nginx 进程。此命令将启动一个新的 Nginx 进程来重新加载配置文件并重新启动服务器。使用以下命令来终止所有 Nginx 进程(使用上面的 PID 替换。的进程以及它们的 PID。打开命令提示符(CMD)。此命令将列出所有名为。选项来强制终止进程。_windows 怎么关闭nginx
文章浏览阅读2.7k次,点赞2次,收藏7次。包括 Netflix、GitHub 和 WordPress。Nginx 可以用作 Web 服务器、负载均衡器、反向代理和 HTTP 缓存等。_ubuntu安装nginx
文章浏览阅读915次。轻松搭建短域名短链接服务系统,可选权限认证,并自动生成证书认证把nginx的http访问转换为https加密访问,完整步骤和代码。_nginx 短链代理
文章浏览阅读1.1k次,点赞35次,收藏24次。流媒体方案之Nginx——实现物联网视频监控项目Nginx是什么Nginx在流媒体方案中的位置软硬件准备移植编译Nginx运行Ngnix测试流媒体方案浏览器播放_nginx-rtmp-module
文章浏览阅读1.9k次。nginx 配置 wss 协议转发 ws 服务器_nginx 配置wss