高并发下的一些优化经验(转)

最近在高并发、较大数据的网站优化上有一些心得和体会,所以特写此文做一下总结,这块的高手就可以直接跳到文尾了哈,费话就不多说,直接进正文。

 

1.了解你的网站和项目到底有多大的流量和并发?

 

当项目的用户量达到一定规模以后,网站往往会经常出现502 bad gateway(Nginx),连接超时(Apache)MYSQL拒绝连接等问题。这个时候,一般的理解就是网站的访问量比较大,请求数比较高,所以服务器不堪重负,开小差去了。这个时候最快的解决办法一般就是重启apache,nginxmysql,当然这个不能解决根源,只是临时解决一下而已。

 

那么,首先你应该清楚你的网站的流量到底有多大?每秒的流量到底有多高?CPU占用峰值是多少?对于这个问题,首当其冲方案的肯定使用是监控软件了,这类的监控软件比较多,有cacti(完全图形化的流量监控工具),zabbix(支持各种数据的监控且可自己扩展监控模块并集成报警功能,非常强大!)所以第一步你就一定要先在所有服务器上安装监控客户端,如cactisnmpzabbixzabbix_client,然后搭建自己的监控服务端。然后静默收集数据一段时间,可以是几天也可以是一周。然后了解服务器的峰值是多少,平均值是多少,CPU占用,内存占用。这样你能先做到对服务器的状态心里有底。

 

2.查找高并发源泉

 

如果服务器一直运行得比较正常,但突然一段时间经常出现502,超时,超高CPU时,排除流量的超大幅度增长以外的原因,那么原因就有可能是程序卡死了或服务器硬件故障。如果排除硬件故障以后这个时候最好第一步查询MYSQLPHPNginxApache的错误日志,慢日志,定位根源文件及代码块,往往新功能如果没有经过完整的测试就上线,就非常容易引起这类的问题。

 

比如我们的一台线上服务器有段时间曾经上线了一个新功能,就是要求在某代码模块中将MYSQL服务器地址更改为其它机房的MYSQL服务器,由于代码没有经过严格的测试,而直接使用了MYSQL_CONNECT重新连接。在这个功能上线以后,服务器经常出现502,超时,CPU90%。后来排查时才看到这里,由于其它机房的网络问题引起MYSQL_CONNECT超慢,所以大量的MYSQL_CONNECT卡死在这里引起了阻塞。另外一个统计模块的file_get_contents也是同样的问题,所以我们在后面的开发中要求一定要禁止使用file_get_contents,另外MYSQL_CONNECT也要限制超时的时间。

 

如果程序上没有问题,那就要从数据库或队列上去查找原因了。数据库上的问题会非常多,比如一条没有经常优化的SQL语句引起表的锁死啊,MYSQL并发量达到预设峰值,表崩溃啊,等待进程过多啊等等。

 

3.使用队列和缓存

 

经验告诉我们,队列和缓存绝对是解决高并发的非常有效的办法。比如邮件发送,这类功能其实客户端并不需要等待完成,所以我们在前端只需要一直把要发送的邮件地址,内容等一并放到队列里,后台程序慢慢从队列里面去取就OK。对于队列的解决方案有许多,比如memcacheredis等。

 

关于memcache,前段时间尝试自己用memcache来写了一个队列,平台windows。最终效果非常不理想,在循环的getset时,memcache会显得非常缓慢,并且最终的命中率一点都不高。在windows平台上的redis会由于pull的不支持造成在高并发时经常redis server gone away的情况。在*inux平台上,redis表现了非常棒的性能和稳定性,目前公司线上产品在使用redis后,已经非常稳定,所以redis绝对是值得使用的神器。

 

转载于:https://www.cnblogs.com/jiangxiaxue/p/3199864.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值