Вопрос О кеше памяти Linux


Я запускаю скрипт python для получения некоторой статистики, а фактически используемая память - низкая, около 10%. И никакой другой процесс не требует больше памяти. Однако, когда я использую free -m и это показывает, что используется почти 95% памяти. Дело в том, что мой скрипт должен много читать из файлов, поэтому я задаюсь вопросом, есть ли какой-либо механизм кэша Linux-памяти, который вызвал эту проблему?echo 1 >> /proc/sys/vm/drop_caches работает, но это кажется вручную. Как я могу уменьшить стоимость памяти и не плохо влияет на чтение файлов?


4
2017-09-28 07:05


происхождения




ответы:


Ядро Linux автоматически кэширует файлы в памяти для повышения эффективности. Это неплохая вещь. При запуске free -m вы увидите справа объем памяти, используемый в кеше. Если приложение нуждается в памяти, ядро ​​освободит часть кеша. Вы не должны пытаться управлять этим самостоятельно.


7
2017-09-28 07:17





Я не думаю, что у вас есть настоящая проблема.

Почему вас волнует, сколько используется общая память? Это что-то больно?

Linux пытается максимально эффективно использовать вашу память. Если у вас много свободной памяти, и вы читаете много файлов, она будет использовать свободную память для кэширования этих файлов. Если у вас тонна активной памяти, для кэширования она будет использовать меньше памяти. Так оно и должно работать. Если вы не хотите, чтобы память использовалась вообще, выньте чипы из своего компьютера.

Есть некоторые необычные случаи, когда много кеширования может быть плохим. Возможно, всплеск чтения всегда происходит прямо перед всплеском выделения памяти. Возможно, что-то о вашем конкретном случае означает, что нет никакой возможной выгоды, и вам нужно выжать эту последнюю 0,1% -ную стоимость исполнения. Возможно, вы находитесь в встроенной системе, которая использует оперативную память с ограниченным сроком службы. Если у вас есть такой случай, сообщите нам, что это такое.


5
2017-09-28 07:14



На самом деле проблема заключается в том, что сценарий не занимает слишком много памяти, почти 10%, а моя машина ничего не делает. Когда я прочитал данные в памяти, на python появился MemoryError, который показал, что памяти недостаточно. - cheneydeng