- 浏览: 285078 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (103)
- 设计模式 (2)
- 开发环境搭建 (15)
- IM即时通讯 (13)
- 视讯和语音 (2)
- 使用要点 (4)
- 集群 (1)
- linux (14)
- FLEX (1)
- VLC (1)
- 学习笔记 (4)
- openfire (6)
- 负载均衡 (4)
- http (1)
- 工具类 (1)
- openfire smack ping (1)
- smack asmack (2)
- openfire 登录机制 (1)
- 线程池 (1)
- 服务器 (1)
- tomcat 数据库 (1)
- 切图 图片处理 等比例缩放 (1)
- 手机USB上网 (1)
- 内存数据库 memcached (1)
- memcached java client (2)
- 苹果推送 (1)
- sip (1)
- C (1)
- 抓包 (1)
- sip voip (6)
- JAVA 遍历文件夹 (1)
- linux 开发 (1)
- 虚拟网卡 (1)
- linux 压力测试 (1)
- 服务器监控 (1)
- msyql (1)
- 权限 (1)
- sipp (1)
- 网络监控 (1)
- 内存数据库 (1)
- 文件系统 (1)
- asmack 断网重连 (1)
- openstack (1)
- tcp (1)
- mongodb (1)
- java mongodb (1)
- nosql (1)
最新评论
-
a584138521:
按楼主的流程配置了,用spark输入用户名 密码 连结CM,显 ...
OPENFIRE CONNECTION MANAGER (openfire连接管理) -
wander_bird:
楼主,知道tigase怎样支持中文消息吗?
linux安装tigase -
七星6609:
大侠,我的怎么没有报文产生,我用的是asmack和openfi ...
openfire ping的smack解决方案 -
sunman5277:
貌似文件超过2G会报以下错误,请问该如何解决?Exceptio ...
JAVA获取文件MD5值 -
bluky999:
这个总结得比较全面,嗯,3种大的方式都有了。
openfire文件传输
Tsung负载测试Tigase
文档历史
日期 |
作者 |
版本 |
注释 |
2012/05/15 |
sina微博:weibo.com/csx1998 |
1.0 |
创建 |
|
|
|
|
|
|
|
|
一、 Tsung概述
tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种协议如xmpp,http,mysql,支持集群,高效率,可以用一台普通的机器压垮几台性能强大的服务器。
针对消息通知服务xmpp服务器,可以用tsung来测试消息通知服务能承受多大的压力。
在Ubuntu上装好tsung之后,首先要用ulimit修改系统支持的最大fd数量(ulimit -n 20480),否则tsung最多只能创建不到1024个连接,测试脚本是一个xml文件
详细参看:http://wenku.baidu.com/view/6fd5e6d126fff705cc170af2.html
二、 Tsung的安装
1、下载Tsung:
从Tsung的官方网站下载源代码(http://tsung.erlang-projects.org/dist/),目前最新的是tsung-1.4.1.tar.gz,这边安装的也是tsung-1.4.1.tar.gz ftp到服务器上解压
2、安装Tsung的依赖组件:
a、Erlang及相关组件(必装) :sudo apt-get install erlang erlang-nox erlang-dev erlang-parsetools
b、gnuplot、perl5及template模板(如果需要生成报表的话): sudo apt-get install perl5 gnuplot libtemplate-perl
3、编译Tsung
cd到Tsung的解压目录编译
./configure
make
sudo make install
4、编写tsung.xml配置文件
~/.tsung/tsung.xml为tsung默认的配置文件,在/usr/share/doc/tsung/examples/中有一些示例文件,如下:
可以参考jabber.xml文件来编写自己的tsung.xml
5、运行Tsung
tsung start 或者 tsung -f jabber.xml start运行后,tsung会将数据保存在~/.tsung/log/目录下,完整目录示例如下:/home/grape/.tsung/log/20120515-1636
6、生成报表
tsung运行完成后,进入~/.tsung/log/***/目录,然后运行 /usr/lib/tsung/bin/tsung_stats.pl,会生成html报表页面。
2.xmpp的Tsung.xml配置
编译Tsung后/usr/share/doc/tsung下包含测试的配置实例xml和tsung的用户手册user_manual.html
本次测试使用以下配置
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<!--如果use_controller_vm="false",那么每maxusers个连接后会创建一个新的erlangVM,maxuser默认是800 否则达到上限就不再创建连接 能打开了limits,就不要使用多个erlangVM,容易crash 需要执行ulimit -n 20480-->
<clients>
<!--可以配置多台客户端-->
<client host="localhost" use_controller_vm="true" maxusers="10000"></client>
</clients>
<!-- Server side setup配置服务器IP或域名-->
<servers>
<server host="192.168.3.242" port="5222" type="tcp"></server>
</servers>
<load>
<!--可以配置多个阶段相位,这边使用20分钟 也可以设置unit="minute"-->
<arrivalphase phase="1" duration="1200" unit="second">
<!--这边不是生成用户的时间间隔而,是总共尝试去连接的session数目,为了使所有用户都去连接,这边要计算出连接间隔 -->
<users maxnumber="12000" interarrival="0.1" unit="second"></users>
</arrivalphase>
</load>
<!-- JABBER parameters -->
<!-- to synchronise users, use a global acknoledgement -->
<options>
<option type="ts_jabber" name="global_number" value="10001"></option>
<!--总共账号数目,每个账号同时只登录一次-->
<option type="ts_jabber" name="userid_max" value="10000"></option>
<option type="ts_jabber" name="domain" value="test.rzico.net"></option>
<!--账号和密码后面加上 1 到 userid_max 个后缀 去xmpp服务器上授权-->
<option type="ts_jabber" name="username" value="chenshaoxian"></option>
<option type="ts_jabber" name="passwd" value="chenshaoxian"></option>
</options>
<sessions>
<!—probability值加起来要达到100 -->
<session probability="50" name="jabber-example" type="ts_jabber">
<request> <jabber type="connect" ack="no_ack"></jabber> </request>
<thinktime value="2"></thinktime>
<transaction name="authenticate">
<request> <jabber type="auth_get" ack="local"></jabber> </request>
<request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
</transaction>
<!-- "presence:initial" : connected -> online -->
<!-- "presence:final" : online -> connected-->
<request> <jabber type="presence:initial" ack="no_ack"/> </request>
<thinktime value="2"></thinktime>
<transaction name="roster">
<request> <jabber type="iq:roster:get" ack="local"></jabber></request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="online">
<request> <jabber type="chat" ack="no_ack" size="16" destination="online"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="offline">
<request> <jabber type="chat" ack="no_ack" size="56" destination="offline"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
<session probability="20" name="jabber-plain" type="ts_jabber">
<request> <jabber type="connect" ack="no_ack"></jabber> </request>
<thinktime value="2"></thinktime>
<transaction name="auth_plain">
<request> <jabber type="auth_get" ack="local"></jabber> </request>
<request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
<session probability="20" name="jabber-digest" type="ts_jabber">
<!-- regexp captures stream ID returned by server -->
<request>
<dyn_variable name="sid" re="<stream:stream id="(.*)" xmlns:stream"/>
<jabber type="connect" ack="local"></jabber>
</request>
<thinktime value="2"></thinktime>
<transaction name="auth_digest">
<request> <jabber type="auth_get" ack="local"></jabber> </request>
<request subst='true'> <jabber type="auth_set_digest" ack="local"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
<session probability="10" name="jabber-sipdigest" type="ts_jabber">
<request> <jabber type="connect" ack="no_ack"></jabber> </request>
<thinktime value="2"></thinktime>
<transaction name="auth_sipdigest">
<!-- regexp captures nonce value returned by server -->
<request>
<dyn_variable name="nonce" re="<Nonce encoding="hex">(.*)<\/Nonce>"/>
<jabber type="auth_get" ack="local"></jabber>
</request>
<request subst='true'> <jabber type="auth_set_sip" ack="local"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
</sessions>
</tsung>
3.Tsung报表分析
对报表参数不太了解可以试着参看服务器上的tsung的用户手册user_manual.html
或参看:http://tsung.erlang-projects.org/user_manual.html
一些常用的名词解析:
request:每个请求的反应时间
page:每一系列请求的反应时间(a page是一组不包含think-time的一组请求)
connect:连接建立用的时间
reconnect:重新连接的次数
size_rcv:反应的大小(单位是byte)
size_sent:请求的大小(单位是byte)
session:用户会话时间
users:同步用户数
connected:同步连接用户数
Tsung收集到监控数据后,会发送到数据统计进程。其实在会话进程运行时,也会产生大量的统计数据,比如发送了多个请求,执行了多个个事务(Tsung事务),通过网络发送了多少数据,收到多少数据等等。
根据手册中描述,Tsung的统计数据分为四类:sample,sample_counter,counter,sum。其中sample与sample_counter会每10秒计算一次统计项的平均值及其标准差,并写入文件;而counter是一个单纯的计数器,用在比如一共发送了多个请求这样的统计项上;sum统计项有一个累积的过程,例如HTTP响应的总大小。sample类型的数据写入的数据格式如下:
# stats:’name’ 10sec_count, 10sec_mean, 10sec_stdvar, max, min, mean, count
而counter类型的数据格式如下:
# stats:’name’ count(during the last 10sec), totalcount(since the beginning)
跟数据统计相关的模块主要有三个:ts_mon:提到数据统计的接口,监控数据的添加主要通过该模块中的接口来完成;ts_mon_cache:缓存,统计数据的内存写入由此模块完成;ts_stats_mon:将统计数据写入到文件。
添加一个统计项,一般的都通过调用ts_mon:add这个接口来完成,然后ts_mon:add会调用ts_mon_cache将统计项先写入内存。ts_mon_cache初始化是会定义一个定时器,每10秒会触发调用ts_stats_mon:add将10秒内的统计数据写入文件。
4.tigase服务器的调整
调整tigase.config配置文件,调整如下:
ENC="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
#DRV="-Djdbc.drivers=com.mysql.jdbc.Driver:org.postgresql.Driver:org.apache.derby.jdbc.EmbeddedDriver"
DRV="-Djdbc.drivers=org.postgresql.Driver"
GC="-XX:+UseBiasedLocking -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:ParallelCMSThreads=8"
JAVA_HOME="/home/zhangtc/share/jdk1.6.0_31"
CLASSPATH=""
JAVA_OPTIONS="${GC} ${ENC} ${DRV} -server -d64 -Xms1024M -Xmx2048M -XX:PermSize=64m -XX:MaxPermSize=256m -XX:MaxDirectMemorySize=128m "
TIGASE_CONFIG="etc/tigase.xml"
TIGASE_OPTIONS=" --property-file etc/init.properties --test"
调整init.properties配置文件,调整如下:
config-type=--gen-config-def
--admins=admin@test.rzico.net
--virt-hosts = test.rzico.net
--auth-db=tigase-auth
--user-db=mysql
--user-db-uri=jdbc:mysql://192.168.3.245:3306/tigasedb?user=root&password=123456
--user-repo-pool-size=12
--comp-name-1=srecv
--comp-class-1=tigase.server.sreceiver.StanzaReceiver
#--debug=server
#--monitoring=jmx:9050
编写数据库插入代码,在数据库插入相应的用户数据和相关联数据
原始tigase的负载能力,
报表地址如下:
http://192.168.3.242:8080/20120515-1513/report.html
Tigase和UIC使用数据库触发器关联的负载能力:
报表地址如下:
http://192.168.3.242:8080/20120516-1222/report.html(未做监控)
http://192.168.3.242:8080/20120516-1525/report.html
测试时间(20120516-1525到20120516-1545)
CPU、内存、网络监控图:



从图表可看出在242服务器(tigase未做群集的情况)下带20000个用户产生的负载是比较低的。
grape-sync完整集成tigase后, grape-sync负载能力,后续更新
发表评论
-
Linux TCP 连接数修改
2013-05-02 11:04 1153Linux TCP 连接数修改 一、 文件数 ... -
eclipse部署tigase源码
2012-09-19 15:19 75381 下载tigase源码一份 要用git下载,下载地址:g ... -
新的xmpp服务器,据说比openfire好
2012-06-13 14:44 1587http://www.tigase.org/ -
openfire查看进出包
2012-02-16 10:42 14391 监测发出包情况 在org.jivesoftware.o ... -
xmpp客户端集合
2012-02-13 17:00 12011 web im http://www.claros.or ... -
openfire文件传输
2012-02-10 10:24 8092* XEP-0096: File Transfer 这是 ... -
openfire cluster
2012-02-07 18:18 4033北京-超基-小月(123766134) 下午17:13 ... -
OPENFIRE CONNECTION MANAGER (openfire连接管理)
2012-02-07 15:31 13138自己配置了下CM(Connection Manager),基本 ... -
关于xiff设置TLS安全连接
2012-01-17 15:21 2402/**全局变量*/ private var _conn ... -
xmpp VCard处理
2012-01-14 12:23 14841 XEP-0153: vCard-Based Avatar ... -
Red5学习笔记
2011-11-23 22:32 11481 .Red5 + Openfire = Redfire2. ... -
收藏的openfire相关内容的网址
2011-11-23 22:27 12601 Openfire 离线消息的处理机制 2 Ope ...
相关推荐
### Tsung负载测试Tigase知识点详解 #### Tsung概述 Tsung是一款高效的压力测试工具,采用Erlang语言开发,能够支持多种网络协议,包括XMPP、HTTP、MySQL等。其独特的分布式特性使得它能够在单机环境下模拟大量...
7. **压力测试**:使用工具如Tsung进行负载测试,了解服务器在不同压力下的表现,为优化提供依据。 8. **代码优化**:针对热点代码进行性能调优,减少不必要的计算和资源消耗。 综上所述,Openfire和Tigase作为...
1. **负载测试**:使用如Tsung这样的工具进行压力测试,模拟大量用户并发连接,以评估服务器在高负载下的表现。 2. **资源优化**:合理分配硬件资源,如内存、CPU和磁盘I/O,确保服务器能有效处理并发连接。 3. **...
测试工具如 Tsung 可用于模拟大量用户登录和其他网络请求,以评估服务器性能。在单台服务器性能接近极限时,考虑集群部署。然而,Openfire 的集群解决方案可能存在稳定性问题,如 war 包插件和 Oracle 集群插件在高...
呼伦贝尔市-鄂温克族自治旗-街道行政区划_150724_Shp数据-wgs84坐标系.rar
内容概要:本文详细介绍了用于Cruise纯电动汽车仿真的输入模板,该模板由8个表单组成,覆盖了从整车参数到计算输出的各个方面。每个表单都包含了关键参数的设置方法及其背后的逻辑,如校核清单、整车参数、电池参数、电机参数、传动系参数、制动轮胎参数、能量回收参数以及最终的计算输出。文中不仅提供了具体的参数定义和计算公式,还附有Python代码示例,帮助用户更好地理解和应用这些参数。此外,作者还分享了一些实用技巧,如防止参数遗漏的校验函数、处理电池温度效应的实际容量计算函数等。 适合人群:从事纯电动汽车仿真工作的工程师和技术人员,尤其是那些需要频繁处理复杂输入参数的人群。 使用场景及目标:① 提高纯电动汽车仿真工作的效率和准确性;② 规范参数收集流程,减少因参数错误导致的仿真失败;③ 提供详细的参数设置指导和代码实现,帮助用户更好地理解和应用Cruise仿真平台。 其他说明:本文不仅提供了一个全面的输入模板,还分享了许多实践经验,旨在帮助用户在实际工作中少走弯路,提高工作效率。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:本文档是作者在bugku平台进行CTF(夺旗赛)杂项题目练习的解题思路总结,涵盖第25至33题。题目类型多样,包括但不限于隐写术、进制转换、音频分析、图像处理等。每道题都详细介绍了背景信息、解题步骤和所使用的工具,如Stegsolve用于图片隐写分析、Python脚本处理进制转换、Audacity解析音频中的摩尔斯电码等。通过这些实例,展示了如何运用各种技术手段解决实际问题,强调了理论与实践相结合的重要性。 适合人群:对信息安全、逆向工程感兴趣的读者,特别是有一定编程基础和技术积累的安全爱好者或初学者。 使用场景及目标:①学习隐写术的基本原理及其在CTF比赛中的应用;②掌握不同进制间的转换方法及其实现;③熟悉音频文件中提取摩尔斯电码的技术;④了解图像处理技巧,如调整尺寸、解析隐藏信息等;⑤掌握压缩文件的明文攻击技巧,以及如何利用已知信息破解加密文件。 阅读建议:由于每道题涉及的知识点较为独立且专业性强,建议读者根据自己的兴趣选择相关题目深入研究。同时,在学习过程中应注重动手实践,尝试复现文中提到的操作流程,并结合网络资源进一步拓展知识面。对于遇到的工具和概念,可以通过查阅官方文档或参考教程加深理解。
内容概要:本文详细介绍了如何在Qt中实现一个高效的时间标尺控件,重点讲解了时间标尺的缩放功能、刻度自动生成以及曲线绘制的技术细节。首先,通过重载wheelEvent方法,利用QGraphicsView框架实现了基于鼠标的缩放功能,确保缩放过程中鼠标位置对应的时间点不变。其次,针对不同的时间范围,采用对数分级算法自动调整刻度间隔,使刻度线既美观又实用。最后,在曲线绘制方面,使用QPainterPath进行路径构建,并通过预处理和分段绘制优化性能,确保即使面对大量数据点也能保持流畅的用户体验。 适合人群:具有一定Qt开发经验的程序员,尤其是从事数据可视化项目的开发者。 使用场景及目标:适用于需要展示时间序列数据的应用程序,如金融图表、监控系统、日志分析工具等。主要目标是提供一个响应迅速、视觉效果优秀的交互式时间标尺控件,帮助用户更好地理解和分析数据。 其他说明:文中还提到了一些性能优化的小技巧,如数据预处理、路径分段绘制等,有助于提高大型数据集的渲染速度。同时,作者强调了在时间转换函数中避免使用低效的方法,推荐自行实现高效的缓存机制。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
赤峰市-喀喇沁旗-街道行政区划_150428_Shp数据-wgs84坐标系.rar
内容概要:本文详细介绍了使用Python和LSTM(长短期记忆网络)进行时间序列预测的方法及其应用场景。首先阐述了时间序列预测的重要性,指出传统ARIMA模型在处理复杂模式和长期依赖关系时的局限性,进而引出LSTM的优势。LSTM通过引入门控机制(输入门、遗忘门、输出门)和记忆单元,有效解决了长期依赖问题,能更好地捕捉时间序列中的复杂模式。接着,文章详细讲解了LSTM的工作原理,包括各个门控机制的作用和计算流程。随后,通过股票价格预测和气温预测两个案例,逐步演示了从环境搭建、数据准备(包括数据读取、归一化处理)、模型构建(使用Keras搭建LSTM模型)、模型编译、训练与评估到预测结果可视化的全过程。最后,文章总结了LSTM的关键技术和实现要点,并展望了其在自然语言处理、计算机视觉、生物学等领域的应用前景及未来研究方向。 适合人群:具备一定编程基础,尤其是对深度学习和时间序列预测感兴趣的开发者、数据科学家和研究人员。 使用场景及目标:①帮助读者掌握LSTM的基本原理和工作流程;②提供详细的Python实现步骤,包括环境配置、数据处理、模型搭建与训练;③通过具体案例展示LSTM在时间序列预测中的应用,如股票价格预测和气温预测;④探讨LSTM在其他领域的潜在应用,如自然语言处理、计算机视觉和生物学等。 阅读建议:本文内容详尽,涵盖理论与实践两方面,建议读者在阅读过程中结合代码实践,逐步理解LSTM的工作原理和实现细节,特别是注意数据处理和模型参数的选择对预测效果的影响。
内容概要:本文详细介绍了基于三菱FX5U PLC的机床X轴和Y轴工作台定位控制系统的开发与优化过程。主要内容涵盖:使用J4-A系列伺服驱动器进行绝对位置控制,通过ST语言和结构化梯形图实现复杂的20组直线插补工序;手动模式下的点动与长按操作逻辑;MODBUS通讯协议的应用;以及详细的报警诊断和统计功能。文中展示了如何利用结构体封装参数,提高代码可读性和维护性,并通过具体案例解释了关键技术和调试经验。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉三菱PLC编程的从业者。 使用场景及目标:适用于需要深入了解三菱FX5U PLC编程技巧及其在实际工程项目中应用的人群。目标是掌握高级编程方法如结构化编程、ST语言特性、MODBUS通讯优化等,从而提升工作效率并减少调试时间。 其他说明:文章不仅提供了理论知识,还包括大量实用的编程技巧和实践经验分享,有助于读者更好地理解和应用于实际工作中。
大同市-大同市-街道行政区划_140200_Shp数据-wgs84坐标系.rar
内容概要:本文详细介绍了火电厂协调仿真机的应用及其优势,特别是在PID参数调试方面的高效性和安全性。文中通过具体的Python代码示例展示了如何构建锅炉和汽轮机的仿真模型,并解释了PID控制器的工作原理。重点讨论了PID参数调试的关键点,如响应延迟、采样时间设定以及前馈控制的叠加效果。此外,还提到了实时曲线对比、参数扫描、自整定算法等功能的实际应用,强调了仿真机在提高调试效率和降低现场调试风险方面的重要作用。 适合人群:从事火电厂自动化控制领域的工程师和技术人员,尤其是需要进行PID参数调试的专业人士。 使用场景及目标:① 提高PID参数调试效率,减少现场调试时间和成本;② 降低现场调试的安全风险;③ 实现更加精确和平稳的控制系统性能。 其他说明:文章不仅提供了理论指导,还结合了大量的实战经验和具体代码示例,帮助读者更好地理解和掌握协调仿真机的使用方法。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。