shmcb参数中的数字代表缓存总大小(单位:字节),如512000即512KB,并非条目数或MB;实际会话容量受证书长度和TLS版本影响,1MB约存1000–2000个会话。

SSLSessionCache shmcb 参数里的数字到底代表什么
这个数字是缓存总大小(单位:字节),不是条目数、不是 MB、也不是“建议值”。比如 shmcb:/var/run/ssl_scache(512000) 中的 512000 就是 512KB,不是 512MB,也不是“最多存 512 个会话”——实际容量取决于证书长度和 TLS 版本,通常 1MB ≈ 存 1000–2000 个会话。
常见误解是把它当成“条目上限”,结果调小了反而导致高并发时大量 replaced 和 scrolled out,从监控日志看就是 total entries replaced since starting 持续上涨、hit 始终为 0。
- 电商或 API 网关类服务,建议起步设为
10485760(10MB) - 单机 QPS > 500 且 TLS 复用率低(
retrieves hit长期为 0),直接加到20971520(20MB) - 不要盲目堆到 100MB+:shmcb 是固定大小共享内存段,分配后不释放,过大会挤占其他 Apache 共享资源(如 mod_status 的 scoreboard)
为什么改了大小却没看到 hit 率上升
缓存大小只是前提,真正决定是否命中的关键是客户端行为与服务端配置协同。典型静默失效场景:
- 客户端不支持 Session Tickets(旧 Android WebView、某些 IoT 设备),只依赖 Session ID,而 Apache 默认未启用
SSLSessionTickets On - Apache 前置代理 Java 应用,但后端 Tomcat 也开了 HTTPS(AJP 关闭或未配),导致 TLS 握手实际发生在 Java 层,
SSLSessionCache完全不生效 - 缓存路径权限不对:
/var/run/ssl_scache所在目录属主不是 Apache 运行用户(如www-data或apache),Apache 启动时静默跳过缓存初始化 - 配置不在
<VirtualHost *:443>块内,而写在全局或错误的上下文里,根本未加载
如何验证 shmcb 缓存是否真正在工作
别只看配置文件有没有写对,得看运行时输出。启用 mod_status 并访问 /server-status?auto(需配置 ExtendedStatus On),搜索关键词 SSLSessionCache,你会看到类似:
cache type: SHMCB, shared memory: 10485760 bytes, current entries: 1247 subcaches: 32, indexes per subcache: 177 total retrieves since starting: 8421 hit, 293 miss cache usage: 12%
重点关注三处:
-
current entries> 0 且随流量缓慢波动 → 缓存已激活 -
total retrieves ... hit显著大于 0 → 客户端确实在复用会话 -
cache usage在 5%–30% 区间波动 → 大小设置合理;长期 80% 可能开始淘汰老条目
如果 retrieves 行始终是 0 hit, X miss,问题一定出在客户端兼容性或 TLS 终止位置,和缓存大小无关。
并发突增时 shmcb 大小要怎么动态调整
shmcb 不支持运行时扩容,必须重启 Apache。所以不能靠“先小后大”试探,得按峰值预估:
- 估算公式:
预期并发 SSL 连接数 × 1.5 ÷ 1000 ≈ 所需 MB 数(例如 5000 并发 → ≈ 7.5MB → 实配 10MB) - 检查系统 shm 限制:
ipcs -lm查max seg size,确保它 ≥ 你设的缓存大小(默认通常是 32MB,够用) - Apache 启动前确认父目录存在且可写:
mkdir -p /var/run/apache2 && chown www-data:www-data /var/run/apache2(Debian/Ubuntu) - 避免把缓存路径设在
/tmp:某些发行版会定期清理 tmpfs,导致缓存丢失
真正容易被忽略的是子缓存结构——subcaches: 32 是硬编码值,无法配置。当并发连接远超 32 时,多个进程可能争抢同一子缓存槽位,引发锁竞争。此时增大总大小意义有限,应优先考虑升级到 TLS 1.3 + Session Tickets,绕过 Session ID 路径。


















