gpt4 book ai didi

r - R中具有相同数据的相同操作的不可预测的内存使用情况

转载 作者:行者123 更新时间:2023-12-03 16:41:24 24 4
gpt4 key购买 nike

我遇到一个问题,其中R函数(NbCluster)使R崩溃,但在不同运行的不同点使用相同数据。根据journalctl,崩溃都是由于内存问题造成的。例如:

Sep 04 02:00:56 Q35 kernel: [   7608]  1000  7608 11071962 10836497 87408640        0             0 rsession
Sep 04 02:00:56 Q35 kernel: Out of memory: Kill process 7608 (rsession) score 655 or sacrifice child
Sep 04 02:00:56 Q35 kernel: Killed process 7608 (rsession) total-vm:44287848kB, anon-rss:43345988kB, file-rss:0kB, shmem-rss:0kB
Sep 04 02:00:56 Q35 kernel: oom_reaper: reaped process 7608 (rsession), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

我一直在测试我的代码,以找出导致内存错误的行,事实证明,即使使用相同的数据,它也会有所不同。除了要解决它之外,我对为什么这是一个间歇性问题感到困惑。如果对象太大而无法容纳在内存中,那么在每次使用相同资源的情况下运行它都应该是一个问题,对吗?

其他进程使用的内存量在两次运行之间没有显着差异,我总是从干净的环境开始。当我查看 top时,我总是有多余的内存(尽管我很少关注崩溃的确切时间)。我曾尝试通过删除不需要的对象和常规垃圾回收来减少内存负载,但这并没有明显的效果。

例如,在运行NbClust时,有时在运行时会发生崩溃 length(eigen(TT)$value)其他时间,它发生在 hclust调用期间。有时它不会崩溃,并以相对优雅的“无法分配 vector 大小”退出
除了关于减少内存负载的任何建议之外,我还想知道为什么我有时会用尽内存,而其他时候却没用。

编辑:将 hclust的所有用法更改为 hclust.vector之后,在分层集群步骤期间,我没有发生任何崩溃。但是,仍然有崩溃发生在不同的地方(通常在 eigen()调用期间)。
如果我可以可靠地预测(在误差范围之内)我的代码的每一行要使用多少内存,那就太好了。

最佳答案

到目前为止,现代内存管理并不像您认为的那样具有确定性。

如果您想要更可重现的结果,请确保摆脱任何垃圾回收,任何并行性(特别是与程序并行运行的垃圾回收!),并确保该进程在内存中的限制值比您的自由值小得多。系统内存。

内核OOM杀手是在内核过量使用内存(您可能想了解其含义),完全没有交换存储空间并且无法实现 promise 时的最后一种措施。

内核可以分配在首次访问之前不需要存在的内存。因此,OOM杀手可能不会在分配时发生,而是在实际使用页面时发生。

关于r - R中具有相同数据的相同操作的不可预测的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com