6

我在代理服务器上启用了 SSL,发现性能已经从每秒 17k 请求下降到每秒 5k 请求。我遵循了 Netty 的安全聊天示例中的代码,我认为我没有做任何不同的事情。

我写了一个虚拟服务器,看看我是否在代理上犯了一些错误。在正常 http 模式下运行虚拟 SSL 服务器每秒可以处理大约 50k 请求。当我在虚拟服务器上启用 SSL 时,每秒请求数下降到 28k。

有什么我做错了吗?有什么我想念的吗?

我正在使用 JDK 6 编译代码,在 JDK 7u4 上运行。我也在使用 Netty-3.5.0。我正在使用 zeusbench 运行测试。测试参数为:zeusbench -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 对 createSSLEngine 的调用无能为力,但是 SslHandler.handshake 可以调整得更好吗?它所花费的时间几乎与发动机本身的生成时间一样长。

4

2 回答 2

0

使用 java 的加密/解密真的很慢。
您不应该使用带有 java 的 SSL 实现来提高性能。
有几种方法可以避免使用 Java 进行 SSL 连接:

  1. 配置在您的 java 服务器前面提供 SSL 连接的代理服务器
  2. 实现 ssl 握手库 w/openssl 使用 jni 的 netty 代码中的库
于 2012-06-06T15:47:32.117 回答
0

您可以尝试为现有连接重新使用 ssl 会话,这可以减少 ssl 握手,并且应该会给您带来普遍的提升。

于 2015-04-28T03:05:10.850 回答