Информация об именованной общей памяти в / dev / shm

334
HCSF

Допустим, я вижу файл с именем /dev/shm/some.segment

Как я могу узнать (с помощью командной строки):

  1. Процессы, которые с ним связаны?

  2. Узел NUMA, который он находит?

Для # 2 я могу написать небольшую программу на C с move_pages() чтобы выяснить это. Просто удивляйтесь, есть ли что-нибудь полезное.

Я нахожусь на CentOS 7, если это имеет значение.

Спасибо!

================

Обновление (предложение Харримца):

[myuser@mylinux ~]$ ipcs -pm  ------ Shared Memory Creator/Last-op PIDs -------- shmid owner cpid lpid  131072 myuser 2999 3144  163841 myuser 2999 3144  262146 myuser 3226 3288  753667 myuser 3288 2006  655364 myuser 3226 2006  360453 myuser 2819 4036  622598 myuser 3226 2006  589831 myuser 3226 2006  524296 myuser 3226 2006  786441 myuser 3226 2006  819210 myuser 3226 2006  917515 myuser 4042 4050  950284 myuser 4099 4099  1048589 myuser 4106 4839   [myuser@mylinux ~]$ sudo grep 131072 /proc/*/maps /proc/2006/maps:7f252828b000-7f252830b000 rw-s 00000000 00:04 131072 /SYSV00000000 (deleted) /proc/2999/maps:7f2854017000-7f2854097000 rw-s 00000000 00:04 131072 /SYSV00000000 (deleted) [myuser@mylinux ~]$ sudo grep 163841 /proc/*/maps /proc/2006/maps:7f2527e8b000-7f252828b000 rw-s 00000000 00:04 163841 /SYSV00000000 (deleted) /proc/2999/maps:7f2844a12000-7f2844e12000 rw-s 00000000 00:04 163841 /SYSV00000000 (deleted) [myuser@mylinux ~]$ sudo grep 262146 /proc/*/maps /proc/2006/maps:7f2527e2b000-7f2527e8b000 rw-s 00000000 00:04 262146 /SYSV00000000 (deleted) /proc/3226/maps:7f28ce834000-7f28ce894000 rw-s 00000000 00:04 262146 /SYSV00000000 (deleted) [myuser@mylinux ~]$ sudo grep 1048589 /proc/*/maps /proc/2006/maps:7f2524c99000-7f2525499000 rw-s 00000000 00:04 1048589 /SYSV00000000 (deleted) /proc/4106/maps:7fe5af800000-7fe5b0000000 rw-s 00000000 00:04 1048589 /SYSV00000000 (deleted) [myuser@mylinux ~]$ ll /dev/shm/ total 1000 -rwx------ 1 myuser myuser 67108904 Sep 23 09:42 pulse-shm-1190977916 -rwx------ 1 myuser myuser 67108904 Sep 23 09:48 pulse-shm-1218108161 -rwx------ 1 myuser myuser 67108904 Sep 23 10:03 pulse-shm-1238825830 -rwx------ 1 myuser myuser 67108904 Sep 23 10:03 pulse-shm-13579424 -rwx------ 1 myuser myuser 67108904 Sep 23 09:42 pulse-shm-2544170821 -rwx------ 1 gdm gdm 67108904 Sep 23 09:42 pulse-shm-2626080508 -rwx------ 1 gdm gdm 67108904 Sep 23 09:42 pulse-shm-3289673610 -rwx------ 1 myuser myuser 67108904 Sep 23 09:42 pulse-shm-4099527713 -rwx------ 1 myuser myuser 67108904 Sep 23 09:42 pulse-shm-52369360 [myuser@mylinux ~]$ lsof /dev/shm/pulse-shm-1190977916 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pulseaudi 2663 myuser mem REG 0,19 67108904 34513 /dev/shm/pulse-shm-1190977916 [myuser@mylinux ~]$ ps aux | grep 2663 myuser 2663 0.2 0.0 640560 8044 ? S<l 09:42 0:03 /usr/bin/pulseaudio --start --log-target=syslog myuser 8144 0.0 0.0 112712 972 pts/0 S+ 10:05 0:00 grep --color=auto 2663 [myuser@mylinux ~]$  
0

1 ответ на вопрос

0
harrymc

Команда lsofдолжна предоставить большую часть этой информации.

Вы можете получить его вывод для shmid, который вы можете найти используя ipcs -m.

Спасибо за Ваш ответ. Но я заметил, что вывод `lsof` не содержит` shmid`. И странно то, что размеры в `ipcs -m` не соответствуют размерам в` ls -l / dev / shm`. `ipcs -m` не сообщает мне, какие процессы (PID) связаны с конкретным SHM. То есть, он говорит мне, сколько процессов связано с конкретным SHM. Обе команды не показывают, на каком узле NUMA находится SHM. HCSF 6 лет назад 0
Странный. Не могли бы вы добавить эти выводы в свой пост? harrymc 6 лет назад 0
Расхождение может быть связано с тем, что ipcs сообщает SysV shm, а / dev / shm для POSIX shm? Я не уверен в этом, я уверен, однако, что некоторые программы просто создают файлы там напрямую, без использования какого-либо специального API, и поэтому с ними будет работать только fuser / lsof. grawity 6 лет назад 0
Попробуйте `grep / Proc / * / maps`. Смотрите также [этот скрипт] (https://github.com/curu/linuxplayer/blob/master/scripts/who_attach_shm.pl). harrymc 6 лет назад 0
@ Grawity это возможно, так как я только что попробовал предложение Харримка с `grep / proc / * / maps` с парой шмидов, и все заканчиваются на `/ SYSV [некоторые числа]` HCSF 6 лет назад 0
@harrymc Я посмотрел на скрипт, на который ты ссылался. Он также жестко запрограммирован на поиск шаблона с помощью «/ SYSV». Похоже, `/ proc / * / maps` содержит только общую память на основе SYSV? HCSF 6 лет назад 0
Не могли бы вы также опубликовать вывод grep? Убедитесь, что все выходы в вашем посте принадлежат к одним и тем же процессам. harrymc 6 лет назад 0
А почему вы не запускали `ipcs -pm`? Это дает как минимум два процесса: создатель и последний прикрепленный. harrymc 6 лет назад 0
@harrymc Только что опубликовано (все команды выполнялись за 1 сеанс). `ipcs -pm` действительно дает мне 2 PID - создатель и последний доступ. Но они не говорят мне, какие процессы в настоящее время подключены к SHM (мой первый вопрос № 1). Благодарю. HCSF 6 лет назад 0

Похожие вопросы