Как узнать, кто использует память

Вопрос или проблема

Я пытаюсь выяснить, что использует мою память. Когда я запускаю команду free -m, я вижу, что свободно только 1 ГБ, а также доступно. Однако при запуске top процессы используют только 0.7% памяти, поэтому я не уверен, куда смотреть.

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

Вот вывод команд:

[root@test ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:         100408       93195        1147        4059        6064        1109
Swap:         16383           0       16383


top - 01:37:10 up 20 days, 11:11,  1 user,  load average: 1.99, 2.43, 2.09
Tasks: 821 total,   4 running, 718 sleeping,   0 stopped,   0 zombie
%Cpu(s): 26.8 us,  1.5 sy,  0.0 ni, 70.4 id,  0.3 wa,  0.6 hi,  0.3 si,  0.1 st
GiB Mem :     98.1 total,      1.2 free,     90.8 used,      6.1 buff/cache
GiB Swap:     16.0 total,     16.0 free,      0.0 used.      1.4 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5567 root      20   0 2420880 755000   7532 S   0.3  0.7 138:59.28 java
61283 oracle    20   0   11.0g 661820 355908 S   0.3  0.6  22:34.72 ora_m003_lmxlb1
 3203 root      20   0 3708312 516148 116856 S   0.3  0.5  16:56.21 cvd
17260 oracle    20   0   11.1g 437816  77184 S   0.3  0.4  22:39.85 ora_m003_lmxlb1
 8413 oracle    20   0 4688756 417056  35188 S   0.7  0.4 226:19.91 java
65826 oracle    20   0   11.0g 401372  92988 S   0.0  0.4   0:02.63 ora_j003_lmxlb1
69002 oracle    20   0   11.1g 399332  86052 S   0.0  0.4   0:03.41 ora_j002_lmxlb1
51455 oracle    20   0   11.0g 399120  90912 S   0.0  0.4   0:03.71 ora_j001_lmxlb1
79327 oracle    20   0   11.1g 397784  83320 S   0.3  0.4  22:57.12 ora_m004_lmxlb1
17163 oracle    20   0   11.0g 397420  92532 S   0.0  0.4  22:26.38 ora_m002_lmxlb1
93154 oracle    20   0   11.0g 389156  86464 S   0.0  0.4   7:12.23 ora_m001_lmxlb1
22405 oracle    20   0   11.0g 349296  80512 S   0.0  0.3   9:56.93 ora_m000_lmxlb1
61251 oracle    20   0   11.0g 347620  92740 S   0.0  0.3  22:24.97 ora_m002_lmxlb1
61249 oracle    20   0   11.0g 316504  89020 S   0.0  0.3  22:17.43 ora_m001_lmxlb1
11754 oracle    20   0   10.7g 311644  66756 S   0.7  0.3  61:25.02 ora_ppa7_lmxlb1
77645 oracle    20   0 3803892 290100  20516 S   0.3  0.3   1:09.30 java
 3234 root      20   0 2977240 265384      0 S   0.0  0.3   6:43.82 CvMountd
 5752 oracle    rt   0 2745664 256364 114388 S   0.7  0.2 205:16.78 ocssd.bin


[root@test ~]# ipcs -m | awk 'NR==1; NR > 1 { printf "%-10s %-10s %-10s %-10s %-10s %-10s %-10s %s\n", $1, $2, $3, $4, $5, $6, $7, ($5/1024/1024)" MB" }'

------     Общие     Сегменты     Памяти   --------                         0 MB
key        shmid      owner      perms      bytes      nattch     status     0 MB
0xfa002e17 0          root       660        59828264   1                     57.0567 MB
0xfa002e19 32769      root       660        59828264   1                     57.0567 MB
0x3ea248d0 720898     oracle     600        28672      48                    0.0273438 MB
0x00000000 786435     oracle     640        67108864   57                    64 MB
0x00000000 819204     oracle     640        10670309376 57                    10176 MB
0xdc9e3d00 851973     oracle     640        2097152    57                    2 MB
0x00000000 884742     oracle     600        4194304    112                   4 MB
0x00000000 917511     oracle     600        10670309376 112                   10176 MB
0x00000000 950280     oracle     600        65011712   112                   62 MB
0xcd035180 983049     oracle     600        2097152    112                   2 MB
0x00000000 1015818    oracle     600        14680064   114                   14 MB
0x00000000 1048587    oracle     600        16072572928 114                   15328 MB
0x00000000 1081356    oracle     600        20971520   114                   20 MB
0x233b805c 1114125    oracle     600        2097152    114                   2 MB
0x00000000 26837006   oracle     600        14680064   151                   14 MB
0x00000000 26869775   oracle     600        10468982784 151                   9984 MB
0x00000000 26902544   oracle     600        20971520   151                   20 MB
0x40c4f358 26935313   oracle     600        2097152    151                   2 MB
0x00000000 1277970    oracle     600        14680064   129                   14 MB
0x00000000 1310739    oracle     600        10468982784 129                   9984 MB
0x00000000 1343508    oracle     600        20971520   129                   20 MB
0x8d83344c 1376277    oracle     600        2097152    129                   2 MB
                                                                             0 MB

Ответ или решение

Анализ использования памяти в Linux: как определить, кто потребляет память?

Ваша проблема заключается в определении того, что именно использует память на вашем сервере. Вы уже провели несколько стартовых шагов, таких как использование команд free -m, top и ipcs, и теперь мы более детально разберёмся в этом вопросе.

Шаг 1: Понимание вывода команды free -m

Команда free -m предоставляет информацию о текущем состоянии памяти.

  • total: Общее количество доступной памяти.
  • used: Количество используемой памяти.
  • free: Количество свободной памяти.
  • shared: Количество памяти, используемой в общих сегментах.
  • buff/cache: Память, зарезервированная для кеширования.
  • available: Количество памяти, которая может быть использована новыми процессами, не вызывая свопинга.

Ваш вывод показывает, что всего 1.2 ГБ свободной памяти и 90.8 ГБ используется, что подтверждает высокий уровень использования памяти.

Шаг 2: Анализ вывода команды top

Команда top показывает активные процессы и их использование ресурсов, включая память. Обратите внимание на следующие колонки:

  • VIRT: Виртуальная память, используемая процессом.
  • RES: Физическая память, используемая процессом.
  • SHR: Общая память, используемая совместно с другими процессами.
  • %MEM: Процент использования физической памяти.

Совокупное использование памяти приложениями (ora_m003_lmxlb1, java, и т.д.) может быть не напрямую пропорционально тому, сколько из них реально загружает оперативную память. Программы, такие как Oracle и Java, могут выделять большое количество памяти, но не обязательно использовать её в полной мере.

Шаг 3: Проверка разделов памяти, используемой процессами

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

ipcs -m

Ваш вывод показал, что есть несколько крупных сегментов памяти, принадлежащих пользователю oracle, включая сегменты размером до 16 ГБ. Вы делаете верное решение, обращая на это внимание, так как такие сегменты могут сильно влиять на общее потребление памяти.

Шаг 4: Исследование smem

Для более детального анализа используйте утилиту smem, которая предоставляет информацию о распределении используемой памяти. Установите её (если она ещё не установлена):

sudo yum install smem    # Для систем на основе RHEL, CentOS
sudo apt install smem    # Для Debian, Ubuntu

Запустите smem с параметрами для детального анализа:

smem -r -k -p

Эта команда отобразит информацию о памяти согласно каждому процессу, включая RSS (resident set size) и PSS (proportional set size), что даст вам точное представление о памяти, выделенной процессами.

Шаг 5: Найти утечки памяти

Если вы подозреваете утечке памяти, используйте инструменты, такие как valgrind и memcheck, чтобы проверить процессы на предмет потерь памяти.

Заключение

Важно понимать, что высокое использование памяти может быть вызвано неэффективным управлением памятью приложениями, которые выделяют память, но не используют её до конца. Регулярный мониторинг процессов с использованием упомянутых инструментов поможет вам лучше понять использование ресурсов вашей системы и избежать неожиданных сбоев.

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

Оцените материал
Добавить комментарий

Капча загружается...