我遇到了一个问题,即 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
. 有时它不会崩溃并以相对优雅的“无法分配向量大小”退出除了有关减少内存负载的任何建议之外,我想知道为什么我有时会耗尽内存,但有时却没有。
hclust
编辑:更改to的所有用途后hclust.vector
,在层次聚类步骤中我没有再发生崩溃。但是,仍然在不同的地方发生崩溃(通常在调用 时eigen()
)。如果我能可靠地预测(在误差范围内)每行代码将使用多少内存,那就太好了。