【发布时间】: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