Използвам пакета 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 съхранява своите обекти на различни операционни системи и как да изтрия осиротели?