【问题标题】:How can I increase server SSL performance如何提高服务器 SSL 性能
【发布时间】:2015-04-28 11:05:10
【问题描述】:

我在代理服务器上启用了 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 是否可以调整得更好?它所花费的时间几乎与引擎本身的生成时间一样长。

【问题讨论】:

  • 您是否有可能在请求到达您的服务器之前终止 SSL?理想情况下,您可以使用专用硬件来终止 SSL。亚马逊的弹性负载均衡器也可以做到这一点。 SSL 密钥的长度是多少?密钥长度对性能有影响javamex.com/tutorials/cryptography/rsa_key_length.shtml
  • @JohnP 感谢您的回复。在到达我的服务器之前终止 SSL 是不可能的。感谢您提供有关 SSL 密钥长度的提示,即 2048

标签: netty sslengine


【解决方案1】:

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

  1. 在您的前端配置提供 SSL 连接的代理服务器 java服务器
  2. 实现 ssl 握手库 w/openssl 在 jni 的 netty 代码中使用该库

【讨论】:

  • 与什么相比真的很慢?有数百万个网站正在运行,例如带有 SSL 的 Tomcat 是这些断言的反例。我自己已经经营了好几年了。
  • 这是此答案中“java 很慢”评论的一个来源:netty.io/wiki/…
【解决方案2】:

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

【讨论】:

  • 这已经默认发生了。你必须竭尽全力防止它发生。
猜你喜欢
  • 2021-04-18
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2013-04-18
  • 1970-01-01
  • 2011-04-24
  • 2017-08-02
相关资源
最近更新 更多