单个嵌入式 Ignite 节点总是在启动时执行恢复,并且花费的时间太长

Single embedded Ignite node always performs recovery on startup and it takes too long

我正在一个概念验证应用程序中评估 Ignite,该应用程序将合理数量的数据加载到启用了持久性的单个嵌入式节点中。磁盘存储约为 20 GB,我已将 8 GB RAM(共 16 个可用)分配给内存缓存。

将这些初始数据加载到数据库后,我发现创业公司花费的时间太长而不实用,尤其是对于开发周期而言。总启动时间约为 12 分钟。查看日志,有两个步骤占了大部分时间:

i.i.p.c.p.GridCacheDatabaseSharedManager : Binary recovery performed in 127946 ms.
i.i.p.c.p.GridCacheDatabaseSharedManager : Logical recovery performed in 571725 ms.

我知道当我在调试器中按 "stop" 时,它会终止进程,Ignite 将没有机会正确清理。但是,在此 运行 之前,我让 Ignite 运行 通宵运行,以便允许它执行所有预期的检查点等。似乎无论我做什么,启动时间仍然很长。

问题:

完整的日志文件对于 Stack Overflow 来说太大了,但在 pastebin 上可用。

我认为只有在您有足够的资源(例如 RAM 和 I/O)时才应该使用 Ignite 的持久性。它并没有真正针对资源受限的场景进行优化。

也许你可以在服务器上有一个集群,只连接客户端进行开发?这样你可以每天重启一次左右。

这听起来不正常。如果 Ignite 突然停止,则需要一些时间来重播预写日志以使持久性文件达到一致状态。但是,12 分钟听起来很可疑,尤其是如果使用 Ignite.stop.

这样的方法正常停止 Ignite

你是对的,启动时间不应该受到影响,只是因为你不能在 RAM 中缓存所有数据集。它会影响操作的性能,但不会影响 bootstrap 程序。

尝试 运行 在不同的机器或环境中运行您的应用。您的笔记本电脑或其磁盘可能有问题。尝试检查较小的数据大小或使用 Ignite.stop 轻轻停止 Ignite 以确保日志中没有报告预写日志或恢复活动。