设为首页 收藏本站
查看: 706|回复: 0

[经验分享] apache网站访问缓慢的处理记录

[复制链接]
发表于 2017-12-24 06:28:50 | 显示全部楼层 |阅读模式
  朋友在阿里云上开通了一台ubuntu服务器(2G内存,2核CPU),用apache搭建了一个公众号网站。
  网站初期,他没有做相应的优化,在后续公众号推广活动时,网站并发突增,访问十分缓慢。
  登陆服务器,具体现象为:
  1)uptime查看负载较高;
  2)ss -a(或netstat命令)查看连接数较多,并且WAIT_TIME比较多;
  3)apache日志显示prefork工作模式下的并发连接数设置有问题;[mpm_prefork:error] [pid 13848] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
  4)重启apache服务后,网站暂时访问稍快,但过一会后又十分缓慢。
  针对上面的现象,帮他做了一些优化操作后,网站高并发下访问正常,速度很快。操作记录如下:
  1)修改apache的最大并发连接数(默认是256)
  有日志报错可知,apache采用的是默认的prefork模式(使用apache2 -l或httpd -l命令也能查看处理 )
  找到mpm_prefork.conf文件进行连接数的修改(若是work模式,就修改mpm_worker.conf)
[iyunv@wang ~]# vim /etc/apache2/mods-available/mpm_prefork.conf

  <IfModule mpm_prefork_module>
  StartServers                     10
  MinSpareServers               10
  MaxSpareServers              20
  ServerLimit                      2000
  MaxRequestWorkers         1500
  MaxConnectionsPerChild    10000
  </IfModule>
  说明:
  手动添加ServerLimit,这个才是修改apache最大并发连接数的参数设置,一定要将它放在MaxRequestWorkers的前面,并且它的值也一定要大于MaxRequestWorkers的值。如上设置,apache的最大并发连接数设置为2000个。
  其他的配置:
  StartServers         定服务器启动时建立的子进程数量,prefork默认为5
  MinSpareServers   指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
  MaxSpareServers  设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。
  MaxRequestWorkers   最大数量的服务器进程允许开始;这个参数是这些中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。
  MaxConnectionsPerChild   每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
  将MaxRequestsPerChild设置成非零值有两个好处:
  1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
  2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
  重启apache服务(最好是先stop,然后再start)
  在/etc/apache2/apache2.conf文件中添加ServerName localhost,去掉apache服务启动中的告警信息。
[iyunv@wang ~]# /etc/init.d/apache2 stop

[iyunv@wang ~]# /etc/init.d/apache2 start

  2)修改内核参数,解决WAIT_TIME过多的问题
  添加下面四行内容
[iyunv@wang ~]# vim /etc/sysctl.conf

  ......
  net.ipv4.tcp_syncookies = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_fin_timeout = 30
[iyunv@wang ~]# sysctl -p

  调大系统最大打开的文件数
[iyunv@wang ~]# ulimit -n 65535

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427389-1-1.html 上篇帖子: Apache的主要目录和配置文件详解 下篇帖子: Apache Ant 生成项目易如反掌
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表