专栏首页Urlteamapache2的几个核心设置优化

apache2的几个核心设置优化

毕竟服务器的内存比较小,经常容易出现内存不足导致数据库退出等bug,so,除了设置swap缓冲区,最好的莫过于换成轻量级的服务器nginx,在那之前一些apache2服务器的优化也是比较必要的,so。

然后在/etc/apache2/ 下找一个httpd.conf 的文件然后修改。

查找MaxRequestsPerChild,将MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。

  • 影响apache性能的几个重要参数(conf/httpd.conf中设置)
  • KeepAlive 是否允许持续连接
  • MaxKeepAliveRequests 允许的持续连接的最大数
  • KeepAliveTimeout 持续连接在没有请求多少秒后切断
  • StartServers 最初启动时启动多少个服务器进程
  • MinSpareServers 空闲服务器进程的最小数
  • MaxSpareServers 空闲服务器进程的最大数
  • MaxClients 同时处理的请求数(最重要的参数,要少于ServerLimit)
  • MaxRequestsPerChild 每个子进程处理的最大请求数

它们之前的关系: prefork控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和 MaxSpareServers。MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了 “MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:1、可防止意外的内存泄漏。2、在服务器负载下降的时侯会自动减少子进程数。

  • ServerLimit 2000
  • StartServers 10
  • MinSpareServers 10
  • MaxSpareServers 15
  • MaxClients 1000
  • MaxRequestsPerChild 2048

调试过程中用到的指令:

  • ps -ef|grep http|wc -l //查看请求总数
  • cat /proc/loadavg //查看平均负载(loadavg),loadavg高于1,表明任务队列出现了等待,CPU忙不过来了。超过2以上就会明显感到性能降低了
  • netstat -ant | grep :80 | wc -l //查看TCP连接数
  • top -b -n1 //查看系统运行情况
  • ==================================================================== apache的内存使用 apache进程在使用内存时,是“渐长”的。也就是说,直到这个进程死掉,使用内存的数量是一直增长而不会减少的。这样的话,apache进程使用内存的多少,就决定于你的应用程序最大使用内存量了。 keepalive参数 KeepAliveTimeout 这个参数决定了,在什么都不做之前,一个http进程能够等待多长时间?设想一下,如果keepalive设置为on,而 keepalivetimeout设置为一个比较大的数字,apache占用内存会很快的增长。这是因为,一个apache进程完成了一个任务(并达到了一定的内存占用,想一下“渐进”模式),并不会马上退出,而是等待一个keepalivetimeout时间。假设用户的链接请求持续不断的到来,则积累起来的无用的apache进程就会相当多,直到timeout,这些进程才会被杀死。 但是,keepalive的确对于静态的文件,比如图像文件的传送是很有效的,因此,keepalive要设置为on,(off)但是keepalvietimeout要设置的小些,比如5s 15 MaxRequestsPerChild 这个参数是说,apache进程在处理了多少个请求之后,必须退出,重新开始,以免在处理中的内存问题。 对于php脚本来说,把这个参数设置的小一些是有好处的,可以避免程序使用的内存持续增长对apache带来的压力:让这个参数定期释放内存,因为php是在脚本执行完毕后,自动释放只用的资源(内存)的。 比如设置为50?如果太小的话,重新产生一个apache进程也是要消耗资源的,这是一个平衡问题。

参考原文 http://blog.csdn.net/binyao02123202/article/details/10162361

原创文章,转载请注明: 转载自URl-team

本文链接地址: apache2的几个核心设置优化

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 操作系统-多进程和多线程-python

    在学习廖雪峰老师的python教程,学习了多进程和多线程,记录下核心的思路和方法。

    十四君
  • 在 centos 下 python3,不能 print 中文的解决

    解决  ‘ascii’ codec can’t decode byte 0xe4 in position 7: ordinal not in range(128...

    十四君
  • linux运维常用状态检测工具集锦

    上次在服务器实战的时候出了问题一时要分析各种问题,还是非常需要把核心的命令和工具记录下来。

    十四君
  • 容器OOM问题排查思路

    外界的刁难,挑战。。。其实并不是最难的,最难的总是内部难以安抚,OOM。。。内存泄漏,OOM killer了解一下。。。攘外必先安内。。。我可能要死在内...

    SRE运维实践
  • SpringBoot+Redis分布式锁:模拟抢单

    来源:cnblogs.com/wangrudong003/p/10627539.html

    JAVA葵花宝典
  • SpringBoot+Redis分布式锁:模拟抢单场景

    本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:

    搜云库技术团队
  • SpringBoot+Redis分布式锁:模拟抢单

    来源:cnblogs.com/wangrudong003/p/10627539.html

    Java团长
  • Docker中运行的Java 9将能调整内存限制

    OpenJDK 9中首次新增了一项实验性功能,JVM可借助该功能检测到自己运行在容器中,进而酌情调整内存限制。尽管过去几年来容器技术日渐流行,但包括JVM在内的...

    静一
  • leetcode-917-仅仅反转字母

    给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

    chenjx85
  • 如何使用REDIS做限定登录和LIST缓存?

    首先我们使用docker安装下redis,关于docker还不会用的可以去百度学习下,安装使用还是非常简单的。

    技术从心

扫码关注云+社区

领取腾讯云代金券