2019独角兽企业重金招聘Python工程师标准>>>

rabbitmq-web-stomp 优化过程

基础环境

  • OS Centos 7 x86_64
  • Erlang 19.0.3
  • Rabbitmq 3.6.5

症状

  1. OA系统显示有2200个人在线,但是Rabbitmq的连接数一直小于1300

  2. IE8下会频繁出现连接错误的异常,重启rabbitmq后能够正常运行30分钟左右,问题重复出现

参考代码:

   var stompClient=null;function stompConnect(){var ws=new SockJS('http://localhost:15674/stomp');stompClient=Stomp.over(ws);stompClient.connect('guest','guest',on_connected,on_error,'test');}var on_connected=function(result){if(stompClient!=null){stompClient.subscribe(pattern,function(body){//todo })}}var on_error=function(x){setTimeout(stompConnect,10000);}stompConnect();

当用户少的时候可能正常运行到on_connected,随着用户的增加部分用户会丢失与rabbitmq的连接,频繁的执行on_error方法

优化过程

  • 查看系统的并发数量
root@alice:~ # netstat -an | awk '/^tcp/ { ++S[$NF]} END { for (a in S) print a, S[a]}'
LISTEN 19
ESTABLISHED 1674
FIN_WAIT1 1
FIN_WAIT2 537
TIME_WAIT 5295

并发数比较符合预期,OA系统的在线用户数在2200左右

  • 查看15674端口打开的文件数数量

与15674端口建立连接的数量,OA系统的用户是通过web_stomp与rabbitmq进行交互

root@alice:~# lsof -i:5674|grep 'TCP'|wc -l
1034

经过多次执行 lsof -i:5674|wc -l发现这个数字永远小于等于1034OA系统2200在线用户的规模应该有可能会超过这个数值才对(猜测)

  • 查看rabbitmq的错误日志
root@alice:~# tail /data/rabbitmq_server-3.6.5/var/log/rabbitmq/rabbit@alice.log -n 1000|grep 'ERROR' -B 2 -A 2
Error in process <0.12547.685> on node 'rabbit@alice' with exit value: {[{reason,{badmatch,{error,timeout}}},{mfa,{sockjs_cowboy_handler,handle,2}},{stacktrace,[{sockjs_http,body,1,[{file,"src/sockjs_http.erl"},{line,36}]},{sockjs_action,xhr_send,4,[{file,"src/sockjs_action.erl"},{line,144}]},{sockjs_handler...

官方文档描述了有关的web stomp和Ranch的配置,怀疑是不是因为Ranch的参数配置导致15674端口使用最大只能有1034个连接

Ranch配置有关的配置项似乎没有与连接数有关的配置。

Ranch 1.3 User Guide关于concurrent connections描述了最大连接数的限制

The max_connections transport option allows you to limit the number of concurrent connections.It defaults to 1024. Its purpose is to prevent your system from being overloaded and ensuring all the connections are handled optimally.
Customizing the maximum number of concurrent connections{ok, _} = ranch:start_listener(tcp_echo, 100,ranch_tcp, [{port, 5555}, {max_connections, 100}],echo_protocol, []
).You can disable this limit by setting its value to the atom infinity.
Disabling the limit for the number of connections{ok, _} = ranch:start_listener(tcp_echo, 100,ranch_tcp, [{port, 5555}, {max_connections, infinity}],echo_protocol, []
).The maximum number of connections is a soft limit. In practice,
it can reach max_connections + the number of acceptors.When the maximum number of connections is reached, Ranch will stop accepting connections.This will not result in further connections being rejected, as the kernel option allows queueing incoming connections. The size of this queue is determined by the backlog option and defaults to 1024. Ranch does not know about the number of connections that are in the backlog.

文中描述了max_connections是一个软的限制,实际限制是max_connections+acceptors的数量,acceptors默认是10所以通过

lsof -i:15674|grep TCP|wc -l

获取的值是1034

1034=1024(max_connections)+10(acceptors)

至此,可以通过设定max_connections来增加rabbitmq_web_stomp的并发限制

[{rabbit,[{hipe_compile,true},{dis_free_limit,"5GB"}]},{rabbitmq_web_stomp,[{tcp_config,[{backlog,3000},{max_connections,5000}]}]}
].

将最大连接数增加到5000,比较遗憾的是Ranch配置选项中没有明确指出max_connectioins的配置,导致走了不少弯路

优化结果

修改配置重启RabbitMQ服务后,不断监控日志的情况及15674端口的连接数量,比较正常

lsof -i:15674|grep TCP|wc -l
1683root@alice:~# tail /data/rabbitmq_server-3.6.5/var/log/rabbitmq/rabbit@alice.log -n 1000|grep 'ERROR' -B 2 -A 2

无错误信息

总结

  • 新系统上线对负载预估不足
  • 对RabbitMQ熟悉程度有待加强

转载于:https://my.oschina.net/hulingfeng/blog/892352

rabbitmq-web-stomp 优化过程相关推荐

  1. WEB前端优化之内容篇

    WEB前端优化之内容篇 Web前端优化过程中难免对相关的前台内容进行重新安排.其中主要的一些点如下: 1尽量减少 HTTP 请求 (Make Fewer HTTP Requests) 作为第一条,可能 ...

  2. php stomp rabbitmq,rabbitmq-web-stomp 优化过程

    rabbitmq-web-stomp 优化过程 基础环境 OS Centos 7 x86_64 Erlang 19.0.3 Rabbitmq 3.6.5 症状 OA系统显示有2200个人在线,但是Ra ...

  3. Web前端优化最佳实践及工具集锦

    摘要:前端的性能对于Web应用的用户体验来说非常重要.不要以为你的Web应用的性能已经足够好了,其实还会有很多可以提升的地方.本文将介绍Google和雅虎关于前端优化的最佳实践以及工具,你可以逐一检验 ...

  4. [译]Web 性能优化: 图片优化让网站大小减少 62%

    这是 Web 性能优化的第二篇,上一篇在下面看点击查看: Web 性能优化: 使用 Webpack 分离数据的正确方法 图像是web上提供的最基本的内容类型之一.他们说一张图片胜过千言万语.但是如果你 ...

  5. 《响应式Web设计性能优化》一2.1 性能度量基础

    本节书摘来异步社区<响应式Web设计性能优化>一书中的第2章,第2.1节,作者: [美]Tom Barker 译者: 余绍亮 , 丁一 , 叶磊 责编: 赵轩,更多章节内容可以访问云栖社区 ...

  6. 【Elasticsearch】Kibana优化过程(Optimize)过长或无法结束的解决方案

    1.概述 转载:Kibana优化过程(Optimize)过长或无法结束的解决方案 使用过Kibana的同学应该都知道,当我们在kibana的配置文件中打开或者关闭功能,或者安装.卸载额外的插件后,重启 ...

  7. 你不知道的 Web 性能优化 | 原力计划

    作者 | 左右同学 责编 | 屠敏 出品 | CSDN 博客 你遇到过打开一个网站需要10秒以上的吗?这种网页响应非常缓慢,占用大量的CPU和内存,浏览起来常常有卡顿,页面的动画效果也不流畅.你会有什 ...

  8. 《响应式Web设计性能优化》一2.3 Web运行时性能

    本节书摘来异步社区<响应式Web设计性能优化>一书中的第2章,第2.3节,作者: [美]Tom Barker 译者: 余绍亮 , 丁一 , 叶磊 责编: 赵轩,更多章节内容可以访问云栖社区 ...

  9. Web前端优化最佳实践及工具集锦(如减少页面加载时间)

    前端的性能对于一个Web应用来说非常重要,如果一个Web应用的页面加载速度非常快.对于用户的操作可以及时响应,那么产品的用户体验将会极大地提升.下图显示了页面加载速度对于用户体验的影响. 你的Web页 ...

  10. 干货 | Web前端优化及工具集锦

    原文地址:http://www.csdn.net/article/2013-09-23/2817020-web-performance-optimization   前端的性能对于一个Web应用来说非 ...

最新文章

  1. 在数组中查找一个数并输出所处位置
  2. matlab反馈模型,—倒立摆状态反馈系统的建模及matlab仿真.docx
  3. CodeForces - 833B The Bakery
  4. 3.Lucene3.x API分析,Director 索引操作目录,Document,分词器
  5. 什么是Angular的Target
  6. 【CentOS 7笔记4】,两种修改密码方式#
  7. ubuntu上网慢的问题
  8. 使用 dotnet-monitor 在 Kubernetes 中收集 .NET metrics
  9. On Comparing Side-Channel Preprocessing Techniques for Attacking RFID Devices
  10. linux python json,在Python中使用JSON
  11. 从M个数中随机等可能的取出N个的问题
  12. 副业宝典~副业思维让你拥有更多钱
  13. 坐标转换 | 高斯坐标转经纬度坐标
  14. 什么是SSR(服务器渲染)
  15. Windows字符和字符串处理
  16. java屏蔽虚拟按键代码_Android虚拟按键 Recent键屏蔽(隐藏)
  17. ctrypto-js中,DES解密的iv向量处理
  18. 基于STM32设计的健康检测设备(测温心率计步)
  19. js将 每个单词的首字母大写
  20. 微信小程序【网易云音乐实战】(第六篇 歌曲搜索、自定义模板、分包)

热门文章

  1. SQL 宝典(本人总结供学习使用)
  2. Matlab将double类型转换为正整数类型
  3. 【keras】数据增强之---ImageDataGenerator
  4. Android studio java.lang.UnsatisfiedLinkError加载.so文件失败解决办法
  5. 统计信号处理知识点总结_统计信号处理-简单看看克拉美罗界
  6. HTTP异步链接池发送HTTP外部请求,获取本地ip导致HTTP外部请求很慢怎么解决?
  7. Java设计模式------单例模式
  8. JavaEE学习02--HTTP协议
  9. 看看别人后端API接口写得,那叫一个优雅!
  10. 就问你慌不慌:每天都有 一百万 程序员在投简历