Что использует мою оперативную память на VPS?

Что использует мою оперативную память на VPS?

Я запускаю top и вижу, что из 502968 КБ используется 48064 КБ, оставляя 16884 КБ свободными. Но затем, когда я смотрю на отдельные процессы, я вижу, что mysql потребляет 9,4% моей оперативной памяти время от времени - но больше ничего, кажется, не потребляет. Что потребляет всю мою оперативную память?

Вот снимок экрана сверху:

top - 20:46:07 up 1 min,  1 user,  load average: 0.18, 0.05, 0.02
Tasks:  81 total,   1 running,  80 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.4 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    502968 total,   241236 used,   261732 free,    10488 buffers
KiB Swap:   524284 total,        0 used,   524284 free,   106756 cached

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
1584 dmackey   20   0 20508 1372 1000 R   0.4  0.3   0:00.01 top
1 root      20   0 26664 2456 1340 S   0.0  0.5   0:00.69 init
2 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kthreadd
3 root      20   0     0    0    0 S   0.0  0.0   0:00.01 ksoftirqd/0
4 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0
5 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0H
6 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0
7 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0H
8 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 migration/0
9 root      20   0     0    0    0 S   0.0  0.0   0:00.00 rcu_bh
10 root      20   0     0    0    0 S   0.0  0.0   0:00.24 rcu_sched
11 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 watchdog/0
12 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 cpuset
13 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 khelper
14 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kdevtmpfs
15 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 netns
16 root      20   0     0    0    0 S   0.0  0.0   0:00.00 bdi-default

А вот один из бесплатных:

            total       used       free     shared    buffers     cached
Mem:        502968     355252     147716          0      10816     111548
-/+ buffers/cache:     232888     270080
Swap:       524284          0     524284

решение1

Ничего.

Это Linux, и этокак это работает.

Он будет использовать «свободную» память для кэширования диска, потому что какой смысл в недоиспользовании ресурса?

Когда процессу требуется больше памяти, он запрашивает ее у ядра и (как правило) получает.

О, и MySQL будет использовать столько, сколько ему нужно (согласно настройкам в /etc/my.cnf), чтобы индексы, запросы и таблицы кэшировались с диска в память, что сокращает время доступа.

решение2

Это просто всякий хлам, который остался в памяти после последнего использования. Скорее всего, это данные, которые были считаны с диска или записаны на диск. ОС не освобождает память, потому что это пустая трата по трем причинам:

  1. Если память не будет использоваться в ближайшее время, то ее освобождение ничего не даст.

  2. Если память используется быстро, то ее освобождение — это просто работа, которую придется отменить, поскольку ее придется использовать снова.

  3. Если информация, которая была в памяти, понадобится снова, освобождение памяти будет означать необходимость извлекать ее с диска, а не из памяти, что гораздо медленнее.

Современные операционные системы освобождают память только в том случае, если у них нет другого выбора. Если вы думаете: «Я хочу освободить эту память сейчас, чтобы использовать ее позже», остановитесь. Вам не нужно, чтобы память была свободна сейчас, чтобы использовать ее позже. Здесь нет компромисса, это чистая победа — сохранять память в использовании, пока она не понадобится.

решение3

Запись вывода top для будущего анализа — лучший способ ответить на ваш вопрос. Быстрого решения нет, необходимо некоторое наблюдаемое исследование с течением времени. Один из способов, который я использую, чтобы поверхностно изучить, что использует мою память, — это поместить это в crontab root.

/bin/bash top -b -n 1 | head > `/var/log/date +%e_%T`

Затем я использую некоторые текстовые манипуляции и пейджер-фу для отслеживания тенденций. Этот пост Stack Overflowhttps://stackoverflow.com/questions/7908953/how-to-measure-cpu-usageесть несколько более подробных примеров использования top, подобных этому, и настройки top через .toprc, для статистики ЦП, но его можно так же легко адаптировать под свои нужды.

Связанный контент