Я запускаю скрипт Python для сбора статистики, и фактически используемая память мала, около 10%. И никакой другой процесс не потребляет больше памяти. Однако, когда я использую его, free -m
он показывает, что использовано почти 95% памяти. Дело в том, что мой скрипт должен выполнять много операций чтения из файлов, поэтому мне интересно, есть ли какой-либо механизм кэширования памяти Linux, который вызывает эту проблему? echo 1 >> /proc/sys/vm/drop_caches
Работает, но, похоже, вручную. Как я могу уменьшить расход памяти и не оказать плохого влияния на чтение файлов?
решение1
Ядро Linux автоматически кэширует файлы в памяти для эффективности. Это не плохо. При запуске free -m
вы увидите справа объем памяти, используемой в кэше. Если приложению нужна память, ядро освободит часть кэша. Вам не следует пытаться управлять этим самостоятельно.
решение2
Я не думаю, что у вас тут есть настоящая проблема.
Почему вас волнует, сколько памяти используется? Это чему-то мешает?
Linux пытается использовать вашу память максимально эффективно. Если у вас тонны свободной памяти, и вы читаете много файлов, он будет использовать свободную память для кэширования этих файлов. Если у вас тонны активной памяти, он будет использовать намного меньше памяти для кэширования. Так это и должно работать. Если вы не хотите, чтобы память вообще использовалась, выньте чипы из своего компьютера.
Есть некоторые необычные случаи, когда большое кэширование может быть плохим. Возможно, всплеск чтения всегда происходит прямо перед всплеском выделения памяти. Возможно, что-то в вашем конкретном случае означает, что нет никакой возможной выгоды, и вам нужно выжать эти последние 0,1% затрат производительности. Возможно, у вас встроенная система, которая использует ОЗУ с ограниченным сроком службы. Если у вас такой случай, расскажите нам, в чем он заключается.