Linux Apache 运行配置参数的调优

赞赏 2016-07-14

在使用 Apache 搭建网站时,经常会遇到因为访问量大,导致网站无法访问的情况。造成网站无法访问的情况有很多,例如服务器配置较低,无法承载当前的访问量。也有可能因为 Apache 的配置参数不够优化导致的。


问题分析


ECS Linux 系统下 Apache 的默认工作模式是 prefork MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。如果不做调整,访问量增大可能造成 Apache 崩溃的情况。

解决方案


具体使用哪种模式是在编译安装 Apache 时指定的。在编译的时候可以加入 —with-pem=(prefork|worker) 选项决定启用什么模式。可以使用 httpd -l 命令查看当前 Apache 的工作模式:

1.JPG

Apache 的如下配置参数对性能影响较大:

  1. StartServers          5MinSpareServers       5MaxSpareServers      10MaxClients          150MaxRequestsPerChild   0


建议做如下修改:

  1. $ vi /usr/local/apache/httpd/conf/extra/httpd-mpm.conf       StartServers         5       MinSpareServers      5       MaxSpareServers     10       ServerLimit       1024       MaxClients        1024       MaxRequestsPerChild  300



说明:

  • 这些参数是经验上的参数,具体是否有效,需要根据服务器的配置,访问量情况综合考虑。可以通过逐步调整参数,观察网站访问情况的方法是网站的性能达到最优。
  • MaxRequestsPerChild 参数还是必要设置为非 0,避免内存消耗殆尽而导致系统触发 OOM(Out Of Memory),导致应用系统异常,具体可以参考 Apache 官方文档说明 。

最后,重启apache生效:

  1. $ /usr/local/apache/httpd/bin/apachectl restart

更多信息


附一些参数的介绍:

  • ServerLimit
    默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。
    生效前提:必须放在其他指令的前面
  • StartServers
    指定服务器启动时建立的子进程数量,prefork默认为5。
  • MinSpareServers
    指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
  • MaxSpareServers
    设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1”
  • MaxClients
    限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。
  • MaxRequestsPerChild
    每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果 MaxRequestsPerChild为”0”,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
       
    • 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
    • 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
登陆后阅读全文
阅读 1425 赞赏 0 有用 0 没用 0 收藏 0 分享

   



0 条留言

linux分享的头像

linux分享

每个软件都有确定的用途

相关文章

阿里云·业务运营团队内部的前端构建和工程化工具 Dawn开源

Apache 如何关闭目录访问?

阿里云云盾扫描服务器的的IP段有哪些?

阿里云云盾扫描服务器的的IP段有哪些?

tomcat报warinig Unable to add the resource at [] to the cache

Apache 出现 winnt_accept: Asynchronous AcceptEx faile?

linux下如何开启 Apache 伪静态模块?

如何隐藏 Apache 版本信息?

CentOS 6.5系统下 Apache 如何配置 https 服务?

Linux下Apache日志的常用分析方法和日志大小的优化方法

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

我是如何执行 "rm -rf ~" 的

正态分布为什么常见?(财富的分布却不符合正态分布)

Linux下窗口管理器 xmonad 的使用教程

用披萨做比喻来解释 IaaS,PaaS,SaaS 的区别

如何制作CSR(证书私钥和证书请求文件)文件?

php RedisException with message read error on connection

Windows环境下ping丢包或不通时链路测试工具推荐

Linux下ping丢包或不通时链路测试工具推荐

链路测试结果分析说明及常见链路异常场景和测试报告

SSH 登录时出现如下错误:login: Module is unknown

手机扫一扫
分享文章