Kdb 解释Q.w[]中的潜在问题?

Kdb 解释Q.w[]中的潜在问题?,kdb,Kdb,从中我们知道,.Q.w[]给出了以下示例: used| 108432 / bytes malloced heap| 67108864 / heap bytes available peak| 67108864 / heap high-watermark in bytes wmax| 0 / workspace limit from -w param mmap| 0 / amount of memory mapped syms| 537 / number

从中我们知道,.Q.w[]给出了以下示例:

used| 108432   / bytes malloced
heap| 67108864 / heap bytes available
peak| 67108864 / heap high-watermark in bytes
wmax| 0        / workspace limit from -w param
mmap| 0        / amount of memory mapped
syms| 537      / number of symbols interned
symw| 15616    / bytes used by 537 symbols

如果我想监控实例的内存问题(例如,内存已满),我应该查看已使用的内存、堆或它们的组合吗?

如果你想监控当前正在使用的内存,你可以使用
已使用的
,但这只是对实际使用的内存的粗略估计,因为它没有考虑插入字符串(符号)所使用的内存或内存映射文件

监视堆有助于了解内存峰值(峰值给出了最大峰值)但是,如果你接近极限,它不一定是通知你的理想方法,因为如果你有一个大的内存峰值,并且你达到了极限,那么在你有机会监测到峰值接近极限之前,这个过程就会死亡

最终,我将监控这两种情况(和峰值),并允许自己在这两种情况下使用缓冲区。如果堆/峰值达到限制的50%,则发出低级别警报,更高级别为60%、70%等。然后,还可以监控堆/峰值的使用百分比。如果您使用的堆占堆的百分比很高,并且堆占限制的百分比很高,那么这可能会令人担忧。基本上,您的流程可以是:

  • 中低内存使用率,但峰值:
  • 如果使用的内存通常是堆/峰值的中低百分比,那么您的进程使用的是低内存,但使用的是峰值。如果处理大量数据,这是非常无害的

  • 使用的是堆/峰值的高百分比,堆/峰值是最大值的高百分比
  • 在这里,您可能会遇到这样一种情况:一个进程在不释放内存的情况下存储越来越多的内存。因此,所使用的数据不断增长,堆/峰值也随之不断增长。如果不检查,这是一个问题

    因此,本质上,您希望捕获行为2,同时允许行为1

    还有其他一些行为模式,但这将是一般要点。是否启用了自动垃圾收集也与此有关。如果未启用自动垃圾收集,并且使用的垃圾比堆少得多,则此进程占用了它不需要的内存