Я должен сказать с самого начала, я знаю, что я, вероятно, мог бы сделать с некоторым количеством ОЗУ больше, так как в настоящее время я использую RStudio на Windows 10 с 4 ГБ ОЗУ. И пост не обязательно связан исключительно с R, но с обработкой памяти в целом. После перезагрузки компьютера и RStudio у меня обычно 2–2,5 ГБ «доступной» оперативной памяти в соответствии с диспетчером задач.
Часть моего кода работает безупречно (особенно когда я использую data.table), даже при том, что это делает довольно много в вычислительном отношении; генерация комбинаций и перестановок, относительно сложных соединений. Другие работы потерпят неудачу 4 из 5 раз с несколько неясными, на первый взгляд случайными ошибками; Например, значение SET_STRING_ELT () должно быть 'CHARSXP'.
Это не ошибка кода или файла или выполнение чего-либо особенно сложного в отношении кода (просто открытие файлов, переупорядочение некоторых полей, изменение заглавных букв и выписка их обратно). Если я перезапущу один и тот же кусок кода несколько раз, или раздел за разделом, он в конечном итоге будет работать с единственным определяющим фактором, который, очевидно, изначально был удачей.
Я определил некоторые закономерности в этом. Например, это, кажется, связано со временем. Если я вручную перетаскиваю и запускаю секции по частям, это будет работать. И циклы импорта файлов размером 10 МБ с использованием базы R 'read.csv' будут работать вместе с функциями rbindlist для больших файлов; вплоть до «доступного» лимита оперативной памяти в диспетчере задач. Но если я попытаюсь пройтись по импорту 100 МБ файлов базового типа R 'read.csv', ошибка начнет появляться, даже когда я явно удаляю объект из среды, сразу после этого вызываю gc(), очевидно, что это в 10 раз больше Оперативная память доступна в соответствии с диспетчером задач, при новом перезапуске и абсолютно без работы. Единственное решение, которое я придумал для этого, было добавить 10 или более секунд системного сна после каждого цикла gc() и read.csv; что нелепо, когда чтение этих файлов с SSD занимает несколько сотен миллисекунд (Kingston V300, ~ 500 МБ / с), но также работает таинственно (значение SET_STRING_ELT () должно быть ошибкой CHARSXP, исчезают).
В любом случае я планировал провести модернизацию компьютера (купить больше оперативной памяти), но я решил провести некоторое исследование с помощью монитора производительности, выполнив несколько работ, чтобы увидеть, что на самом деле является узким местом для компьютера (если покупать выше. скорость работы ОЗУ того стоит); так как процессор i3 4130t (один из самых дешевых в Intel) редко когда-либо работает выше 50%, при этом все четыре логики явно заняты (с использованием Microsoft MRAN R Open).
Взглянув на различный фрагмент кода, который просматривает таблицу UID размером около 10 МБ и подставляет вторую таблицу, а также на результаты мониторинга производительности, я заметил, что как только я нажимаю «Выполнить», наблюдается постоянный рост количества сбоев страниц; это будет около 5000/ с минуту или около того, системный кэш постоянно падает. Интересно, что это также похоже на то, что цикл постепенно замедляется. Это займет пару минут, чтобы покрыть 5% записей. Но примерно через шесть часов, когда я вернусь, он будет полпути, ползет вперед, и любое небольшое беспокойство заставит R полностью зависнуть. У меня также часто R сбрасывает себя или всю ОС; После синего просмотра часа или нескольких раз подряд Windows предупредила меня, что обычно происходит ошибка с ошибкой страницы.
Возможно, есть упоминание о чем-то похожем на сюжетном форуме:
Я прочитал интересный пост с большим количеством голосов, который я сейчас не могу найти (но думаю, что он был опубликован здесь) относительно файла подкачки, в котором пользователь указал, что на самом деле в Windows никогда не бывает «свободной» ОЗУ; он постоянно заполняется, все разбивается на страницы, а затем выгружается, если кому-то еще нужно место.
Похоже, что существуют некоторые крайне неоднозначные мнения о том, следует ли включать файл подкачки.
Я пробовал как включить, так и отключить его, и вижу один и тот же шаблон при возникновении ошибок на странице.
Я, кажется, наблюдаю что-то похожее на модидум на сюжетном форуме. Несмотря на то, что для этих задач, по-видимому, более чем достаточно «доступной» оперативной памяти, R, судя по всему, пытается создать множество файлов.
Мне любопытно, может ли это быть связано с установлением приоритетов памяти в более поздних версиях Windows. Я знаю, что могу повысить приоритет процесса в диспетчере задач, однако действительно ли это увеличивает приоритет выделения памяти, а не только приоритет потока процессора? Есть ли возможность постоянно устанавливать такие приоритеты без использования проприетарного программного обеспечения? Я понимаю, что Windows пытается помочь путем упреждающего кеширования данных в ОЗУ, однако, на самом деле, похоже, что это совсем не помогает с R. Есть ли способ выборочно форсировать или изменять профиль кеширования? Для более интенсивной работы с памятью я бы предпочел, чтобы не было кешированных файлов, которые я на самом деле не использую.
Для всех, кто интересуется твердотельным накопителем, несмотря на то, что он выполняет довольно большое количество операций чтения / записи в файл подкачки и целенаправленно читает и записывает на диск изнутри R (сотни тысяч файлов за раз, насыщая его емкость, затем очищая и снова и снова насыщая его), кажется, что сам SSD работает нормально; Согласно диагностическому инструменту Kingston, в нем нет ничего плохого даже после нескольких лет использования.
Спасибо, что нажали.