`
lydawen
  • 浏览: 471645 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用smack模拟大并发连接出现的一些问题

阅读更多

因还没能大概摸透tsung,对openfire的紧急性能测试只能写代码使用smack来测了,期间出现了一些问题。

1、因smack连接openfire中阻塞的,原本想象的多线程同时创建连接失败了。

 

2、在PC上模拟,压到800多一点就连不上了,查看openfire gc信息发现full GC频繁,永久区满了,于是把openfire启动脚本中的INSTALL4J_ADD_VM_PARAMS=注释去掉,并改为INSTALL4J_ADD_VM_PARAMS=-Xms24g -Xmx24g -Xmn8g -XX:MaxPermSize=1g -XX:PermSize=1g 做个简单的配置,改了配置后gc少了,但到800多还是出问题,后来想了想,是linux默认打开文件数的问题(跟踪打开文件数也确定了问题),ulimit -a看了下还是默认的1024,使用ulimit -n 800000改后就好了。

 

3、在pc上模拟,java内存配置得也算不小了,但是压到1000多就出现了内存溢出,于是决定到另一台强力服务器(32g ram)上运行。

 

4、打成jar在服务器上运行发现加classpath还是无法找到依赖包,解决见:http://lydawen.iteye.com/blog/1073321

在服务器上运行时,出现异常:

 

javax.net.ssl.SSLKeyException: RSA premaster secret error

        at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(Unknown Source)

        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(Unknown Source)

        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)

        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)

        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)

        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)

        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)

        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)

        at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:806)

        at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:267)

        at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)

        at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)

Caused by: java.security.NoSuchAlgorithmException: SunTlsRsaPremasterSecret KeyGenerator not available

        at javax.crypto.KeyGenerator.<init>(DashoA13*..)

        at javax.crypto.KeyGenerator.getInstance(DashoA13*..)

        at com.sun.net.ssl.internal.ssl.JsseJce.getKeyGenerator(Unknown Source)

        ... 13 more

经查发现在pc机上运行是使用eclipse来跑的,它自动把一些安全相关的jar放到classpath,于是把这一堆jar也复制到依赖包目录就好了。这些安全相关的包是:java_home\jre\lib\ext 下的包。

 

使用服务器也只连到9000多,测试机还是内存溢出,估计对jvm参数再做调整也不会有太大改观,且需要再优化测试程序,还是赶紧熟悉tsung为妙。

 

分享到:
评论
3 楼 bluky999 2012-03-13  
lydawen 写道
见我的openfire压力测试,使用tsung集群
bluky999 写道
LZ除了用smack自己写多线程登录外,还有其他测试方法或方案么? 我也在做类似的工作 

见我的openfire压力测试,使用tsung集群

  我也一试!
2 楼 lydawen 2012-03-13  
见我的openfire压力测试,使用tsung集群
bluky999 写道
LZ除了用smack自己写多线程登录外,还有其他测试方法或方案么? 我也在做类似的工作 

见我的openfire压力测试,使用tsung集群
1 楼 bluky999 2012-03-12  
LZ除了用smack自己写多线程登录外,还有其他测试方法或方案么? 我也在做类似的工作 

相关推荐

    Android使用smack连接ejabberd服务器注册、收发消息

    当不再需要使用连接时,记得正确关闭它: ```java connection.disconnect(); ``` 以上就是使用Smack连接ejabberd服务器并实现注册、登录和收发消息的基本步骤。在实际应用中,还需要考虑错误处理、连接状态管理、...

    基于smack连接openfire服务器的例子-JAVA

    本文将深入探讨如何使用Smack库,一个Java实现的XMPP客户端库,来连接到Openfire服务器并进行交互。Smack简化了与XMPP服务器的通信,提供了丰富的API来处理用户认证、会话管理、消息发送和接收、以及用户状态等。 ...

    smack4.1.4 android 测试通过

    已验证",这表示该版本的Smack库包含了一个演示应用程序,这个演示应用展示了如何使用Smack进行登录操作,并且这个登录功能已经得到了验证,意味着它可以正确地连接到XMPP服务器并完成用户身份的验证。 现在我们来...

    smack4.3.1

    "libs"目录包含了Smack的库文件,开发者可以将这些JAR文件添加到Android项目的依赖中,以便在项目中使用Smack的功能。通常,这些库文件包含了Smack的核心模块以及可能需要的额外模块,如XMPP连接管理、多用户聊天...

    Smack文档中文版

    该文档中文版的出现,极大地便利了中国开发者理解和使用Smack,避免了语言障碍带来的困扰。在阅读这份文档时,我们可以深入学习以下几个关键知识点: 1. **XMPP协议基础**:首先,我们需要了解XMPP的基本概念,包括...

    smack android

    总之,Smack 4.1为Android开发者带来了极大的便利,他们可以直接使用官方库来实现XMPP功能,而无需依赖第三方的Asmack。这不仅提高了开发效率,还保证了应用的质量和安全性。通过深入理解和熟练使用Smack 4.1,...

    smack 3.2.2

    4. **多线程处理**:考虑到即时通讯的实时性,Smack 使用事件驱动模型,通过异步回调处理接收的消息和事件,保证了高并发下的性能。 5. **XML解析与流处理**:由于XMPP基于XML,Smack 内置了高效的XML解析器,用于...

    smack4.1.6连接openfire,tigase,ejabberd所需jar包

    jxmpp-core-0.5.0-alpha7 jxmpp-util-cache-0.5.0-alpha7 smack-android-4.1.6 smack-core-4.1.6 smack-extensions-4.1.6 smack-im-4.1.6 smack-sasl-provided-4.1.6 smack-tcp-4.1.6

    基于xmpp_openfire_smack开发之smack类库介绍和使用

    对于调试,Smack 提供了 `DEBUG_ENABLED` 静态变量,当设置为 `true` 时,将启用详细的日志输出,这对于追踪问题和理解底层通信流程非常有帮助。 除了基本的聊天功能,Smack 还支持更复杂的特性,如多用户聊天(MUC...

    smack_3_3_0

    9. **错误处理**:在使用Smack时,可能出现网络中断、认证失败等问题,需要正确捕获和处理`XMPPException`、`SmackException`等异常。 10. **扩展性**:Smack支持自定义协议扩展,可以通过实现`ExtensionElement`...

    Smack帮助文档中文版

    10. **最佳实践**:分享一些使用Smack的最佳实践,以提高代码质量和性能,如连接池管理、资源管理等。 通过深入阅读和理解Smack的帮助文档中文版,开发者可以更好地掌握这个强大的工具,从而构建出高效、稳定的即时...

    smack-jar包

    2. 错误处理:使用异常捕获来处理可能出现的网络错误或协议错误。 3. 安全性:考虑使用TLS加密连接以保护通信内容。 4. 性能优化:合理使用连接池和缓存策略,避免频繁建立和关闭连接。 5. 资源管理:及时关闭不再...

    smack_3_2_2.zip

    在使用Smack 3.2.2时,开发者首先需要建立与Openfire服务器的连接,然后创建XMPP实体(如用户),接着可以发送和接收消息。以下是一些基本步骤: 1. **导入Smack库**:将"smack_3_2_2"解压后,将包含的JAR文件添加...

    smack中文文档

    在学习过程中,你可能会遇到一些挑战,比如连接问题、权限设置、多线程使用等。这时,除了参考文档外,还可以查阅Smack的官方更新日志和社区论坛,获取最新的解决方案和最佳实践。随着对Smack和XMPP的深入理解和实践...

    Smack4的一些依赖jar包(包括官方提供,和官方不提供但是必须的)

    在使用Smack4时,开发者通常需要一系列的依赖库来支持其功能,这些库可能并不全部包含在官方发布的jar包中。在构建非Maven的Java项目时,手动管理这些依赖可能会变得复杂。 官方提供的Smack4 jar包主要包括核心组件...

    smack api帮助文档

    在“smack api帮助文档”中,我们可以找到关于如何使用Smack API的详细指南。这份文档通常包括以下几个部分: 1. **Javadoc**:这是Java开发者非常熟悉的文档格式,它包含了Smack API中所有类、接口、方法和常量的...

    smack连接openfire用到的jar包

    要使用Smack连接Openfire,首先需要确保你的开发环境已经安装了JDK8。然后,你需要获取相关的jar包,这些jar包通常包含在名为"lib"的压缩包文件中。"lib"文件夹内可能包括以下关键组件: 1. smack-core.jar:Smack...

    smack4.2.2jar包

    比如,确保在合适的时机关闭连接以节省资源,使用异步操作以避免阻塞主线程,以及遵循Android的生命周期规则来管理Smack的实例。 总的来说,Smack 4.2.2为Android开发者提供了强大的XMPP功能,让构建IM应用变得简单...

    Smack API java的类库

    在Android环境中,Smack API同样适用,但需要注意的是,由于Android系统的特性,可能需要对API进行一些调整,比如处理网络连接的生命周期管理,以及适配低功耗模式。Smack Android库提供了针对这些问题的解决方案。 ...

Global site tag (gtag.js) - Google Analytics