Как освободить память, которая используется объектами big.matrix разбитых сеансов R

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

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

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

Внезапно закрытый R (например, с помощью диспетчера задач) не будет иметь шанса завершить работу с объектами big.matrix, что приведет к утечке памяти, так как big.matrix останутся в памяти (возможно, под запутанными именами) с непростым путем переподключить 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 хранит свои объекты в разных операционных системах и как удалить потерянные объекты?


person akraf    schedule 26.04.2019    source источник
comment
Думаю, мы обсуждали аналогичную проблему в этой проблеме.   -  person F. Privé    schedule 26.04.2019


Ответы (1)


линукс

Звонок 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, удаление файлов с этим шаблоном имени должно удалить осиротевшие объекты.

Окна

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

person Community    schedule 26.04.2019