1 原因分析
是Python环境问题,到服务器上各种虚拟环境版本进行尝试,无果。
mysql数据库,开始用pymysql包连接改动了一些参数,担心是驱动问题导致数据库查的慢,更换mysqlclient包后,响应依旧慢。
都说用uwsgi中间件部署Django能加快响应速度,尝试之,没用。
为什么mysql响应这么慢,百度一番后发现原因
mysql建立连接之前会根据连接的ip反向查找对应的主机名,这一步会涉及DNS反向解析(如果本地hosts文件没有指定就会找其他服务器查询),这个过程会消耗时间。
于是登陆数据库所在主机,通过命令"nslookup IP地址"分别查询本地IP和服务器IP,本地IP查询结果很快返回(不在一个网段找不到),服务器IP结果非常慢直到超时否没返回,这就解释了为什么前文【windows机器反应快,linux反应慢】的问题。至于为什么反向解析服务器IP这么慢,这个问题就不再继续挖下去了,应该是网管没有配置好相关的解析吧。
解决办法:禁用反向解析,找到mysql的配置文件/etc/my.cnf,增加一行配置,重启以后数据库响应速度就完美了。
1
2
[mysqld]
skip-name-resolve
既然这个反向解析这么耗时,为什么还要有这个流程呢?
还记得mysql的授权命令吗:
1
grant all priviledges on *.* to "user"@"%" identified by "pass"
@后面的%就代表任意的主机名和ip地址,对!这个地方是可以根据主机名来授权的,如果把反向DNS解析关掉了,这里就会有问题,授权的时候就只能根据ip进行授权啦~
2 解决办法举例
对于一个后台程序员来说,提高系统性能的指标主要有两个:一个是并发数,另一个是响应时间。
所以需要对系统性能进行优化,系统性能一般有:web前端性能优化,应该服务性能优化,存储服务器优化。
对于web前端的优化主要有:
1.减少http请求,减少数据库的访问量,比如使用雪碧图。
2.使用浏览器缓存,将一些静态资源(logo、js 、css等)缓存到本地浏览器,通过设置http请求头中的cache-control 和 expires 的属性,可设定浏览器缓存,缓存时间可以自定义。
3.对 html、css 、Javascript 文本进行压缩,减少网络的通信量。
对个人优化有一下做法:
1.合理使用缓存技术,对一些常用到的动态数据,如:首页做一个缓存,或者某些常用的数据做缓存处理,设置一定的过期时间,减少数据库的压力,提高系统性能。
2.使用celery 消息队列,将耗时操作放到队列中,让worker去监听队列中的任务,实现异步操作,如发短信、发邮件。
3.代码上的优化;nginx部署项目也是项目优化,可以配置合适的配置参数,提高效率,增加并发量。
4.如果考虑安全因素,服务器磁盘使用固态硬盘读写,远远大于机械硬盘,该技术暂时未普及,固态硬盘尚未完全成熟。
5.可以搭建服务器集群,将并发访问请求,分散到多台服务器上处理。
6.最后就是运维工作人员的一些性能优化技术了。