我们开发了一个应用程序来加密/解密来自服务器的请求/响应。我们正在做性能测试
加密/解密应用程序,我们观察到加密/解密过程需要时间,而许多线程
正在同时做。为了识别问题,我们记录了加密/解密过程中的所有方法。
从记录器中我们发现密钥获取过程占用了整个过程时间的 70-80%。
- 我们使用AES算法进行加密/解密
- AES 密钥存储在具有唯一 ID 的密钥存储中。
- 在加密/解密过程之前,我们从密钥存储中获取针对唯一 ID 存储的 AES 密钥并执行加密/解密。
- 当密钥存储大小增加时,性能会变得更差。
进一步分析,我们发现Key store内部使用的是HashTable。这是给予绩效的问题吗?
当密钥库大小为2002时---TPS为85
密钥存储大小为 14007 -- TPS 为 38
请帮忙。
我面临这个问题......我已经在下面的帖子中回答了这个问题。
与执行速度相关的问题因不同的操作系统平台而异。
JVM 将密钥存储加载到内存中。它有哈希表集合作为内部存储。
哈希表是同步的。
每当您从密钥存储执行获取操作时,它都会从内存中的密钥存储而不是从物理密钥存储返回它。您可以通过在 Linux 基本操作系统中使用 ("top" - %wa 部分) 命令来确认。
密钥存储使用哈希表,这是性能下降的根本原因。
我通过在初始化项目时将密钥库中的所有密钥加载到 ConcurrentHashMap 中解决了这个问题。之后,所有读取操作都将从 MAP 而不是 keystore 执行。并确保所有写入操作都将在密钥库和 MAP 上执行。
Java Keystore.getKey() 缓慢,同时密钥存储大小增加 https://stackoverflow.com/questions/38457864/java-keystore-getkey-slow-while-key-store-size-increase/38459647#38459647
希望这会有所帮助..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)