因还没能大概摸透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为妙。
分享到:
相关推荐
当不再需要使用连接时,记得正确关闭它: ```java connection.disconnect(); ``` 以上就是使用Smack连接ejabberd服务器并实现注册、登录和收发消息的基本步骤。在实际应用中,还需要考虑错误处理、连接状态管理、...
本文将深入探讨如何使用Smack库,一个Java实现的XMPP客户端库,来连接到Openfire服务器并进行交互。Smack简化了与XMPP服务器的通信,提供了丰富的API来处理用户认证、会话管理、消息发送和接收、以及用户状态等。 ...
已验证",这表示该版本的Smack库包含了一个演示应用程序,这个演示应用展示了如何使用Smack进行登录操作,并且这个登录功能已经得到了验证,意味着它可以正确地连接到XMPP服务器并完成用户身份的验证。 现在我们来...
"libs"目录包含了Smack的库文件,开发者可以将这些JAR文件添加到Android项目的依赖中,以便在项目中使用Smack的功能。通常,这些库文件包含了Smack的核心模块以及可能需要的额外模块,如XMPP连接管理、多用户聊天...
该文档中文版的出现,极大地便利了中国开发者理解和使用Smack,避免了语言障碍带来的困扰。在阅读这份文档时,我们可以深入学习以下几个关键知识点: 1. **XMPP协议基础**:首先,我们需要了解XMPP的基本概念,包括...
总之,Smack 4.1为Android开发者带来了极大的便利,他们可以直接使用官方库来实现XMPP功能,而无需依赖第三方的Asmack。这不仅提高了开发效率,还保证了应用的质量和安全性。通过深入理解和熟练使用Smack 4.1,...
4. **多线程处理**:考虑到即时通讯的实时性,Smack 使用事件驱动模型,通过异步回调处理接收的消息和事件,保证了高并发下的性能。 5. **XML解析与流处理**:由于XMPP基于XML,Smack 内置了高效的XML解析器,用于...
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
对于调试,Smack 提供了 `DEBUG_ENABLED` 静态变量,当设置为 `true` 时,将启用详细的日志输出,这对于追踪问题和理解底层通信流程非常有帮助。 除了基本的聊天功能,Smack 还支持更复杂的特性,如多用户聊天(MUC...
9. **错误处理**:在使用Smack时,可能出现网络中断、认证失败等问题,需要正确捕获和处理`XMPPException`、`SmackException`等异常。 10. **扩展性**:Smack支持自定义协议扩展,可以通过实现`ExtensionElement`...
10. **最佳实践**:分享一些使用Smack的最佳实践,以提高代码质量和性能,如连接池管理、资源管理等。 通过深入阅读和理解Smack的帮助文档中文版,开发者可以更好地掌握这个强大的工具,从而构建出高效、稳定的即时...
2. 错误处理:使用异常捕获来处理可能出现的网络错误或协议错误。 3. 安全性:考虑使用TLS加密连接以保护通信内容。 4. 性能优化:合理使用连接池和缓存策略,避免频繁建立和关闭连接。 5. 资源管理:及时关闭不再...
在使用Smack 3.2.2时,开发者首先需要建立与Openfire服务器的连接,然后创建XMPP实体(如用户),接着可以发送和接收消息。以下是一些基本步骤: 1. **导入Smack库**:将"smack_3_2_2"解压后,将包含的JAR文件添加...
在学习过程中,你可能会遇到一些挑战,比如连接问题、权限设置、多线程使用等。这时,除了参考文档外,还可以查阅Smack的官方更新日志和社区论坛,获取最新的解决方案和最佳实践。随着对Smack和XMPP的深入理解和实践...
在使用Smack4时,开发者通常需要一系列的依赖库来支持其功能,这些库可能并不全部包含在官方发布的jar包中。在构建非Maven的Java项目时,手动管理这些依赖可能会变得复杂。 官方提供的Smack4 jar包主要包括核心组件...
在“smack api帮助文档”中,我们可以找到关于如何使用Smack API的详细指南。这份文档通常包括以下几个部分: 1. **Javadoc**:这是Java开发者非常熟悉的文档格式,它包含了Smack API中所有类、接口、方法和常量的...
要使用Smack连接Openfire,首先需要确保你的开发环境已经安装了JDK8。然后,你需要获取相关的jar包,这些jar包通常包含在名为"lib"的压缩包文件中。"lib"文件夹内可能包括以下关键组件: 1. smack-core.jar:Smack...
比如,确保在合适的时机关闭连接以节省资源,使用异步操作以避免阻塞主线程,以及遵循Android的生命周期规则来管理Smack的实例。 总的来说,Smack 4.2.2为Android开发者提供了强大的XMPP功能,让构建IM应用变得简单...
在Android环境中,Smack API同样适用,但需要注意的是,由于Android系统的特性,可能需要对API进行一些调整,比如处理网络连接的生命周期管理,以及适配低功耗模式。Smack Android库提供了针对这些问题的解决方案。 ...