我们有一个正式服JVM堆问题。当我们进行堆转储并分析报告时,我们发现超过80%的堆大小被Ehache对象耗尽,服务器变得很慢。我们怀疑内存泄漏或积累缓存对象而没有清除旧缓存。该站点是非常大的容量站点,因此缓存的数量会增加。
我想回顾一下这种配置的含义,并建议这是否与该问题有关:
<ehcache>
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
<cache name="name1" maxElementsInMemory="50" eternal="false" overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="86400" />
<cache name="name2" maxElementsInMemory="50" eternal="false" overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="86400" />
<cache name="name3" maxElementsInMemory="50000" eternal="true" overflowToDisk="true"/>
<cache name="name4" maxElementsInMemory="500" eternal="true" overflowToDisk="true"/>
<cache name="name5" maxElementsInMemory="500" eternal="true" overflowToDisk="true"/>
<cache name="name6" maxElementsInMemory="50000" eternal="true" overflowToDisk="true"/>
<cache name="name7" maxElementsInMemory="50000" eternal="true" overflowToDisk="true"/>
</ehcache>
在Java类中,我有以下实现:
@Cacheable("name6")
public ServiceResponse getQualifiedProducts(
ValueObject parameterObject, List < Input > list)
{
return cachedService.getQualifiedProducts(parameterObject, list);
}
任何建议都将不胜感激。
更新:溢出ToDisk="true"的意义是什么。我没有配置任何磁盘存储。它将如何影响性能?
您给出的缓存内容示例是ServiceResponse
对象。你知道那个物体有多大吗?它是否包含对链接到您使用的框架的类型的引用?还是纯粹的商业数据?
这是您需要执行的调查,以便了解缓存最终引用的内容以及这如何影响您的内存使用。
作为一般建议,您希望缓存属于您的对象,以便可以精确控制其大小。
至于overflowToDisk=true
,它将被应用,因为您在共享的xml片段中配置了一个磁盘存储。
但是,尽管它说溢出是由于向后依赖的原因,但至少从Ehcache2.6.0开始,它就不再像以前那样工作了。当前的Ehcache模型是,所有映射都存在于较慢的存储区(此处为磁盘)中,以提供更可预测的延迟。当一个映射被访问时,它会被复制到堆中,以便在后续点击时更快地检索。
缓存的配置在configs/cache目录,目前支持三种缓存,文件缓存(FileCache), memcache缓存(MemoCache), redis缓存(RedisCache). 文件缓存的配置在file.config.php, 只有一个参数 "cache_dir", 表示文件缓存的根目录 memcache缓存配置在memo.config.php, 可以添加多个memcache服务器,配置格式
我有一个项目设置(这里的片段来自我在GitHub https://GitHub . com/ashishmarwal/self-populating-cache-issue上创建的一个演示项目),其中在ehcache配置(ehcache.xml)中声明了一个原始的eh-cache缓存。 然后,Spring bean描述符使用该原始缓存使用CacheEntry Works创建修饰的(SelfPopu
本文将介绍如何使用Apache HTTP Server的缓存功能来加速Web和代理服务,同时避免常见问题和错误配置。 Apache HTTP服务器提供了一系列缓存功能,旨在以各种方式提高服务器的性能。 三态RFC2616 HTTP缓存 及其提供者模块提供智能的HTTP感知缓存。内容本身存储在缓存中,旨在遵守控制内容可缓存性的所有各种HTTP头和选项。针对简单和复杂的缓存配置,可以在其中处理代理内容
Nuxt.js 使用 lru-cache 提供组件缓存功能以获得更好的渲染性能。 使用方法 类型: Boolean 或 Object (默认值:false) 如果是一个对象类型,其配置属性可以参考 lru-cache 配置项。 例如 (nuxt.config.js): module.exports = { cache: true // or cache: { max: 1000
我们Java开发人员有时会使用来确保我们为每个特定于线程的堆栈提供了1MB的空间。现在,我经常感到困惑,JVM从哪里借用了1MB,从堆或系统内存中借用,或者Java为线程分配任何特定的内存。你能帮我理解一下吗? 此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容? 提前感谢。
主要问题是EHCAHCE2.6.2是否基于ehcache配置驱逐过期元素;还是我必须按程序驱逐? 在阅读了文档的各个部分(数据寿命和缓存大小)之后,我们将当前配置设置为使用TTI/TTL和CacheManager级别MaxBytesLocalHeap=1024M。在设置了这个之后,我希望ehcache只能使用1GB的堆空间进行缓存,但是从测试(和prodcution)中,我们总是看到JVM堆已经满