在 Linux 上使用 OpenSSL 性能慢,通常不是 OpenSSL 本身“天生慢”,而是由算法选择、系统配置、硬件能力或使用方式共同决定的。下面按常见原因逐条说明,并给出排查/优化建议。
OpenSSL 默认很多算法是纯软件实现:
如果 CPU 不支持或没启用硬件加速:
✅ 检查是否启用硬件加速:
openssl speed aes-128-cbc
openssl speed -evp aes-128-cbc
对比差别很大就说明 AES-NI 没生效。
✅ 检查 CPU 是否支持:
grep aes /proc/cpuinfo
RSA 握手非常慢:
✅ 推荐:
旧版本问题:
✅ 检查版本:
openssl version
✅ 建议:
每次新建连接都做完整握手:
✅ 优化:
OpenSSL 依赖 /dev/random 或 getrandom()
✅ 检查:
cat /proc/sys/kernel/random/entropy_avail
✅ 解决方案:
havegedrng-toolsurandom(低安全场景)高并发下:
✅ 优化:
OpenSSL 很吃内存带宽:
✅ 表现:
✅ 验证:
在物理机 vs 虚拟机跑 openssl speed
例如:
openssl s_time
并不等于真实服务器性能
✅ 推荐工具:
wrkabnginx + opensslOpenSSL 本身不限制线程
但:
# 1. 看版本
openssl version
# 2. 看硬件加速
openssl speed -evp aes-128-gcm
# 3. 看熵
cat /proc/sys/kernel/random/entropy_avail
# 4. 看 CPU
lscpu | grep -i aes
OpenSSL 慢,90% 不是 OpenSSL 的锅,而是:
- 没用硬件加速
- 算法太重
- 系统/环境限制
- 使用方式不对
如果你愿意,可以告诉我:
我可以给你针对性优化方案。