В любой удаленно сложной операционной системе нет четкого представления о том, сколько памяти использует конкретное приложение или сколько свободной памяти. Основными источниками осложнений являются:
- Если у вас есть своп, включаете ли вы свободное место подкачки в свободную память? Если вы этого не сделаете, какой смысл иметь своп? Но если вы это сделаете, у вас, скорее всего, всегда будет много свободной памяти, даже если ваша система перебивает (то есть перезагружается) из-за нехватки ОЗУ.
- Есть много применений для памяти. Основными из них являются память, выделенная приложениям, и память, выделенная для дискового кэша. Эти два обычно имеют один и тот же порядок величины в системе без ресурсов. Если вы учитываете только объем памяти, который не используется ни для каких целей, обычно очень мало: дисковые кеши не исчезают, пока не возникнет потребность в их памяти. Но если вы включите дисковые кеши в свободную память, вы можете подумать, что можете заполнить все это памятью приложения, но тогда вы будете зависать из-за отсутствия дискового кеша.
- Общая память затрудняет подсчет части памяти, выделенной для конкретного приложения. Общая память включает в себя такие вещи, как общие библиотеки и дисковые кэши для файлов, которые открыты более чем одним приложением.
Таким образом, оба числа, о которых вы сообщаете, вероятно, правильные, просто считая разные понятия «свободной памяти». (И free
сообщает о нескольких числах; вы не сказали, какие 647 МБ - в строке -/+ buffers/cache
кэши диска считаются свободной памятью, а в строке Mem
- нет.)