关于redis在高并发下的性能分析


关于redis在高并发下的性能分析

前言:

最近上手了一个项目,我负责该项目的架构设计与实现。本来公司做了很多给公司以外的人使用的API,但是在外人使用的时候,接口的链接是怎样就给别人怎么样,没有加密也没有做并发控制,接口程序所在的机器在哪,给别人的IP就在哪,而且没有平台进行管理。因此我清楚地知道,这些接口的价值很难被发现(哪个接口别人用的比较多,哪个接口别人用的比较少)。

仅仅针对”监控“的这一需求,我们引入了redis作为中间层,首先我们完善了用户使用接口的注册流程,通过用户信息和地址,hash出一个key,这个key是对应着一个地址的,把这个(key - 地址)对存在了redis里面。其次是nginx,nginx在我们的项目里面的流程大概是这样:

1、用户注册之后获取到他的key,通过包含了key的跟原本的url完全不同的url来访问

2、nginx捕获到用户特殊的key,然后程序根据这个key从redis中取出目标地址,再由nginx代替用户访问真正的地址,继而返回。

(这个过程好处是很多的)

(1)、隐藏了真实的地址,程序可以在上游服务器之外的地方干预用户的访问,提高安全性,干预过程可以很复杂

(2)、获取用户的信息,并将其存回redis,上游服务器通过定时程序将存在redis中的日志持久化进oracle并删除,然后进一步分析和可视化

问题来了

这个项目还处于测试阶段,资源是一台window server 服务器,和centos6.5服务器,测试阶段10秒内大概有10万的并发量,刚部署上去的一两天还是没有问题的,接下来却出现了redis连接不上的情况。查看进程访问,会出现下面的情况。(window server 下)

f615e3ef666cdb74e05633d0284a848.png

出现很多FiN_WAIT_2的TCP链接。

(学习视频分享:redis视频教程)

分析

一、redis是使用单线程处理连接的,意味着它绝对会出现下面二所说的情况。

二、很明显这是由于nginx和redis之间有很多没有释放的资源造成的,查看这个TCP的状态FIN_WAIT_2,解释一下:

在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash。 

好吧,大学没有好好念书,下面是http连接的状态变化

客户端状态迁移

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSEDb.

服务器状态迁移

CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

有缺陷的客户端与持久连接

有一些客户端在处理持久连接(akakeepalives)时存在问题。当连接空闲下来服务器关闭连接时(基于KeepAliveTimeout指令),

客户端的程序编制使它不发送FIN和ACK回服务器。这样就意味着这个连接 将停留在FIN_WAIT_2状态直到以下之一发生:

预订宝酒店预订系统 预订宝酒店预订系统

预订宝酒店预订系统是预订宝旅游电子商务团队集6年行业运营经验和雄厚的技术实力,历经一年时间,开发完成的一套功能强大、性能卓越的在线酒店预订解决方案。10分钟轻松搭建完全属于自己的酒店预订网站!预订宝酒店预订系统是开源、免费的,依托我们非常强势的上游支持,该系统拥有如下的几大特色:丰富的签约酒店资源:系统集成20000余家酒店资料,并提供房价与房态实时同步更新与维护。全面的网站管理功能:系统提供全面

预订宝酒店预订系统 0 查看详情 预订宝酒店预订系统

客户端为同一个或者不同的站点打开新的连接,这样会使它在该个套接字上完全关闭以前的连接。

用户退出客户端程序,这样在一些(也许是大多数?)客户端上会使操作系统完全关闭连接。

FIN_WAIT_2超时,在那些具有FIN_WAIT_2状态超时设置的服务器上。

如果你够幸运,这样意味着那些有缺陷的客户端会完全关闭连接并释放你服务器的资源。

然而,有一些情况下套接字永远不会完全关闭,比如一个拨号客户端在关闭客户端程序之前从ISP断开。

此外,有的客户端有可能空置好几天不创建新连接,并且这样在好几天里保持着套接字的有效即使已经不再使用。这是浏览器或者操作系统的TCP实现的Bug。

  产生原因有: 

1、长连接并且当连接一直处于IDLE状态导致SERVERCLOSE时,CLIENT编程缺陷,没有向SERVER 发出FIN和ACK包 

2、APACHE1.1和APACHE1.2增加了linger_close()函数,前面的帖子有介绍,这个函数可能引起了这个问题(为什么我也不清楚)

  解决办法: 

1。对FIN_WAIT_2状态增加超时机制,这个特性在协议里没有体现,但在一些OS中已经实现 

如:LINUX、SOLARIS、FREEBSD、HP-UNIX、IRIX等 

2。不要用linger_close()编译 

3。用SO_LINGER代替,这个在某些系统中还能很好地处理 

4。增加用于存储网络连接状态的内存mbuf,以防止内核crash 

5。DISABLE KEEPALIVE 

针对这种情况,我们做了几次讨论,有些结论,分别是:

1、设置nginx与redis的连接池,keepalive的时间,分别设为10秒,5秒,但是结果还是一样

2、不用keepalive,即不使用连接池,即每次用完就close()掉,你可以看到连接少了,但是不使用连接池,意味着10秒内要打开关闭10万次,开销太大

3、redis集群,在原本集群的体系上添加redis的集群,这或许能解决问题,但是10秒内10万实际上并不多,这样做了或许是取巧,并没有找到问题

4、设置redis的idle(空闲)时间限制,结果一样。

解决方案:

实际上不算解决方案,因为放弃了redis的内存机制,而是使用nginx本身的内存技术。网上关于redis的优化大部分不适用,这个问题有待分析解决。

相关推荐:redis数据库教程

以上就是关于redis在高并发下的性能分析的详细内容,更多请关注其它相关文章!


# 高并发  # 性能  # 客户端  # 酒店预订  # 这是  # 这个问题  # 解决问题  # 会使  # redis  # 服装营销策划推广文案  # 合肥seo排名方案  # 企业网站建设综合  # 海南网站建设工作内容  # 杭州抖音seo制作公司  # 新区企业推广营销  # 做关键词排名地址  # 策划全网营销推广效果图  # 靖歌阁seo教学  # 网站推广续费的请示  # 自己的  # 如何实现  # 网络带宽  # 连接池 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 苹果官网国补入口在哪  冬季去哪个城市旅游更有可能观测到极光  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  优化响应式标题底部边框:CSS实现技巧与最佳实践  word文档行距怎么调?word文档调行距的操作步骤  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  深入理解Python对象引用与链表属性赋值  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  《健康大兴》注册方法介绍  J*aScript事件处理:优化键盘输入与表单提交的实践指南  yy漫画官方网站登录入口_yy漫画在线阅读页面地址  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  《幻兽帕鲁》手游帕鲁捕捉技巧分享  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  解决Go encoding/json 将JSON大数字解析为浮点数的问题  行者app怎样导出日志  WooCommerce 新客户订单自动添加管理员备注教程  嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】  创客贴登录页面入口 创客贴网页版最新网址链接  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  支付宝网页版在线入口 支付宝官网电脑登录入口  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  暴风影音官网正式版_暴风影音手机版官网下载安卓  教资成绩怎么查询  CSS过渡与滚动滚动事件结合应用_scroll与transition动画  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  江苏大剧院会员卡购买步骤  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  性能与资源监视器快捷打开  4399造梦西游3无敌版_4399游戏入口  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  Go App Engine 项目结构与包管理深度指南  解决SQLAlchemy模型跨文件关联的Linter兼容性指南  英雄联盟争者留名活动介绍  ao3入口镜像地址 ao3镜像入口可靠跳转  AO3永久镜像入口开放_AO3最新网址兼容所有浏览器  《顺丰同城骑士》查看我的技能方法  PHP多语言网站的实现:会话管理与翻译函数优化教程  如何在CSS中使用伪类选择器_hover实现悬停效果  全球各国上班时间表外贸邮件时间  《雷电模拟器》自动点击设置方法  4399小游戏下装链接 4399小游戏下载链接入口  更换小红书群背景怎么换?小红书群规则怎么设置?  如何用Golang优化微服务间请求性能_Golang 微服务请求性能优化方法  Python中对象引用与链表属性赋值的机制解析  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  Final Cut Pro视频加EQ教程  b站如何剪辑视频_b站必剪app使用教程  Go Template中优雅处理循环最后一项:自定义函数实践 

 2021-03-08

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.