- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的 apache ignite 集群的稳定性测试中,我们遇到了一个与内存相关的问题,其中使用的内存堆空间增加到 100% 并且没有像我们预期的那样下降。这就是我们所做的:
创建了一个带有逐出策略的缓存到 FifoEvictionPolicy( max: 10000, batchSize:100)20 个并发线程在几个小时内一遍又一遍地执行以下场景:向缓存中添加了一个唯一条目,然后获取该值以验证它是否已添加。此场景在测试期间创建了大约 230 万个条目。
我们的预期是由于我们在最多 10000 个条目时相当严格的驱逐政策,内存应该是稳定的。但是,内存一直在上升,直到达到最大堆大小。见附件内存图:
我们的问题是:为什么即使已完成逐出,条目使用的内存仍会分配?
要补充的一件事是,我们执行了相同的测试,但在添加之后删除了条目。内存现在稳定了:
更新测试用例和评论。
您将在下面找到一个简单的 junit 测试来证明内存泄漏。 @a_gura 似乎是正确的——如果我们禁用 ExpiryPolicy,事情就会按预期工作。但是如果我们启用 ExpiryPolicy,堆似乎会在 ExpiryPolicy-duration 内被填满。测试用例:
public class IgniteTest {
String cacheName = "my_cache";
@Test
public void test() throws InterruptedException {
IgniteConfiguration configuration = new IgniteConfiguration();
Ignite ignite = Ignition.start(configuration);
//create a large string to use as test value.
StringBuilder testValue = new StringBuilder();
for (int i = 0; i < 10*1024; i ++) {
testValue.append("a");
}
CacheConfiguration cacheCfg = new CacheConfiguration();
cacheCfg.setName(cacheName);
cacheCfg.setEvictionPolicy(new FifoEvictionPolicy<>(10_000, 100));
Duration duration = new Duration(TimeUnit.HOURS, 12);
cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(duration));
cacheCfg.setCacheMode(CacheMode.LOCAL);
cacheCfg.setBackups(0);
Cache<Object, Object> cache = ignite.getOrCreateCache(cacheCfg);
String lastKey = "";
for (int i = 0; i < 10_000_101; i++){
String key = "key#"+i;
String value = testValue + "value#"+i;
log.trace("storing {} {}", key, value);
if (i % 1_000 == 0) {
log.debug("storing {}", key);
}
cache.put(key, value);
lastKey = key;
Thread.sleep(1);
}
String verifyKey = "key#1";
Assert.assertThat("first key should be evicted", cache.containsKey(verifyKey), CoreMatchers.is(false));
Assert.assertThat("last key should NOT be evicted", cache.containsKey(lastKey), CoreMatchers.is(true));
ignite.destroyCache(cacheName);
}
}
最佳答案
这已在 Ignite 1.8 中修复:https://issues.apache.org/jira/browse/IGNITE-3948 .
感谢提交错误的@a_gura 和开发团队。
关于caching - Apache Ignite 缓存驱逐仍在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39447690/
每个人都知道 session 中有缓存。 这个缓存通常可以通过两种方法清除: Session.Evict Session.Clear 第二种方法不仅删除单个条目的所有缓存。 我有商业方法。它接收大对象
假设一个小型测试项目(sbt 0.13.8,完整项目为 gist ): name := "test" organization := "org.example" version := "0.1.0-S
我正在寻找一种方法,使 infinispan 的默认驱逐与 TreeCache 实现一起工作。到目前为止,我搜索了文档和谷歌,但没有找到符合我问题的内容。这是 infinispan xml 中缓存的当
我想知道 Apache Cassandra 中的 Ignite 缓存逐出。是否可以将缓存条目逐出 cassandra(如 offhaep/文件逐出)。 正如我从文档( https://apacheig
我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及何时是正确的使用时间。 刷新 驱逐 复制 冲洗 我什至想知道每个人的作用,但我不太确定,所以我请求你的帮助,因为我真的很想了解
我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及什么时候是正确的使用时间。 刷新 驱逐 复制 冲洗 我什至想知道每个人是做什么的,但我不确定,所以我请求你的帮助,因为我真的很
当浏览器检测到存储空间非常低时,它可以选择驱逐 Service Worker 的缓存,如 W3C doc 所述。 . 由于我的用户可以选择为离线访问存储他们的预订,我想警告他们浏览器已删除它们。如何从
我计划在我的应用程序中使用 Guava Cache。部分 [K, V] 访问的对在统计上比其他对 >> 并且应该总是在缓存中可用。 根据 Sized Based Eviction 的规范 If you
我似乎无法找到下面看到的第一次驱逐的根本原因。如下所示,运行 evicted 不会提供与其相关的详细信息。 这一切都是在添加到 project/plugins.sbt 之后发生的:libraryDep
我希望以一种不知道集群上运行的应用程序细节的方式执行 Kubernetes 集群的自动滚动更新。原则上,PodDisruptionBudget 应该促进这一点。 问题来了:这个 Kubernetes
我正在将 Jenkins-X 用于一个相对较大的项目,该项目由大约 30 个模块组成,其中 15 个是服务(因此,包含 Dockerfile 和一个用于部署的相应 Helm 图表)。 在其中一些相对较
我是一名优秀的程序员,十分优秀!