Я пытаюсь объединить большие фреймы данных, используя R. Мой компьютерный процессор имеет четырехъядерный процессор Intel Core i5 с тактовой частотой 3 ГГц и 8 ГБ оперативной памяти. Я использую функцию уменьшения, я не использую цикл. Все фреймы данных в списке, общий размер 160 МБ.
<- Reduce(function(x,y) merge(x, y, all = TRUE, by = my_column_ID), my_list)
Перед запуском сценария я расширил свою виртуальную память до 50 ГБ с помощью Терминала, как описано ниже.
cd ~
touch .Renviron
open .Renviron
R_MAX_VSIZE=50Gb
https://r.789695.n4.nabble.com/R-3-5-0-vector-memory-exhausted-error-on-readBin-td4750237.html
Компьютер также был перезагружен перед запуском скрипта для очистки ОЗУ, а все другие программы закрыты, работает только RStudio.
Скрипт работает несколько часов, поэтому я решил проверить Activity Monitor на своем Mac.
Использование ЦП очень низкое (ядро 2.3% и rsession 0.5%), но использование памяти очень велико (ядро 30 МБ, сеанс r 36 ГБ и rstudio 200 МБ).
Как это можно объяснить? Почему ЦП не работает быстро, если память работает хорошо, поэтому можно быстро получить доступ к информации?
1 ответ
У вас есть машина с 8 ГБ ОЗУ, но ваша программа использует 36 ГБ. Это означает, что он будет использовать своп.
Использование такого большого объема подкачки не означает, что ваша программа будет эффективной. Чтобы прочитать одну часть памяти, нужно будет вытолкнуть другую часть на диск.
Причина, по которой ваша программа почти не использует процессорного времени, заключается в том, что она тратит 99% времени выполнения на ожидание загрузки и выгрузки блоков памяти на ваш диск.
Вашей программе требуется как минимум в четыре раза больше памяти, чем есть на самом деле. Если вы действительно хотите использовать свою систему, вам нужно будет установить больше ОЗУ или запустить программу в системе, в которой больше ОЗУ.
Твердотельный накопитель может быть лучше жесткого диска, но даже такая нагрузка на нем не работает.