我正在尝试分析我们在生产环境中运行的一个应用程序,目前javax.net.ssl.sessionCacheSize
的值被设置为10000。
我们在生产环境中使用java 17,在Java 17中,默认情况下,javax.net.ssl.sessionCacheSize
的值设置为20480。
我想知道当这个 sessionCacheSize 变满时会发生什么?是否触发GC事件(我们在Prod中使用G1GC)?或者应用程序响应时间会变长?或者应用程序不会接受新的连接,直到现有的连接被删除,缓存有一些空间来创建会话?
1条答案
按热度按时间1szpjjfi1#
在Adoptium OpenJDK 17.0.7(以及其他OpenJDK衍生产品)中,会话缓存是在
sun.security.util.MemoryCache
中实现的,您应该能够在IDE中检查。这个类使用一个LinkedHashMap
作为LRU(Least Recently Used)样式的缓存,并使用过期和引用跟踪(可选)。当调用任何方法时,它将删除任何只能软访问的缓存项,并且对于某些方法,它将删除过期的条目。如果该高速缓存中添加新项后,缓存大小超过了配置的最大值(即使在删除过期项后),它也会删除最近最少使用的项,直到缓存大小在范围内。
这本身不会触发任何GC,但会产生一些最终将被收集的垃圾。它也不会阻止创建新会话。