Как освободить память, которая используется объектами big.matrix аварийных сессий R - PullRequest
1 голос
/ 26 апреля 2019

Я использую пакет bigmemory для параллельного доступа к большим матричным объектам, например, вот так

a <- bigmemory::big.matrix(nrow = 200, ncol = 100, shared = TRUE) # shared = TRUE is the default

Однако работа с результирующими объектами иногда приводит к сбою R.Это означает, что память, используемая объектами матрицы, не освобождается.Руководство bigmemory предупреждает о таком случае, но не дает решения:

У внезапно закрытого R (с помощью, например, диспетчера задач) не будет возможности завершить объекты big.matrix,что приведет к утечке памяти, так как big.matrices останется в памяти (возможно, под скрытыми именами) без простого способа восстановить R к ним

После нескольких сбоев и перезапусков моегоR процесс, я получаю следующую ошибку:

No space left on device 
Error in CreateSharedMatrix(as.double(nrow),
as.double(ncol), as.character(colnames),  : 
  The shared matrix could not be created

Очевидно, моя память заблокирована осиротевшими большими матрицами.Я попробовал команду ipcs, которая объявляется для вывода списка блоков совместно используемой памяти, но размеры перечисленных там сегментов слишком малы по сравнению с моими матричными объектами.Это также означает, что ipcrm здесь бесполезен для удаления моих потерянных объектов.

Где bigmemory хранит свои объекты в разных операционных системах и как мне удалить потерянные объекты

1 Ответ

1 голос
/ 26 апреля 2019

Linux

Вызов df -h раскрыл тайну моей операционной системы (Linux / CentOS).

$ df -h

Filesystem       Size  Used Avail Use% Mounted on
... 
tmpfs           1008G 1008G     0 100% /dev/shm
...

В папке /dev/shm находится временная файловая система.Файлы там существуют только в оперативной памяти.Эта файловая система используется для обмена данными между процессами.В этой папке было несколько файлов со случайными строками в качестве имен и несколько файлов с одинаковым префиксом, которые, по-видимому, связаны с одним и тем же объектом big.matrix:

$ ls -l /dev/shm

-rw-r--r-- 1 user  grp 320000 Apr 26 13:42 gBDEDtvwNegvocUQpYNRMRWP
-rw-r--r-- 1 user  grp      8 Apr 26 13:42 gBDEDtvwNegvocUQpYNRMRWP_counter
-rw-r--r-- 1 user  grp     32 Apr 26 13:42 sem.gBDEDtvwNegvocUQpYNRMRWP_bigmemory_counter_mutex

К сожалению, я не знаю, какиематрица принадлежит к какому файлу, но если у вас нет запущенных процессов R в то время, удаление файлов с этим шаблоном имени должно удалить потерянные объекты.

Windows

Я не знаю, как это делают другие ОС, поэтому не стесняйтесь добавлять его в эту вики сообщества, если знаете

...