openfire压测概述

个月左右的测试,总算得到预定目标(3台服务器,并发50w用户在线)

测试环境搭建

压测客户端无他-tsung,尝试了windows安装perl失败后,使用centOS6.5作为压测机

压测服务器,因为集群需要大内存,因而安装了64位的centos6.7.

所幸这些都可以使用vmware虚拟机,只要装好一台,通过简单copy就能复制出多台.实际上,一共也就使用了6台硬件设备.

设备类别

台数

系统

虚拟机操作系统

说明

OF服务器

3

i54570,12G,Win7

CentOS6.7 8G

其中一台运行mysql数据库

tsung客户机

3

i54570,4G,Win7

CentOS6.5 1G

虚拟机1G内存,运行3个实例

jvisualvm+mat使用

如果不跑集群,其实openfire还是比较稳定的,单台4G内存情况下,也有运行到25W同时在线的情况。一旦用了hazelcast,反而不稳定了,出现问题就需要使用工具进行定位,看看哪里堵住了。

运行结果与心得:

0.千万不要用OpenJdk的虚拟机,官方推荐用CMS进行GC,那就老实点用JDK7.

1.openfire使用mina作为nio底层实现.实测一秒20-25个新连接还算稳定,超过30个就会堵住.(占用大量内存存储未处理的包-经查,时offlineMessage堵住,tsung去掉发送消息的,就快了)

2.openfire使用hazelcast的缓存机制实现集群。经过实际测试,这货太消耗内存了,20w连接大概需要4G的内存(包含mina连接需要的内存),加上还要互为主备的机制,至少还要1.5G才能实现集群的使用。测试至少要8G内存才行,实际使用推荐12G以上.

3.仅仅是压测同一台服务器,与同时压测多台情况大不相同,后期改进主要集中在数据库性能.(后期改进点-)

4.Linux内核修改limits.conf和net.nf_conntrack_max参数后性能有所提升。

程序优化点:

1.JVM配置优化:

需要自己修改openfire.sh,增加虚假机参数.(hazelcast插件有推荐配置,修改一下就行)

2.offlineMessageStore+squenceManager优化:

前面说过了,mysql最多支持每秒30个的NextID,实际运行offlineMessage会很多,修改使用redis保存离线消息。

3.hazelcast和openfire优化:

hazelcast本身就很多问题,例如一台设备内存满了或者处理超时,那么整个集群就没响应了。如果还是用hazelcast作为集群的缓存,需要剥离到单独的设备上去。

openfire用的是java的序列化,内存用的多,效率慢;hazelcast是支持自定义序列化的,经过比较,我用了kryo作为序列化工具,在对ClientSessionInfo,Roster,RosterItem,User这几个类优化后,内存使用明显小了很多。

SessionManager 把所有的clientSession都放到hashmap中,当用户变得非常大量时候,sessionInfoCache的操作必然影响效率。

4.登录流程简化:

xmpp的登录报文交互太多了,虽然tsung使用最简单的iqauth登录,实际使用还是需要简化登录流程,这点需要客户端配合。

优化openfire服务器,达到单机20万,集群50万的更多相关文章

  1. AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群(转)

    http://blog.sina.com.cn/s/blog_e59371cc0101br74.html 引言:        如今redis凭借其高性能的优势, 以及丰富的数据结构作为cache已越 ...

  2. 【web】 亿级Web系统搭建——单机到分布式集群

      当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架 ...

  3. [转]亿级Web系统搭建:单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  4. 亿级Web系统搭建:单机到分布式集群【转】

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  5. 亿级Web系统搭建:单机到分布式集群

    亿级Web系统搭建:单机到分布式集群 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压 ...

  6. [link] 构建负载均衡服务器之一 负载均衡与集群详解

    一.什么是负载均衡 首先我们先介绍一下什么是负载均衡: 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载, ...

  7. Redis安装(单机及各类集群,阿里云)

    Redis安装(单机及各类集群,阿里云) 前言 上周,我朋友突然悄悄咪咪地指着手机上的一篇博客说,这是你的博客吧.我看了一眼,是之前发布的<Rabbit安装(单机及集群,阿里云>.我朋友很 ...

  8. [转帖]当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?

    改天学习一下. https://www.cnblogs.com/alisystemsoftware/p/11570806.html   当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题 ...

  9. RabbitMQ的使用(二)- RabbitMQ服务在单机中做集群

    RabbitMQ的使用(二)- RabbitMQ服务在单机中做集群 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/128371 ...

随机推荐

  1. Mysql字符类型比较

    一. binary和char比较: binary 字节为单位,char字符为单位,字符占几个字节取决于字符集 binary  比较规则基于字节值,char基于字符,即使是_bin的比较规则 范围都0- ...

  2. 4T_进程与进程间通信

    ∮进程 进程与程序 进程与程序是有区别的.刚吃完炸鸡腿,拿出一张餐巾纸,擦完嘴之后,在油乎乎的纸上写下以下文字 #include <stdio.h> void main() { print ...

  3. DEM数据如何生成高程点

    这次给大家介绍一个arcgis里的实用功能:通过地形数据提取高程点. 首先做好准备工作: 1.地形数据下载获取 2.软件准备 locaspace viewer:http://rj.baidu.com/ ...

  4. SpirentTestcenter测试仪的自动化

    SpirentTestcenter,美国思博伦公司的网络测试仪表,覆盖以太网L2~L7层,使用过的仪表中功能最强大的. 1.SpirentTestcenter的自动化测试场景 测试PC上的AT框架-- ...

  5. 让ztree树默认是关闭的

    只需要在ztree的回调函数中加 var treeObj = $.fn.zTree.getZTreeObj("zTreeContent");treeObj.expandAll(tr ...

  6. windows7 编译boost1.54

    先去下载boost1.54 for windows原码.原来有个安装工具现在已经停止维护了,我试了旧版,已经安装不了. 这是它们的网站:http://www.boostpro.com/download ...

  7. 新版本eclipse Neon 4.6.1,登录git报401 没有权限

    新版本eclipse Neon 4.6.1,登录git报401 没有权限 经过查找原因竟然是新的eclipse需要进行update.比较坑,新版eclipse竟然需要先更新一下才能用! eclipse ...

  8. python基础知识---数据结构之间的转换

  9. [转载] Android随笔之——PackageManager详解

    本文转载自: http://www.cnblogs.com/travellife/p/3932823.html 参考:http://www.cnblogs.com/xingfuzzhd/p/33745 ...

  10. json_decode返回null 和synax error原因及处理

    $checkLogin ='[{"gdsincode":"1103293","gdsname":"鲜美来带鱼段800g" ...