实战网站优化

来源:互联网 发布:软件项目文档研制成果 编辑:程序博客网 时间:2024/05/17 07:41

之前内部系统优化,小有成效,被任命负责网站优化,写下此博客。


网站介绍

alexa 日独立ip>20万,日pv>110万。 

实际上仅仅一台服务器,10点-11点一小时pv就能达到50万。全天远超110万。 alexa只能做参考。


网站架构

2个lvs,7台webserver, 1台内网webserver, 采用lamp,使用memcache。 网站内容用户差异,未做静态缓存。


网站优化


1: 服务器性能调优

       使用 zabbix监控,查看网站总体性能,设置警戒值,对于逼近警戒的,性能参数,进行调优。


      比如,最新的两个参数调优 A apache进程数  B memcache命中率


       A : 突然有一天,apache的进程数疯狂飙升,平时只有120,突然400+,且常常突破800上线。(进程状态reading时间超长)

            思路:

                 0)查看流量

                        经查,确实有爬虫异常,隔离访问后进程数仍然不降低。

                 1) 查看apache log,检查是否新上线功能的页面性能低下造成的。

                         经查,确实有新上线的功能,性能有问题,但不是根本原因

                 2)使用strace,netstat查看reading状态的进程在做什么

                         经查,有pconnect操作,但是不是根本原因。有timeout请求,问题的直接原因。

                 3)使用tcpdump抓包,分析访问超时次数的ip记录

                         经查,问题出现在tcp传输上的,timeout


               解决问题:

                        托管机房突然网络不稳,丢包严重,导致进程等待,采取措施是减少timeout的等待时间

        B:  memcache命中率低,只能达到80%

            思路:

                  0)查看memcache监控中的内存使用率

                         经查,内存还有10%空余

                  1)telnet,使用stats命令

                         经查,items不够用

                  2)面临选择,加内存,还是加机器

                         经测试,内存需要加一倍,再加2台机器

                解决问题:

                       a:修改一致性算法,让分布更加均匀

                       b:增加机器与调高内存

                       c:使用stats items,查看slabs使用情况,使用move命令,将空闲内存分配给已满的slab。

  

2:应用调优

      A    apc调优, apc是php的opcode的缓存,也可当key/value的内存缓存

                         1):调整内存大小,文件大小,文件数量,缓存时间, 使用性能更高的锁,增加黑名单过滤临时文件

                         2):stat调整成0,  开发上线流程修改,保证文件及时更新。

      B   静态缓存,将原动态页面分割成,相对静态的页面,使用过期策略+主动更新方式管理。

                        1):均匀算法,本地磁盘分配,不同步文件。

                        2):超容量规划后,再使用redis

                        3):过期文件,垃圾回收,脚本任务处理

      C  增强apachelog日志监控,

                        1):实时报告 大于400的错误页面

                        2):实时分析爬虫,ip限制+分流

      D memcache使用优化

                       1):key分组

                       2):hotkey复制别名,分担压力

                       3)   :   更新加锁,防止瞬间大流量访问db

     E rest接口自我调整

                      1):失败统计

                      2):超时统计

                      3):自我关闭算法,自我开启算法,关闭期间,保持心跳监控url

                      4):关闭状态,记日志,放入全局变量

      F js,全部切换cdn

     G lvs后加ngnix,做应用分离

                        


      




原创粉丝点击