博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python+uwsgi导致redis无法长链接引起性能下降问题记录
阅读量:7105 次
发布时间:2019-06-28

本文共 1666 字,大约阅读时间需要 5 分钟。

  今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因引起的。

  没有办法的情况下,直接登录服务器,从uwsgi与nginx中卸载掉这个web服务,然后暴力的在命令操作符下输入python main.py,执行访问发现又正常了......狂吐血400CC...然后是各种怀疑uwsgi和nginx,查看配置与其他服务正常,排除完后只能回归到检查代码。

  静下心来查看优化过后的代码,发现为了保持redis只有一个长链接,在web服务主程序启动时会对redis模块进行一次初始化,在代码中用global将redis链接设置为静态全局变量,redis链接只需要初始一次

# 初始化Redis缓存链接r = Nonedef set_redis_config(_redis):    """    设置redis配置参数    :param _redis: redis配置参数    """    global r    # 初始化Redis缓存链接    try:        if not r:            r = redis.Redis(host=_redis.get('server', ''), port=_redis.get('post', ''), db=_redis.get('db', ''),                            password=_redis.get('pwd', ''),                            socket_timeout=1, socket_connect_timeout=1)            log_helper.info('初始化redis缓存链接')    except:        pass

  然后将初始化代码改变地方,放在勾子里,再次启用uwsgi与nginx服务,运行终于正常了。

  找了朋友问问得知,原来uwsgi是多进程服务,听了后心里比较担心,会不会因为多进程关系使global失效,造成改造后长链接过多使redis服务崩溃了,马上使用jmeter进行了压力测试,压了300个并发跑了一段时间,连上redis服务输入client list命令,查看已链接的客户端列表,发现没几个,打开日志发现在高并发时,初始化代码执行的并不多,也就是说使用uwsgi虽然造成了redis长链接需要经常创建,但global还是起到了一定的作用,没有产生很差的结果。

  由于redis要经常重新创建链接,担心它会影响性能所以对其中一个接口进行改造,一个使用redis读取数据,另一个直接读取postgresql数据库,然后对两个接口通过手动刷新页面方式进行反复访问后,查看接口日志占用的时间,发现刷新慢时,使用redis方式会占用比较多时间,而访问非常频繁时,反复调用一个长链接的机会会多很多,影响不大,两种方式访问的效果差不多。

  当然和没有使用uwsgi的开发环境与测试环境对比来看,redis要经常创建新链接会占用一定的开销,影响了部分性能。暂时还没有想到好的解决办法,先记录一下,以后有时间再尝试用其他方式测试看看效果。

 

版权声明:

  本文由AllEmpty原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如有问题,可以通过1654937@qq.com 联系我,非常感谢。

     发表本编内容,是为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:669058475,大家一起探讨。

    更多内容,敬请观注博客:

    本文转自 AllEmpty 博客园博客,原文链接:http://www.cnblogs.com/EmptyFS/p/6227690.html,如需转载请自行联系原作者

你可能感兴趣的文章
ffmpeg转码不同分辨率视频
查看>>
Oracle:查找表的主键,外键,唯一性约束,索引
查看>>
Redis中hash的理解
查看>>
oracle LOCAL=YES/NO on TNS Connections
查看>>
优秀程序员不得不知道的20个位运算技巧
查看>>
jQuery插件编写格式
查看>>
Mybatis 批量插入以及多参数批量删除
查看>>
grails的criteria实现复合查询并实现结果分页
查看>>
hibernate在ssh三大整合是的配置
查看>>
《Spring Cloud微服务实战》读书笔记
查看>>
golang gzip解压
查看>>
Struts2数据校验
查看>>
LVM 挂载笔记
查看>>
Qt 终端输出
查看>>
web服务器必备软件整理
查看>>
PHP效率计:从引号开始(单引号、双引号效率区别)
查看>>
Python Socket
查看>>
分布式消息订阅发布系统Apache Kafka本机环境搭建和简单测试
查看>>
迷之 crontab 异常:不运行、不报错、无日志
查看>>
php列出目录下所有文件带点击链接
查看>>