Я заметил странное поведение в моем коде R.Для простоты он уменьшен до нескольких строк.Он имеет следующую структуру: я загружаю библиотеки, устанавливаю соединение с PostgreSQL и затем читаю всю таблицу в переменной из PostgreSQL.После этого я удаляю переменную с помощью rm()
и использую gc()
.Если я проверяю использование памяти (mem_usage()
или lineprof()
), объекты занимают менее 1 ГБ в памяти.Если я запускаю код на виртуальной машине Ubuntu 16.4, я также могу видеть с htop
, atop
оперативную память, выделенную для моего сеанса RS.Это примерно 8 ГБ.Использование gc()
освобождает около 1 ГБ ОЗУ, но не улучшает ситуацию полностью.Только если я вполне Rsession, такое большое выделение ОЗУ исчезнет.Я могу запустить код из Rstudio и из терминала.Картина такая же.Вот фрагмент кода:
con <- establishDBConnection(databasename, hostname, portnumber, username, passwortdb)
var <- dbGetQuery(con, paste0("SELECT * FROM ", myschema, ".", table, ";"))
rm(var)
gc()
Я знаю, что не рекомендуется читать таблицу сразу.
Я хочу понять 1) почему объекту размером 1 ГБ выделяется дополнительная память объемом 8 ГБ и 2) как освободить ОЗУ без остановки сеанса.