问题标签 [chronicle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
103 浏览

java - Java 编年史在大量消息中抛出 IllegalStateExecption

当要写入的消息数量很高时,会IllegalStateException在一段时间后获取。这是代码:

循环开始

循环结束

java Chronicle 3.6.2 是 java 1.7 的版本。

0 投票
2 回答
267 浏览

chronicle - 我创建了一个每天滚动的队列

我创建了一个每天滚动的队列。第二天,我无法阅读最新的附加消息。我发现tailer index在读取了上一个周期的所有消息后并没有自动移动到最新的周期。顺便说一下,java进程在晚上关闭并在第二天重新启动。

我使用编年史队列 V4.52。

谢谢。

0 投票
3 回答
178 浏览

java - 产生更少的垃圾会导致更长的 GC 暂停

我们最近对应用程序的持久性机制进行了更改,通过反射替换了慢速序列化以创建 SQL 语句字符串,这些语句通过 OpenHFT Chronicle 序列化对 MySQL 数据库执行,并将各种对象字段的硬编码附加到摘录中。正如预期的那样,这大大减少了持久事务所需的时间并减少了我们的延迟。但我们注意到更改前后的垃圾收集模式有些令人费解。虽然我们产生的垃圾更少,但每次垃圾收集所花费的时间却增加了很多,我们很难理解原因。

这是更改前后两次运行的示例,在RedHat 4.4.7 CentOS 6.7 上使用 Java 1.8.0_74 运行相同的 VM 参数。“After”运行似乎消耗更少的年轻代,并且在每次 GC 开始时消耗的总量更少,在 GC 结束时大致相同的堆,但实际运行 GC 需要更多时间,并且运行频率要低得多(GC 之间大约 300 秒而不是 70-80 秒)。

我们试图弄清楚这是如何发生的,以及我们是否可以做任何事情来让 GC 暂停回到我们更快地生成垃圾时的位置。关于 Chronicle 以及它使用堆外内存映射文件的方式是否会导致这种情况?这似乎不太可能,但它似乎是有牵连的,除非它真的只是垃圾生成方式导致它的原因。FWIW,作为一项实验,我们尝试了 G1 和 CMS,并且至少使用默认参数,它们显示相同的模式,如果有更糟的时间。

虚拟机参数:

前:

后:

更新: 所以我根据下面的一些建议进行了以下实验(这是在 UAT 机器上,而不是 PROD 机器上,所以它有点不同......例如,linux 版本是 CentOS 7.2 而不是 6.7)。我们将堆的大小限制为 32G,并设置了 200 毫秒的显式 GC 暂停目标,以及打开更多诊断信息。如果有的话,结果会更糟。它开始时非常合理,但建议的暂停时间最多为 1.94 秒。

0 投票
1 回答
166 浏览

chronicle - 数十条小消息导致 1 GB 编年史队列文件

我每天滚动将 utf8 字符串写入编年史队列。默认队列文件大小为 81920 KB。在我写了几十条消息(每条 1 KB)后,文件很快就超过了 1 GB。如何控制文件大小?

0 投票
2 回答
474 浏览

chronicle - 从编年史队列中读取消息不会自动将当前索引移动到下一个周期

从编年史队列中读取消息不会自动将当前索引移动到下一个周期。我收到以下日志消息: 697917 [SCHEDULER#4] INFO net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts - 滚动 2 次以查找下一个循环文件​​。如果您的附加程序有一段时间没有写入任何内容,则可能会发生这种情况,从而使循环文件有间隙。

这是什么意思?

我的队列文件是:20160824.cq4 20160826.cq4 20160829.cq4 20160830.cq4。20160825.cq4 文件不存在,因为没有数据添加到队列中。

0 投票
1 回答
416 浏览

chronicle - 我可以控制编年史队列消耗的最大内存吗?

我可以控制编年史队列消耗的最大内存吗?我在带有 Xmx1200m 参数的 32 位 java 进程上遇到以下异常:

如果我将 Xmx 减小到 768m,异常就会消失。

0 投票
1 回答
96 浏览

chronicle - 输入条目后需要多长时间才能保留最新的键值?

我使用 createOrRecoverPersistedTo 方法创建了一个编年史地图。但是在重新启动 jvm 进程后,一些条目消失了。输入条目后需要多长时间才能保留最新的键值?是否有强制保留最新数据?

0 投票
1 回答
254 浏览

chronicle - 编年史队列文件损坏?

当我从编年史队列中读取消息时,出现异常“java.lang.IllegalStateException:元数据未准备好 c0000000”。是否可以修复此队列文件?

0 投票
2 回答
362 浏览

java - 如何使用 OpenHFT/Chronicle-Values 中的 @Array(length= ?) 注解

这个问题是关于Chronicle-Values 的

在该站点中找到的一个示例是:

这里注释仅适用于其中一种方法。这是否意味着之后的所有方法都被视为处理数组数据?

在我发现的一个测试用例中

我从中了解到的是,您可以在此接口中拥有多个数组,这些数组@Array(length = 4)适用于以At直到下一个注释结尾的方法。这是正确的吗?

此外,您是否可以使用以下内容来模拟 4 个双精度数组和 8 个字符串数组:

@Array(length= ?)在一个接口内分配多个数组的内存布局是什么?您可以在面向列或面向行的布局之间进行选择吗?如果不同,布局将如何处理length

也代替:

你能把它写成:

暗示@Array(length=100)适用于整个界面。

您还可以将指定长度推迟到创建点吗?

0 投票
1 回答
216 浏览

chronicle - 如何阅读Chronicle中的最后一条消息

我想阅读写入 SingleChronicleQueue 实例的最后一条消息。

虽然“chronicle.createTailer().direction(TailerDirection.BACKWARD).toEnd()”在我们与最后一条写入消息处于同一周期时有效,但只要我们处于未来周期之一(与最后一次写入相比)消息),tailer.readDocument(...) 总是返回“false”。

我已经基于 SingleChronicleQueueTest.testForwardFollowedBackBackwardTailer测试实现了一个重现问题的测试:

在对“testForwardFollowedBackwardTailer”方法进行这些更改后,测试在“readBackward”方法中的 assertTrue(documentContext.isPresent()) 行失败。

有没有办法可靠地从 SingleChronicleQueue 实例中读取最后一条消息,无论最后一条消息过去多远?(没有从一开始就通读整个编年史实例)