Подтвердить что ты не робот

Как очистить память R (без необходимости перезагружать мой компьютер)?

Я выполняю свой код в R (под Windows), который включает в себя много данных в памяти. Я пытался использовать rm(list=ls()) для очистки памяти, но, похоже, память все еще занята, и я не могу перезапустить свой код. Я попытался закрыть R и перезапустить R снова, но это то же самое, кажется, что память все еще занята, так как, когда я запускаю коды, он говорит, что не может выделить память (но это может произойти в первый раз). Память кажется очищенной только после перезагрузки компьютера.

Есть ли способ очистить память, чтобы я мог перезапустить свой код, не перезагружая компьютер каждый раз?

4b9b3361

Ответ 1

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

Ответ 2

Я столкнулся с той же проблемой с R. Я копаю немного и прихожу с решением, что нам нужно перезапустить сеанс R для полной очистки памяти/ОЗУ. Для этого вы можете использовать простой код после удаления всего из своего рабочего пространства. код выглядит следующим образом:

rm(list = ls())

.rs.restartR()

Ответ 3

Используйте функцию ls(), чтобы увидеть, какие объекты R занимают пространство. используйте rm ( "objectName" ), чтобы очистить объекты от R-памяти, которая больше не требуется. См. этот.

Ответ 4

Пример под Linux (Fedora 16) показывает, что память освобождается при закрытии R:

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       2854        974          0        344       1440                                                                                                                                                                    
-/+ buffers/cache:       1069       2759                                                                                                                                                                                                     
Swap:         4095         85       4010     

используется 2854 мегабайт. Затем я открываю сеанс R и создаю большую матрицу случайных чисел:

m = matrix(runif(10e7), 10000, 1000)

при создании матрицы используется 3714 МБ:

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       3714        115          0        344       1442                                                                                                                                                                    
-/+ buffers/cache:       1927       1902                                                                                                                                                                                                     
Swap:         4095         85       4010     

После закрытия сеанса R я отлично возвращаю используемую память (2856 МБ бесплатно):

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       2856        972          0        344       1442                                                                                                                                                                    
-/+ buffers/cache:       1069       2759                                                                                                                                                                                                     
Swap:         4095         85       4010   

Конечно, вы используете Windows, но вы можете повторить это упражнение в Windows и сообщить, как развивается доступная память до и после создания этого большого набора данных в R.

Ответ 5

memory.size(max=T) # gives the amount of memory obtained by the OS
[1] 1800
memory.size(max=F) # gives the amount of memory being used
[1] 261.17

Используя пример Павла,

m = matrix(runif(10e7), 10000, 1000)

Теперь

memory.size(max=F)
[1] 1024.18

Чтобы очистить память

gc()
memory.size(max=F)
[1] 184.86

Другими словами, память теперь должна быть ясной снова. Если вы зацикливаете код, рекомендуется добавить gc() в качестве последней строки вашего цикла, чтобы память была очищена до начала следующей итерации.

Ответ 6

Я нашел полезным зайти в мою папку "tmp" и удалить все зависшие файлы rsession. Это обычно освобождает любую память, которая кажется "застрявшей".

Ответ 7

Просто добавьте это для справки на случай, если кому-то понадобится перезагрузить компьютер и сразу же запустить команду.

Я использую этот подход только для очистки оперативной памяти из системы. Убедитесь, что вы удалили все объекты, которые больше не нужны. Может быть, gc() также может помочь перед этим. Но ничто не очистит RAM лучше, чем перезапуск сеанса R.

library(rstudioapi)
restartSession(command = "print('x')")

Ответ 8

Есть только так много, что вы можете сделать с помощью rm() и gc(). По предложению Гэвина Симпсона, даже если вы освобождаете фактическую память в R, Windows часто не будет восстанавливать ее, пока вы не закроете R или не потребуется, потому что вся видимая память Windows заполняется.

Обычно это не проблема. Однако, если вы запускаете большие циклы, это может иногда привести к фрагментации памяти в долгосрочной перспективе, так что даже если вы освободите память и перезапустите R - фрагментированная память может помешать вам выделить большие куски памяти. Особенно если другим приложениям была выделена фрагментированная память, пока вы выполняли R. rm() и gc() могут задержать неизбежное, но больше ОЗУ лучше.