0

0

5个优化apache服务器性能的技巧

王林

王林

发布时间:2021-01-05 10:03:11

|

5752人浏览过

|

来源于csdn

转载

5个优化apache服务器性能的技巧

下面是优化apache服务器性能的五种技巧:

(学习视频分享:编程视频

一、始终将Apache更新到其最新版本

毫无疑问,安装最新版本的Apache可能是您需要考虑的第一件事。截至2015年11月19日,CentOS 7存储库中最新版本的Apache 为2.4.6,而Debian中的最新版本为2.4.10。
但是,最近可能会有一个改进或错误修复添加到新发布的稳定版本中,然后可以从源代码下载和安装。此处还提供了编译和安装说明- 请记住,如果选择此更新方法,则可能需要备份当前配置文件/站点/虚拟主机作为预防措施。

可以按如下方式检查当前安装的版本:

# httpd -v [基于RedHat / CentOS的系统]
# apache2 -v [基于Debian / Ubuntu的系统]

4a6af309c695a60b7d23cc10e3c4b7a.png

根据经验,除非没有其他方法,否则请坚持使用所选发行版的包管理器提供的更新方法(yum update httpd或者aptitude safe-upgrade apache2,分别用于CentOS或Debian)。

二、如果您使用的是早于2.4的内核,请考虑立即升级

为什么?内核版本2.4及更高版本默认启用sendfile内核系统调用。反过来,这有助于高性能网络文件传输(在Web服务器 - 客户端通信的上下文中需要),并通过执行同时读取和发送操作,使Apache能够更快地提供静态内容并降低CPU利用率。

可以使用以下命令查看当前安装的内核:

# uname -r

cc81b2ae7f95ae2a346725883f0049a.png

虽然这是一个不适合初学者的过程,但升级内核是一项有趣的练习,可以了解有关Linux内部的更多信息。

三、选择最适合您情况的多处理模块(MPM)

实际上,MPM通过允许您决定如何配置Web服务器以绑定到计算机上的网络端口,接受来自客户端的请求以及使用子进程(以及线程,或者)来处理此类请求,从而扩展了Apache的模块化功能。

从版本2.4开始,Apache提供三种不同的MPM供您选择,具体取决于您的需求:

该preforkMPM使用多个子进程,不必穿线。每个进程一次处理一个连接,而不为每个进程创建单独的线程。在没有详细说明的情况下,我们可以说,只有在调试使用或者应用程序需要处理非线程安全模块(如mod_php)的应用程序时,才会使用此MPM。
该workerMPM使用每个子进程,每个线程处理一次一个连接多个线程。对于高流量服务器来说,这是一个不错的选择,因为它允许使用比前一种情况更少的RAM来处理更多的并发连接。
最后,eventMPM是2.4版及更高版本的大多数Apache安装中的默认MPM。它类似于worker MPM,它还为每个子进程创建多个线程但有一个优点:它导致KeepAlive或空闲连接(当它们保持在该状态时)由单个线程处理,从而释放可以释放的内存被分配给其他线程。此MPM不适合与非线程安全模块(如mod_php)一起使用,必须使用替换此类PHP-FPM。

要检查Apache安装使用的MPM,您可以执行以下操作:

# httpd -V

下图显示此特定Web服务器正在使用prefork MPM。

47d424ef608413d6d8a6ac8b926f112.png

要更改此设置,您需要编辑:

/etc/httpd/conf.modules.d/00-mpm.conf [基于RedHat / CentOS的系统]
/etc/apache2/mods -available/ load [基于Debian / Ubuntu的系统]

其中可以是mpm_event,mpm_worker或mpm_prefork。

并取消注释加载所需模块的行,如下所示:

#LoadModule mpm_event_module modules/mod_mpm_event.so
修改为:
LoadModule mpm_event_module modules/mod_mpm_event.so

注意:要使事件MPM在Debian中工作,您可能必须从非自由存储库安装libapache2-mod-fastcgi包。

另外,对于CentOS,你需要php-fpm(以及fcgi和mod_fcgid),而在Debian中它叫做php5-fpm(和apache2-mpm-event一起)。

最后,但并非最不重要的是,重新启动Web服务器和新安装的php-fpm(或php5-fpm)服务:

在RedHat / CentOS上

# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm

在Debian / Ubuntu上

# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

虽然您可以将Apache设置为使用特定的MPM,但可以按照前面所述的相同方式在每个虚拟主机的基础上覆盖该配置。

只需将相应的标签放入每个虚拟主机的配置文件中即可开始使用 - 但请确保每个虚拟主机使用一个且只有一个MPM。

千博购物系统.Net
千博购物系统.Net

千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使

下载

最后,请注意,无论您选择的发行版如何,php-fpm都依赖于FastCGI的实现,这就是为什么我之前推荐了额外的软件包安装的原因。

有关php-fpm的更多详细信息和示例以及它如何与事件MPM一起提高Apache的性能,您应该参考官方文档。

这是我在上一张图片所示的同一个框中将默认MPM从prefork更改为event后所看到的:

319a59fb7c65dd1d63610e03ed28e9b.png

在CentOS 7中,您需要确保通过防火墙启用了http和https服务,并且网络接口已正确添加到默认区域。

例如:

# firewall-cmd --zone = internal --add-interface = tun6to4
# firewall-cmd --zone = internal --add-interface = tun6to4 --permanent
# firewall-cmd --set-default-zone = internal
# firewall-cmd --add-service = http
# firewall-cmd --add-service = https
# firewall-cmd --add-service = http --permanent
# firewall-cmd --add-service = https --permanent
# firewall-cmd --reload

我提出这个问题的原因是因为我最近遇到了一个问题,即云VPS 中的默认firewalld配置设置阻止了php-fpm和Apache处理php文件。

作为一个基本的测试(我相信你可以想到更复杂或更紧张的),我将创建一个php文件,检查是否存在另外test.php两个CentOS 7服务器的同一目录中具有相同硬件特性和负载的文件但是与不同的MPM。其中一个将使用事件,另一个将使用prefork:

e47b3221c26dda3fa3e299b9c82ea55.png

这是我保存到名为的文件的PHP代码checkiffileexists.php:

$ filename =‘test.php’;
if(file_exists($ filename)){
echo“文件$ filename存在”;
} else {
echo“文件$ filename不存在”;
}
?>

然后我们将运行Apache基准测试工具(ab),同时发出200个请求,直到2000个请求完成:

# ab -k -c 100 -n 2000 localhost/checkiffileexists.php

让我们运行测试并比较结果。注意性能统计:

d0d45fd99cb7fee1d577cdbdd766a1c.png

正如您所看到的,带有事件的服务器的性能在此测试的每个方面都高于其prefork对应物。

四、明智地为Apache分配RAM

也许最重要的硬件项是要为每个Apache进程分配的RAM量。虽然您无法直接控制它,但您可以通过MaxRequestWorkers指令(以前在Apache 2.2中称为MaxClients)限制子进程的数量,这将限制Apache对RAM的使用。同样,您可以在每个主机或每个虚拟主机的基础上设置此值。

要做到这一点,你应该注意Apache使用的平均RAM量,然后乘以MaxRequestWorkers的数量,这就是为Apache进程分配的内存量。您从不希望Web服务器做的一件事是开始使用swap,因为这会显着降低其性能。因此,您应始终将Apache的RAM使用限制在您能够承受的范围内,并且永远不要依赖交换。

例如,以下块将同时客户端的数量限制为30。如果有更多客户端访问主机,他们可能会遇到延迟或暂时故障,可以通过刷新浏览器轻松解决。虽然这可能被认为是不合需要的,但它对于服务器来说更健康,从长远来看,对您的网站也是最好的。

您可以将此块放在内部,/etc/httpd/conf/httpd.conf或者/etc/apache2/apache2.conf取决于您使用的是CentOS还是Debian。

请注意,同样的原则适用于所有MPM - 我在此处使用事件继续前面提示中概述的概

c4f7572390cdefb5d82faef55557ce2.png

五、了解您的应用程序

根据经验,您不应加载任何非严格需要的Apache模块才能运行。这至少需要了解服务器上运行的应用程序的全部知识,特别是如果您是系统管理员并且还有另一个负责开发的团队。

您可以列出当前加载的模块:

# httpd -M [基于RedHat / CentOS的系统]
# apache2ctl -M [基于Debian / Ubuntu的系统]

要卸载/禁用CentOS中的模块,您需要注释掉以LoadModule开头的行(在主配置文件中或在/etc/httpd/conf.modules.d中的辅助文件中)。

另一方面,Debian提供了一个名为a2dismod的工具来禁用模块,其用法如下:

# a2dismod module_name

要启用它:

# a2enmod module_name

在任何一种情况下,请记住重新启动Apache以使更改生效。

总结
在本文中,我们回顾了5个技巧,这些技巧将帮助您调整Apache Web服务器并提高其性能。此外,您应该记住,没有安全性的优化和性能是没有意义的,因此您可能需要参考安装mod_pagespeed来改进Web服务器性能以及Tecmint.com中的Apache强化技巧文章。

相关推荐:apache教程

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

839

2023.08.22

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1732

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

549

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2338

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

43

2026.01.19

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1732

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

549

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2338

2025.12.29

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.8万人学习

尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.3万人学习

Linux优化视频教程
Linux优化视频教程

共14课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号