Apache优化相关

Apache所运行的硬件环境都是对性能影响最大的因素,即使不能对硬件进行升级,也最好给Apache一个单独的主机以免受到其他应用的干扰。各个硬件指标中,对性能影响最大的是内存,对于静态内容(图片、JavaScript文件、css文件等)它决定了Apache可以缓存多少内容,它缓存的内容越多,在硬盘上读取内容的机会就会越少,大内存可以极大提高静态站点的速度;
对动态高负载站点来说,每个请求保存的时间更多一些,Apache的mpm模块会为每个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正比,因此增大内存对提高动态站点的负载和运行速度也极为有利。
其次是硬盘的速度,静态站点尤为突出,Apache不断的在读取文件并发送给相应的请求,硬盘的读写是极其频繁的;动态站点也要不断的加载web程序(php等),一个请求甚至要读取十几个文件才能处理完成,因此尽可能的提高硬盘速度和质量对提高Apache的性能是有积极意义的。
最后CPU和网络,CPU影响的是web程序执行速度,网络影响流量大小。

Apache的几种工作模式:

查看Apache的工作模式:

### httpd –v
或者
### httpd  -l

Prefork(非线程型的):

其工作方式为:当Apache服务器启动后,mpm_prefork模块会预先创建多个子进程(默认为5个),每个子进程只有一个线程,当接受到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork模块就会创建新的子进程来处理额外的请求。这样客户端的请求就不需要在接受后等候子进程的产生。
由于在mpm_prefork模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他两种模块而言较多。不过mpm_prefork模块的优点在于它的每个子进程都会独立处理对应单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。Prefork在效率上要比work要高,但是内存使用大得多,不擅长处理高并发的场景。

<IfModule prefork.c>
StartServers       8        //Apache启动时默认开始的子进程数
MinSpareServers    5        //最小的闲置子进程数
MaxSpareServers   20            //最大的闲置子进程数
MaxRequestWorkers  250      //设置了允许同时的最大接入请求数量。任何超过MaxRequestWorkers限制的请求将进入等候队列,在Apache2.3.1以前的版本MaxRequestWorkers被称为MaxClients,旧的名字仍旧被支持。
MaxConnectionsPerChild 500  //设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxConnectionsPerChild”个请求后将自动销毁。0意味着无限,即子进程

在处理了“MaxConnectionsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
可防止意外的内存泄漏
在服务器负载下降的时候会自动减少子进程数。因此,可根据服务器的负载来调整这个值。在Apache2.3.9之前称之为MaxRequestsPerChild。

同时需要注意的问题如下所示:

(1.)MaxRequestWorkers是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。如果请求总数已达到这个值(可通过ps -ef | grep httpd | wc -l)来确认,那么后面的请求就要排队,直到某个请求已处理完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,建议将初始值设为(以MB为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。
(2.)prefork控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个。。。。如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
(3.)ServerLimit和MaxClients(MaxRequestWorkers)有什么区别呢?
是因为在Apache1时代,控制最大进程数只有MaxClients这个参数,并且这个参数最大值为256,并且是写死了的,试图设置为超过256是无效的,这是由于Apache1时代的服务器硬件限制的。但是Apache2时代由于服务器硬件的升级,硬件已经不再是限制,所以使用ServerServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients之前,值要不小于MaxClients。

查看Apache加载的模块:

# apachectl -t -D DUMP_MODULES
或者
# apachectl –M

修改和启用prefork参数:



之后重启httpd即可。

Work模式(多线程进程):

与prefork模式相比,work使用了多进程多线程的混合模式,work模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑的线程的安全了,在使用keep-alive长连接的时候,某个线程会一被占用,即使中间没有请求,需要等到超时才会被释放(该问题在prefork模式下也存在)
总的来说,prefork方式速度要稍高于work,然而它需要的CPU和memory资源也稍多于work。

参数解释:
# worker MPM
<IfModule mpm_worker_module>
StartServers    3 :#apache启动时候默认开始的子进程数
MinSpareThreads   75:#最小空闲数量的工作线程
MaxSpareThreads  250:#最大空闲数量的工作线程
ThreadsPerChild   25:#每个子进程产生的线程数量
MaxRequestWorkers  400:#与prefork模式相同
MaxConnectionsPerChild  0:#与prefork模式相同
</IfModul>

注意:
(1.)work由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxRequestWorkers设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数
对Apache的性能影响并不大,可以按照实际情况相应调节。
(2.)ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显示使用ThreadLimit指令,它的最大缺省值是20000。
(3.)worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显示声明ServerLimit(系统配置的最大进程数量,最大值是20000)。需要注意的是,如歌显示声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild整倍数,否则Apache将会自动调节到相应的一个相应值。
(4.)进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体。
与进程的区别是:
地址空间:进程内的一个执行单元,进程至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间。
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
线程是处理器调度的基本单位,但进程不是
二者均可并发执行
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

Event模式:

这是Apache最新的工作模式,是worker模式的变种,它把服务进程从连接中分离出来,worker模式不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,由允许它释放。这增强了在高并发场景下的请求处理。event模式不能很好的支持https的访问(HTTP认证相关的问题)。

Apache配置参数详解

(1.)keepAlive On/Off
keepAlive 指的是保持连接活跃,换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。一般情况下,图片较多的网站应该把KeepAlive设为On。
(2.)KeepAliveTimeOutnumber
如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。它的设置一般考虑图片或者JS等文件两次请求间隔,一般设置为3-5秒。
(3.)MaxKeepAliveRequests100
一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。
事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。
(4.)HostnameLookupson|off|double
如果是使用on,那么只有进行一次反查,如果用double,那么进行反查之后还要进行一次正向解析,只有两次的结果互相符合才行,而off就是不进行域名验证。如果为了安全,建议使用double;为了加快访问速度,建议使用off;域名查找开启这个会增加Apache的负担,减慢访问速度建议关闭
(5.)timeout 5
推荐5这个是Apache接受请求或者发出相应的时间超过这个时间断开
注意:以上配置项可在/usr/local/http-2.4.23/conf/extra/httpd-default.conf设置并在httpd.conf文件中通过include选项引用

优化相关:

MPM这个比较关键,是影响并发效率的主要因素:
(1.)StartServers 10
设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所以一般没有必要调整这个参数。
(2.)MinSpareServers 10
设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理的请求的子进程。如果当前空闲子进程数少于MinSpareServers,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。
(3.)MaxSpareThreads 75
设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。
(4.)ServerLimit 2000
服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重新启动将不会生效。
(5.)MaxClients/MaxRequestWorkers 256
用于客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,如果要提高这个值必须同时提高ServerLimit的值。建议将初始值设为(以MB为单位的最大物理内存/2),然后根据负载情况进行动态调整。
比如一台4G内存的机器,那么初始值就是4000/2=2000。
(6.)MaxRequestsPerChild /MaxConnectionsPerChild0
设置的是每个子进程可处理的请求数,每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100。所以一般情况下,如果你发现服务器的内存直线上升,建议修改该参数试试。
注意:以上配置项可在/usr/local/http-2.4.23/conf/extra/httpd-mpm.conf设置并在httpd.conf文件中通过include选项引用

事例性能调优,模块启用/关闭:

(1)启用压缩 LoadModule deflate_module modules/mod_deflate.so
(2)启用重写 LoadModule rewrite_module modules/mod_rewrite.so
(3)启用默认扩展,支持在这里进行修改httpd主要配置 Include conf/extra/httpd-default.conf
(4)提供文件描述符缓存支持,从而提高Apache性能 LoadModule file_cache_module modules/mod_file_cache.so
(5)启用基于URI键的内容动态缓冲(内存或磁盘) LoadModule cache_module modules/mod_cache.so
(6)启用基于磁盘的缓冲管理器 LoadModule cache_disk_module modules/mod_cache_disk.so
(7)基于内存的缓冲管理器 LoadModule socache_memcache_module modules/mod_socache_memcache.so
(8)屏蔽所有不必要的模块
#LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_socache_module modules/mod_authn_socache.so #LoadModule authn_core_module modules/mod_authn_core.so
(9)已经过时屏蔽 #LoadModule autoindex_module modules/mod_autoindex.so (10)用于定义缺省文档index.php、index.jsp等 LoadModule dir_module modules/mod_dir.so
(11)用于定义记录文件格式 LoadModule log_config_module modules/mod_log_config.so
(12)定义文件类型的关联 LoadModule mime_module modules/mod_mime.so
(13)减少10%左右的重复请求 LoadModule expires_module modules/mod_expires.so
(14)允许apache修改或清除传递到cgi或ssi页面的环境变量 LoadModule env_module modules/mod_env.so
(15)根据客户端请求头字段设置环境变量,如果不需要则屏蔽掉 #LoadModule setenvif_module modules/mod_setenvif.so
(16)生成描述服务器状态的页面 #LoadModule status_module modules/mod_status.so
(17)别名 LoadModule alias_module modules/mod_alias.so
(18)url地址重写模块 LoadModule rewrite_module modules/mod_rewrite.so (19)jk_mod 负载均衡调度模块 LoadModule jk_module modules/mod_jk.so (20)过滤模块,使用缓存必须启用过滤模块 LoadModule filter_module modules/mod_filter.so
(21)关闭服务器版本信息 LoadModule version_module modules/mod_version.so (22)自动修正用户输入的url错误 LoadModule speling_module modules/mod_speling.so

Apache优化相关相关推荐

  1. Apache优化:修改最大并发连接数

    http://www.365mini.com/page/apache-concurrency-configuration.htm Apache是一个跨平台的web服务器,由于其简单高效.稳定安全的特性 ...

  2. apache优化管理

    Apache优化管理 内容摘要: Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手.我个人感觉Apache的设计充分体现了模块化设计的优势,通 ...

  3. Linux脚本自动安装软件,一个快速自动安装Apache及其相关软件的Shell脚本

    一个快速自动安装Apache及其相关软件的Shell脚本 文:王文俊 email:wwj99001@sina.com wwj99001@sohu.com 成文时间:2002年6月1日 Apache是一 ...

  4. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...

    源码分析相关面试题 Activity相关面试题 与XMPP相关面试题 与性能优化相关面试题 与登录相关面试题 与开发相关面试题 与人事相关面试题 与人事相关面试题现在三四月份,金三银四最好找工作时间, ...

  5. 【每周CV论文推荐】 初学者必须精读的5篇深度学习优化相关文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 从事深度学习岗位,扎实的深度学习理论基础是必 ...

  6. Apache服务安全加固及Apache优化

    转载来源 :https://help.aliyun.com/knowledge_detail/52981.html 一.账号设置 以专门的用户帐号和用户组运行 Apache 服务. 1.根据需要,为 ...

  7. IDEA JVM 性能优化 相关参数设置

    文章目录 IDEA JVM 性能优化 相关参数设置 IDEA JVM 性能优化 相关参数设置 点击 Help - Edit Custom VM Options -Xms256m -Xmx2048m - ...

  8. 实现图片懒加载(及优化相关)

    目录 内容介绍 1.懒加载 2.预加载 一.效果展示 二.实现代码 三.优化相关 内容介绍   工作之余想要休闲一下(看-美-女-图),但是又觉得单纯休闲不利于自身进步,于是 --   首先,简单说一 ...

  9. ElasticSearch--性能优化相关的配置

    原文网址:ElasticSearch--性能优化相关的配置_IT利刃出鞘的博客-CSDN博客 简介 本文介绍ElasticSearch中性能优化有关的配置. 相关的配置有: 内存大小 批量写的数量 索 ...

最新文章

  1. W3C宣布成立Web性能工作组
  2. 20155216 2016-2017-2 《Java程序设计》第二周学习总结
  3. 启明云端分享| 2.4寸磁编码旋钮屏
  4. WebView.onDraw (Android 4.1)
  5. 二叉树(2)——遍历的非递归实现
  6. SQL Server数据库迁移–将数据库克隆到另一个排序规则
  7. NAT,PAT、OSPF的相关配置
  8. Mac Os的java开发环境以及MySql环境配置
  9. Ajax学习笔记-客户端模板引擎-9
  10. mysql 索引 范围扫描_MySql学习笔记(六):扫描范围
  11. android无法解码avcmp4,android - Android中的MediaCodec编码的H.264 avc视频无法播放 - 堆栈内存溢出...
  12. c语言中问号和分号是什么,分号是什么符号
  13. 恢复希捷硬盘丢失数据的方法
  14. 如何修改w7计算机用户名和密码忘记,w7系统开机密码忘记解决方法_win7忘记密码如何进入系统...
  15. 基于easyX实现俄罗斯方块
  16. c语言switch例题注释,switch语句例子大全 C语言switch语句例题
  17. 关于在JS中引入JS文件的JQ方法
  18. 从头来过教你PHP脚本语言(一)
  19. 谈谈Google与微信H5牛牛的Java开发规范
  20. Java简易图书DVD管理系统

热门文章

  1. linux rar文件怎么解压_Linux下rar压缩包的解压方法
  2. DOS时代后,金山系再出神级办公软件,会像WPS一样普及
  3. MySQL必须知道的点
  4. unparseable date:‘’
  5. Django项目部署至华为云服务器
  6. Linux学习笔记-shell脚本-log脚本函数
  7. WebRTC系列--视频编码控制之BALANCED(分辨率与帧率平衡模式)
  8. 基于React和fabricjs开发的在线名片、海报设计器,大前端项目在线图片编辑器源码分享
  9. GitHub Actions工作流语法
  10. 教你制作一张漂亮的城市分布图 比如加油站分布地图