http://www.360doc.com/content/12/0601/16/9544_215230754.shtml

Openfire 性能优化
2012年05月28日 星期一 15:58

http://blog.csdn.net/smm11230704/article/details/7468010

Openfire  是一个XMPP协议的IM Server。

基于MINA的java nio服务器。

一般就是使用mysql来作为数据库,保存配置配置信息、离线信息、用户数据。

官网的数据是支持5000人同时在线,使用connectionManager可以实现支持3.3万人在线。

这数据一点都不漂亮,只能作为一个类似腾讯通的局域网聊天工具使用。

首先说点题外话,我测试用connectionManager。

这是一个openfire提供的连接管理器,作用其实是数据整流。

源码里是通过阻塞式多线程将信息通过特定端口与openfire提交数据。

测试之后的结果,这玩意严重影响效率,放弃,我们的目标不只是3.3万人。

Openfire使用mysql配合它不知所谓几乎无效的的Cache机制就注定无法支撑高并发,

所以第一步,将数据库切换为比较强一点的MongoDB。

但是MongoDB也是有问题的,在高并发时才会发现,MongoDB的锁表十分严重,

经过调查发现,MongoDB也比较坑爹,他是使用“全局锁”的,也就是说,你更新A表的时候,会锁住B表,数据更新后解锁。

所以作为实时查询数据库即使是使用MongoDB的master/slave模式依然不能胜任。

增加解决方案,缓存层,使用redis作为MongoDB的数据缓存,在访问时数据时,首先进入Cache层访问redis,如果没有,再去访问MongoDB,然后再回头填充Redis。

OK,数据源解决了,接下来确认需要在什么地方切入。

1,首先是将用户信息数据切换到MongoDB中。并停止Openfire自己的Roster服务,在管理控制台设置 xmpp.client.roster.active = false

2,AuthProvider,这里是登陆模块,可以继承接口重写一个属于自己的Provider。

重写authenticate方法,将登陆验证请求交给cache层。

3,离线信息的存储在之后也会成为负担,那么继承OfflineMessageStore类,重写属于自己的离线信息策略,将离线信息保存到Redis中。

4,重写状态更新的广播:PresenceUpdateHandler中的broadcastUpdate方法。

好了,这时候Openfire已经被修改的面目全非,但是效率已经不可同日而语了。

这时候还有一个问题,就是Openfire没有消息保障机制,也就是说,网络不稳定的时候,客户端异常断线,信息就会发送到空气中,

需要再发送信息的时候实现“握手机制”来保障信息的可靠性。不细说了,自己百度。

这时候Openfire的在线用户可以飚到6W无压力,但是死活上不去了,又被限制了。

在error.log中会发现类似 “open files too larger” 一类的错误,这些是linux系统参数:最大文件打开数。

在linux下执行ulimit -a就能观察最大的文件打开数,执行ulimit -n 350000设置为35万,然后kill掉openfire退出控制台,重新连接控制台使其生效,重新启动Openfire。

好吧,这时候用户量可以飙6W以上了。

XMPP服务器的测试工具,比较简单的可以使用tsung来实现,简单的配置,模拟成千上万的用户登陆,并且可以模拟HTTP等其他请求。

接下来就是单台服务器容量的问题了,我们服务器是Dell R710, 64G内存 16核CPU,15000转硬盘。

服务器在这种架构下在线用户数据在29W左右,几乎已经是单台Openfire封顶了。

开始考虑集群,不过Openfire的几种集群都测试过,效果不理想,有一个神马war包的插件,弄上去时好时坏,放弃。

还有一个oracle的集群插件,不过在高压下多台Openfire直接脱离集群,自己玩自己的了。。。日。

如果到了十万二十万左右的在线用户级别,就放弃掉Openfire,可以尝试使用tigase试试,尽管我没试过,不过看过源码,觉得还是比较可靠。

或者和我们一样,自己写通讯服务器。

转载于:https://my.oschina.net/vdroid/blog/171386

转 Openfire 性能优化相关推荐

  1. Openfire性能优化与压力测试小结

    Openfire配置: Ubuntu安装Openfire后性能极低,压力测试只能到4000在线用户数. 第一步 修改Openfire运行环境 通过ps -aux | grep openfire查看op ...

  2. Openfire 性能优化

    Openfire  是一个XMPP协议的IM Server. Openfire使用mysql配合它不知所谓几乎无效的的Cache机制就注定无法支撑高并发, 所以第一步,将数据库切换为比较强一点的Mon ...

  3. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  4. MegEngine推理性能优化

    MegEngine推理性能优化 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案 ...

  5. asp.net程序性能优化的七个方面

    asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...

  6. java criteria限制条数_java架构—Oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  7. ab测试nginx Nginx性能优化

    转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...

  8. RHEL/CentOS通用性能优化、安全配置参考

    RHEL/CentOS通用性能优化.安全配置参考 本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载.安全性要求的网络服务器环境.故可以放心使用. 若有异议,欢迎联系 ...

  9. Android开发——布局性能优化的一些技巧(一)

    0. 前言 上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布 ...

最新文章

  1. Linux学习(九)---磁盘分区、挂载
  2. python安装第三方库win10_在win里anaconda怎么安装第三方的库
  3. Oracle 重复数据查询以及删除
  4. CV_64F,CV_64FC1以及CV_64FC2
  5. java里面怎么添加表约束_alter table添加表约束
  6. 【Docker】 安装 Docker
  7. springboot启动时报错:Failed to load property source from location 'classpath:/application.yml'
  8. 深度揭秘铁路 12306 的架构
  9. apiDoc之api接口文档生成
  10. Bat批处理命令执行中文路径解决方法
  11. 维融高拍仪驱动通用_动态展示和教学 良田YL1050AF高拍仪评测
  12. web地图热力图理解
  13. pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
  14. 将数据库连接地址由localhost改为IP地址后无法访问的解决方法
  15. java转正自我陈述_试用期转正个人工作述职报告合集
  16. 计算机数值中的乘法除法原理
  17. 牛客网C语言 算学分绩
  18. GetKeyState函数详解
  19. 天冷了,这事儿要提上日程啦|独秀日记
  20. 因果推断(二)——混杂因子,D-分离,后门准则

热门文章

  1. c语言电子期末考试题,山东师范大学11-12电子C语言期末试题
  2. 组织配置java项目的外部lib包
  3. 版本名称GA的含义:SNAPSHOT-alpha-beta-release-GA
  4. Java 23种设计模式案例:原则及分类
  5. 2013长春区域赛总结
  6. 如何使 FlashGet 正常合法 下载 Session 中的自定义文件链接呢? JSP/Servlet 实现!
  7. 上海哪个图书馆营业时间最长
  8. AuthFailed at /social-auth/complete/facebook/
  9. some understanding of《Improved Use of Continuous Attributes in C4.5》
  10. 关闭sublime3自动更新(要输入license才会奏效)