如何对Apache Web服务器进行性能优化

40、管理 Web 服务器:Apache 与 Nginx 全解析 本文深入解析了Web服务器的关键特性,重点介绍了Apache和Nginx的功能与配置方法。内容涵盖Apache的安装、控制命令、日志管理、用户网页托管、虚拟主机配置、访问限制以及性能优化建议,并对常见故障排除和未来发展进行了总结。通过本文,读者可以全面掌握Apache服务器的管理和维护技巧,同时了解Nginx在反向代理和负载均衡方面的优势。 阅读详情

提供:ZStack云计算

系列教程

本教程为Django规模扩展系列三篇中的第二篇。

内容介绍

Apache是一套极为强大的Web服务器。为了简化初始设置,其提供多种预安装模块。如果大家希望快速实现项目上线并投入生产,其无疑是最为出色的备选方案。不过,随着站点规模的扩大,大家往往会面临更多性能问题。

DigitalOcean的最低配置Droplet,其内存容量为512 MB。如果大家实际选择的配置更低,或者希望能够在大型Droplet上充分发挥性能,则请遵循以下几个步骤。本示例使用Ubuntu 12.04版本,但核心思路亦适用于其它Linux发行版。

卸载不需要的模块

在Ubuntu与Debian系统当中,大家能够找到/etc/apache2/mods-enabled与/etc/apache2/mods-available/两个文件夹。其中mods-available文件夹列出了全部已经安装在特定服务器上的模块,而mods-enabled则为当前正处于活动状态的模块。

在我的VPS中,我的默认活动模块数量为17个,这显然超出了应用运行的实际需要。遗憾的是,我们很难弄清到底哪些属于必要模块,因为不同模块间可能存在依赖性。

这里我建议大家整理出一份全部当前活动模块的清单,以备日后恢复使用。接下来逐一禁用各模块并重启Apache以观察效果。

在Ubuntu与Debian当中,大家可以使用以下命令禁用模块:

sudo a2dismod autoindex

其中部分模块会占用大量资源,因此需要优先禁用:

  • PHP
  • SSL
  • Rewrite
  • Perl
  • Python
  • Rack / Ruby / Passenger

其中部分模块在默认情况下并未启动,因此我们可以在需要时再行启用。

先来看看“rewrite”,一般来讲此模块会与“alias”模块的作用基本一致。因此如果启用了alias,请记得禁用rewrite。Rewrite是资源需求最高的模块之一,但作用亦非常重要。

由“rewrite”转向“alias”其实比较复杂(具体参阅帮助文档)。不过即使大家无法彻底关闭rewrite,也可以将其中部分规则转换为alias。

在禁用一项模块并重载Apache配置后,大家可以检查apache error日志获取信息。在Ubuntu与Debian中,检查/var/log/apache2/error.log文件。

示例中的错误信息如下:

Syntax error on line 6 of /etc/apache2/sites-enabled/site1:
Invalid command 'DAVLockDB', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.

这意味着我刚刚禁用的模块必须处于活动状态。这里我们要重启该模块——dav_fs:

sudo a2enmod dav_fs

重启Apache继续进行错误验证。检验模块的过程可能比较耗时,请大家保持耐心。

将代码迁移至Apache之外

如果大家运行有PHP站点,那么各位很可能在使用著名的mod_php。而如果运行ruby站点,则最轻松的方案则为Passenger Phusion,即mod_rails或者mod_rack。

不过问题在于,作为解释器的C代码被嵌入至Apache当中,因此会在每个页面视图中占用内存。假设站点上的一个高人气页面带来30次HTTP请求,那么按比例来看其中一次请求动态页面、其它则请求静态资源。在这种情况下,我们显然没必要建立一套臃肿的Apache来服务那29次根本不涉及任何动态内容的请求。

由此带来的差异非常明显。使用mod_php会让每个Apache子进程带来超过100 MB的内存使用量!考虑到Apache服务器通常都运行着25个甚至更多进程,这一问题当然需要重视。

下面来看能够解决问题的相关工具:

这种变更的缺点在于,我们很难以初始化方式完成调整。另外,php-fpm的说明文档也不够完善。

一般来讲,PHP、Python以及Ruby在启动时会生成一个特殊的服务器进程,而后是Apache,这意味着后者本身并不了解如何通过嵌入代码处理这些请求,而仅仅是将此类动态内容调用转发至后端进程。

不过调整的效果确实令人满意。在移除了mod_php后,我的Apache进程总体积由每个90到120 MB削减到了10 MB。这意味着我能够提供更多动态内容,且2个php后端进程的内存占用量仅各为60 MB。

限定Apac进程与子进程数量

大部分操作系统的默认Apache配置都不太适合小型服务器——其中往往包含25个甚至更多子进程。如果每个子进程使用120 MB内存,那么单单分配给Apache的内存总量就高达3 GB。

一名访问者的浏览器往往会一次性从网站处请求4个条目,因此7到8名用户同时访问即会令云服务器发生过载。

服务器通常会保留大量不必要的Apache进程,提供用户已经不再需要的内容,这自然严重影响到服务器用户的可用进程量以及系统内存剩余。

要解决这一难题,我们需要了解应用的实际内存需求量,而后明确还有多少内存余量,并尽可能多地将其分配给Apache。

例如,如果大家拥有3个负责处理动态内容的php-fpm进程,每个占用70 MB内存,而MySQL服务器则占用120 MB内存,那么该应用的内存需求总量则为330 MB。这意味着我们可以将150 MB内存分配给Apache。

Apache运行在服务器上时,能够提供top命令工具供我们使用。下面粘贴的是其中部分相关内容:

top -bn 1
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                    
[...]
15015 www-data  20   0  232m 9644 1900 S  0.0  1.6   0:00.02 apache2                    
15016 www-data  20   0  232m 9644 1900 S  0.0  1.6   0:00.01 apache2                    
15017 www-data  20   0  232m 9644 1900 S  0.0  1.6   0:00.02 apache2                    

请注意Apache子进程中的RES列及其值。例如,在我的已优化虚拟服务器上,该值为9644,这意味着其内存占用量不足10 MB。如果我将Apache的子进程数量限定为15,则其最大内存占用量不会超过150 MB。

编辑/etc/apache2/apache2.conf配置文件,找到mpm_prefork_module配置部分。找到MaxClients一行并将其设定为15,而后保存并重启Apache。

以下为Ubuntu中返回的结果:

<IfModule mpm_prefork_module>
StartServers          3
MinSpareServers       3
MaxSpareServers       5
MaxClients           30
MaxRequestsPerChild   0
</IfModule>

See the MaxClients line there? We need to change that value to a lower number.看到MaxClients一行了吧?我们需要将其值变更为更小的数字。

如果VPS过载,且最大客户数量达到上限,则更多请求将无法得到响应。这时,用户需要重载页面再次尝试。

这种方式虽然听起来不好,但请相信我,这种控制下的运行状态机制要远比永远敞开大门好得多。

在本示例中,我使用的Droplet拥有1 GB内存,4个php-fpm进程且能够同时响应950名并发用户。这意味着每天页面视图容量为4200万个,应该足够正常网站使用了。

考虑其它配置MPM

大多数Apache配置都会使用prefork mpm,其具备线程安全特性且适用于PHP及其它嵌入语言。

如果大家不想使用PHP或者Rails等外部模块,则可以考虑工作程序MPM,其速度表现要优于prefork。

要启用该模块,我们首先进行安装:

sudo apt-get install apache2-mpm-worker

显示信息如下:

The following packages will be REMOVED:
  apache2-mpm-prefork libapache2-mod-php5
The following NEW packages will be installed:
  apache2-mpm-worker
0 upgraded, 1 newly installed, 2 to remove and 2 not upgraded.
Need to get 2,284 B of archives.
After this operation, 8,718 kB disk space will be freed.
Do you want to continue [Y/n]? 

请注意,在Ubuntu上如果我们安装了mpm,其会同时卸载prefork mpm,且卸载mod_php以及其它不兼容的附加模块。

这里我们已经探讨了四种优化方案,相信大家能够借此利用小型Droplet承载起具有一定规模的网站体系。

我强烈建议大家在测试Droplet上进行上述步骤——而非生产服务器。DigitalOcean服务的最大优势就是,我们可以随时建立新的Droplet并进行变更测试,并在完成后将其关闭。这显然是一种风险低、成本少的理想VPS配置探索途径。

本文来源自DigitalOcean Community。英文原文:How To Optimize Apache Web Server Performance By Matthew Nuzum

翻译:diradw

40、深入了解Apache和Nginx:Web服务器的安装与配置 本文深入探讨了Apache和Nginx这两种主流Web服务器的特性、安装步骤、配置方法以及管理技巧。涵盖了限制并发连接、带宽控制、Web缓存、负载均衡、CGI支持、虚拟主机、基于用户的网页托管等关键功能,并详细说明了在Ubuntu和Red Hat系列Linux系统上的安装和配置过程。此外,还介绍了Apache的高级特性配置、日志管理、访问权限控制、性能优化等内容,并通过流程图总结了配置Apache服务器的整体步骤。文章旨在帮助用户全面了解并掌握Web服务器的部署与管理,以实现高效稳定的Web服务运行。 阅读详情

相关推荐

深入探索Web服务器性能优化与基准测试

本文深入探讨了如何对Web服务器进行性能优化和基准测试。内容涵盖多个方面,包括Apache、Nginx和lighttpd等服务器的配置、缓存技术如APC和Memcached的应用,以及前端优化技术,如JavaScript压缩和YSlow规则。同时,介绍了基准测试工具如Apache Benchmark、Siege和Xdebug的使用方法,旨在帮助读者理解和掌握Web服务器性能提升的策略。

weixin_28681379的博客 632

配置svn时遇到错误 Invalid command 'DAV', (解决)

LoadModule dav_module modules/mod_dav.so这一行的注释去掉,原因如下:You arent loading mod_dav. mod_dav_svn just implements the back-end, you still need to have mod_dav, which implements the dav protocol. Rya

锐的博客 9721

深入理解Apache Tomcat Web服务器

Web应用程序通常包含一系列的组件,主要包括:HTML/CSS/JavaScript文件:这些文件构成了应用程序的前端界面。Servlets 和 JSPs:这些是服务器端的Java组件,用于处理业务逻辑和生成动态内容。JavaBeans:用于封装数据或逻辑的小型Java类。资源文件:图片、音乐、配置文件等静态资源。WEB-INF目录:这个目录包含了一些必须的文件,例如web.xml部署描述文件,它用于配置Servlets、JSPs以及初始化参数等。

weixin_28681379的博客 486

apache2优化配置总结

apache2优化配置总结

atvance016的专栏 1487

LTE/NR中的相应cause场景【原创】

目录1.背景2.LTE EMM cause2.0 写在最前2.1 特殊处理的cause第一梯队第二梯队2.2 非特殊处理的cause3.NR cause 实网分析终端被拒等问题,经常遇到各类cause,其会对应不同的终端限制行为。查找已有资料后理解没有很深,自行总结本文用于梳理现象,如有错误敬请指正,转载请注明出处。 本文用于记录协议Ts 24.301及Ts 24.501中的cause及其对应行为。 已总结的cause值: 24.301中的cause分

2301_79567300的博客 3500

UR10e+D435+ag95夹爪 gazebo 仿真记录(一)

学习仿真环境gazebo下利用UR10e机械臂搭建模拟平台,此博客用于记录搭建过程!!主要参考光头明明、总有一天全城的人都要高看我们和bug404_三位博主。最终自己功能包的主要参考了bug404_的ur_platform,感觉这个结构比较合理。运行环境:Ubuntu18.04+Ros-melodic+Gazebo9。

Forbiven的博客 6330

ApacheApache性能调优

Apache 2.x是一个通用的Web服务器,旨在提供灵活性,可移植性和性能之间的平衡。虽然它没有专门设计用于设置基准记录,但Apache 2.x在许多实际情况下都具有高性能。与Apache 1.3相比,版本2.x包含许多额外的优化,以提高吞吐量和可伸缩性。默认情况下,大多数这些改进都已启用。但是,存在可能显着影响性能的编译时和运行时配置选择。本文档介绍了服务器管理员可以配置的选项,以调整Apache 2.x安装的性能。

unber的博客 1343

从原理到实践:手把手教你如何校准和使用六维力传感器(附常见问题排查)

本文详细解析六维力传感器的工作原理与校准方法,提供从选型到故障排查的完整指南。重点介绍电阻式与电容式技术对比、六步校准法实战以及温度补偿技巧,帮助工程师精准测量空间力场。适用于机器人触觉反馈、航空航天测试等高精度场景。

weixin_29309475的博客 388

Web性能优化之Apache篇

一直以来, 实现强制https的方法是使用Apache的rewrite模块来进行重定向, 这样存在几个问题, 第一是性能问题, 第二是可能遇到不支持https的客户端…..等等, 便有此文

hldh214的博客 1272

Netapp FAS2750更换磁盘后不同步问题处理

netapp fas2750磁盘更换后不同步问题处理

jetliu05的博客 1256

深信服AC1000-B1200到手第一步:从开箱到激活上网的保姆级图文指南

本文提供深信服AC1000-B1200企业级行为管理设备的详细开局使用指南,涵盖从开箱验机、物理连接到网络配置、安全加固及设备激活的全流程。通过图文并茂的步骤解析,帮助用户快速完成设备初始化并实现安全上网,特别适合初次接触该设备的网络管理员参考。

weixin_42546392的博客 548

piku与Web服务器集成:Apache配置与性能优化指南

你是否还在为微型服务器上的应用部署而头疼?当你需要在资源受限的环境中(如树莓派或低端VPS)同时运行多个Web应用时,传统的Nginx+uWSGI组合虽然高效,但配置复杂度往往成为拦路虎。本文将带你探索如何将轻量级PaaS工具piku与Apache Web服务器无缝集成,通过10个实战步骤+5个优化技巧,让你的ARM架构服务器也能轻松承载多应用部署,性能提升最高可达40%。 读完本文你将获得: ...

gitblog_00807的博客 676

【ESP32CAM+Android+OpenCV】自定义目标数据集、训练自己的OpenCV模型部署到手机APP并对ESP32CAM无线图传显示并实时检测识别目标_资料编号30

本项目实现自定义目标数据集(想检测什么就检测什么,按照本文教程自己来更换目标)、训练自己的OpenCV模型实时检测识别(pycharm工程)。手机APP(Android studio工程)部署OpenCV模型实现对ESP32CAM(arduino工程)无线WIFI图传过来的图像实时检测识别。 本文以火焰检测识别为例进行演示,通过该过程,结合本文可自定义尝试更换为其它目标的检测,例如更换为车辆、车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人、口罩、行为、水果、植物、农作物、建筑、损伤等等部署进行检测。

嵌入式阿齐Archie 3485

Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器[摘抄]

  [文章作者:张宴 本文版本:v6.3 最后修改:2010.07.26 转载请注明原文链接:http://blog.s135.com/nginx_php_v6/]  前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章。本系列文章作为国内最早详细介绍 Nginx + PHP 安装、配置、使用的资料之一,为推动 Nginx 在国内的发展产生了积极的作用。...

weixin_33868027的博客 167

面经-2023-哲库Zeku-数字芯片设计

面经-2023-哲库Zeku-数字芯片设计

w0shishabi的博客 3908

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4139

SkyWalking 前端监控的应用

作者:范秋霞,Tetrate工程师、Apache SkyWalking PMC。她主导了SkyWalking RocketBot Ul,并创建了SkyWalking浏览器代理项目。Web ...

ServiceMesher 3641

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Apache Bench(ab)实战:从压力测试到性能优化,一文掌握 Web 服务器负载测评核心技能】

Apache Bench(ab)是 Web 开发与运维必备的压力测试神器,无需复杂配置即可模拟高并发场景,精准测评服务器负载能力。本文从原理入手,详解 ab 命令的核心参数(如并发数、请求量)用法,通过百度实战案例演示如何解读 QPS、响应时间、资源消耗等关键指标,帮助你快速掌握服务器性能瓶颈定位技巧,同时警惕测试中的 "CC 攻击式" 负载风险,是开发、运维优化网站性能的实用指南。

rong_ha_ha的博客 624

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

转贴:Apache 2.0性能优化

http://tech.ccidnet.com/pub/article/c737_a47607_p1.html  

肥三的专栏 1905

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Apache HTTP 服务器深度性能优化

随着业务的增长和技术的发展,持续优化和改进是保持竞争力的关键。不断学习新的技术和最佳实践,灵活应对不同的挑战,将是未来成功的重要保障。在前几篇文章中,我们讨论了基础和高级性能优化策略。现在,我们将深入探讨一些具体的优化实践,帮助您实现更精细的控制,并确保Apache服务器在各种复杂环境中都能保持最佳性能。对于频繁访问但更新不频繁的动态页面,使用内存缓存技术(如Memcached或Redis)来存储生成的结果,避免每次请求都重新计算。遵循最小权限原则,限制应用程序和服务所需的最低权限,降低潜在的安全风险。

Programming Talk 1763

Linux系统下WEB服务器的架设与性能优化

 Linux系统下WEB服务器的架设与性能优化一:概述 Linux系统的特点与发展简单地说, Linux是一套免费使用和自由传播的类 Unix操作系统,它主要用于基于 Intel x86系列 CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的 Unix兼容产品。 Linux的出现,最早开始于一位名叫 Linus

2338

tomcat性能优化

在Tomcat和应用程序进行了压力测试后,如果您对应用程序的性能结果不太满意,就可以采取一些性能调整措施了,当然了前提是应用程序没有问题,我们这里只讲Tomcat的调整。由于Tomcat的运行依赖于JVM,所以在这里我们把Tomcat的调整可以分为两类来详细描述:   外部环境调整   调整非Tomcat组件,例如Tomcat运行的操作系统和运行Tomcat的java虚拟机。   自身

wenbingcai的专栏 9835

Apache的性能优化

服务器型号: 型号:DELL1750 cpu:Intel Xeon(TM) CPU 3.06GHz 内存 :1G 硬盘:70/70/70 操作系统:FreeBSD 4.8p-STABLE 主要针对的应用需求: 峰值:800次/s 日pv流量一千万。 每个文件最大0.5k字节,都是html文件. 使用内存文件系统。 目录: 简单介...

weixin_34010949的博客 116

Web服务器☞Apache VS Nginx

Web服务器☞Apache VS Nginx LZ最近公司有一个项目在Web服务器选型上,在Apache和Nginx之间引起了一些讨论。这两者目前都是业内优秀的web服务器,都实现了HTTP1.1协议。当然,技术从来都是为实现业务而发展的,所以技术选型上,也最好是根据应用场景来决定。接下来,我们对这两种出色的web服务器进行一下对比。 Web服务器,也称为WWW服务器,主要是提供信息浏览服务。应用...

Lan_Xuan 262
上一篇: 如何实现Django规模化:寻找瓶颈
下一篇: 如何实现Django规模化:进阶教程
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值