我遇到与我的kdb过程严重的内存问题。这里简要介绍一下架构。为什么kdb进程在系统上显示高内存使用率?
该进程以从模式运行(4个从站)。它最初将数据库中的大量数据加载到内存中(从-22!计算的内存中加载的所有变量的总大小约为11G)。最初这与.Q.w []匹配并接近unix进程内存使用情况。这个数据集在增量操作中增加很少。但是,长时间运行后,尽管kdb内存统计信息(.Qw [])显示预期的内存使用情况(包括已用和已用堆)〜13 G,但该进程在系统上消耗接近25G(unix/proc,top)最终会耗尽物理内存。
现在,当我手动运行垃圾回收(.Q.gc [])时,它释放内存并使unix进程的使用接近.Q.w []显示的堆号。
我使用-g 1选项在即时模式下运行垃圾收集,运行Q 2.7版本。
为什么unix进程的使用与kdb内部统计信息差别如此巨大 - 差异来自哪里?为什么“-g 1”选项不起作用?当我运行一个简单的例子,它工作正常。但在这种情况下,它似乎泄漏了很多内存。
我试着用2.6应该有自动垃圾收集的版本。令人惊讶的是,当使用2.6版本的单线程(每个)和多线程模式(桃子)运行时,.Q.w中的使用堆号和堆号之间仍然存在巨大差异。有任何想法吗?
感谢您的洞察力。很有帮助。 – user5637363
您是否知道在自动模式下为从站运行垃圾回收器的方法?有没有命令行选项。如果我理解正确,-g选项仅对主线程这样做。或者,-w限制也适用于奴隶? ' – user5637363
'-w'适用于每个线程。所以每个线程都会有相同的内存限制。根据“内存使用情况”描述中的第3点,特定线程的自动垃圾收集只会在发生严重情况并且达到由-w设置的内存限制时发生。 – Rahul