我在代理服务器上启用了SSL,发现性能从每秒17k个请求下降到每秒5k个请求。 我遵循了Netty安全聊天示例中的代码,我认为我没有做任何不同的事情。
我已经编写了一个虚拟服务器,以查看我的代理是否犯了一些错误。 在正常的http模式下运行虚拟SSL服务器每秒能够发出大约50k的请求。 当我在虚拟服务器上启用SSL时,该服务器每秒会下降到28k个请求。
我做错了什么吗? 我错过了什么吗?
我正在使用JDK 6来编译代码,运行在JDK 7u4上。 我也在使用Netty-3.5.0。我正在使用宙斯台来运行测试。 测试参数为:宙斯台 -n 10000 -c 100 -k -C RC4_SHA "https:///"
来源:http://pastebin.com/iahqr3zT
编辑1:我已经通过JProfiler运行了虚拟服务器。管道工厂中的 SSLContext.createSSLEngine 调用(平均)需要 55,005 微秒(该平均值是根据该方法的 540 次调用计算得出的)。
channelConnected 中的 SslHandler.handshake 调用(平均)需要 46,284 微秒(该平均值是根据该方法的 540 次调用计算得出的)。
我知道Netty对创建SSLEngine的调用无能为力,但是SslHandler.handshake可以更好地调整吗? 它花费的时间几乎与发动机本身的生成一样长。
使用 java 的加密/解密真的很慢。
您不应该使用 带有 java 的 SSL 实现来提高性能.
有几种方法可以避免 Java for SSL 连接:
- 配置代理服务器,在您的前面提供SSL连接爪哇服务器
- 通过 jni 在 netty 代码中使用 ssl 握手库
您可以尝试对现有连接重用 SSL 会话,这样可以减少 SSL 握手,并应该会给您带来一般的提升。