Во-первых, повторите эту мантру немного: «неиспользованная память - это потерянная память».Ядро Linux хранит около 1001 * огромного количества метаданных файлов и файлов, которые были запрошены, пока что-то, что выглядит более важным, не вытолкнет эти данные.Вот почему вы можете запускать:
find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'
и запускать второй экземпляр find
со смешной скоростью.
Linux оставляет лишь немного «свободной» памяти для обработки скачков памятииспользование без особых усилий.
Во-вторых, вы хотите найти процессы, которые поглощают всю вашу память;в top
используйте команду M
для сортировки по использованию памяти.Не стесняйтесь игнорировать столбец VIRT
, который просто сообщает вам, сколько виртуальной памяти было выделено, а не сколько памяти использует процесс.RES
сообщает, сколько памяти является резидентным , или в настоящее время находится в оперативной памяти (в отличие от подкачки на диск или фактически никогда не выделяется на первом месте, несмотря на запрос).RES
будет подсчитывать, например, /lib/libc.so.6
память один раз почти для каждого процесса, это не совсем хороший показатель того, сколько памяти использует процесс.В столбце SHR
указано, сколько памяти совместно используется с другими процессами, но нет никакой гарантии, что другой процесс на самом деле делится - это может быть общий ресурс, просто никто больше не хочет делиться.
Инструмент smem
предназначен для того, чтобы помочь пользователям лучше определить, сколько памяти следует действительно обвинять в каждом отдельном процессе.Это делает некоторую умную работу, чтобы выяснить, что действительно уникально, что является общим, и пропорционально соотносит общую память с процессами, разделяющими ее.smem
может помочь вам понять, куда идет ваша память лучше, чем top
, но top
- отличный первый инструмент.