Я работаю над программой, работающей на Linux, которая использует mmap для сопоставления нескольких файлов с памятью.
Каждый из файлов читается (обход памяти с указателями).
Вы ясно видите в pmap, как некоторые файлы были полностью отображены в память (при полном прочтении), а другие нет:
Address Kbytes RSS Dirty Mode Mapping
00007f8b09c3a000 26688 26664 0 rw-s- /mnt/ebs-metadata/fullyread.dat
00007f89ecc0c000 15936 4704 0 rw-s- /mnt/ebs-metadata/partiallyread.dat
Мы продолжаем отображать файлы и в определенный момент времени получаем ошибку говоря, что больше памяти не может быть выделено.
(Да, мы можем выгрузить много файлов, и мы это сделаем).
Мой вопрос: почему ОС не выгружает многие из страниц (или даже полных файлов) из физической памяти до следующего использования вместо броска «невозможно выделить память»?