Informationen zum benannten gemeinsamen Speicher in / dev / shm

406
HCSF

Nehmen wir an, ich sehe eine Datei namens /dev/shm/some.segment

Wie kann ich herausfinden (mit Befehlszeilen):

  1. Die Prozesse, die damit verbunden sind?

  2. Der NUMA-Knoten, den es findet?

Für # 2 kann ich ein kleines C-Programm schreiben move_pages(), um das herauszufinden. Frage mich einfach, ob es etwas Praktisches gibt.

Ich bin auf CentOS 7, wenn es darauf ankommt.

Vielen Dank!

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

Update (Versucht Harrymc's Vorschlag):

[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 Antwort auf die Frage

0
harrymc

Der lsofBefehl sollte den größten Teil dieser Informationen liefern.

Sie können die Ausgabe für die shmid, die Sie möglicherweise verwenden, anzeigen ipcs -m.

Danke für deine Antwort. Ich habe jedoch festgestellt, dass die Ausgabe von "lsof" nicht "shmid" enthält. Das Merkwürdige ist, dass die Größen in `ipcs -m` mit keiner Größe in` ls -l / dev / shm` übereinstimmen. "ipcs -m" sagt mir nicht, welche Prozesse (PIDs) mit dem spezifischen SHM verknüpft sind. Das sagt mir, wie viele Prozesse mit dem spezifischen SHM verknüpft sind. Beide Befehle zeigen nicht an, auf welchem ​​NUMA-Knoten sich die SHM befindet. HCSF vor 6 Jahren 0
Seltsam. Könnten Sie diese Ausgaben zu Ihrem Beitrag hinzufügen? harrymc vor 6 Jahren 0
Die Diskrepanz könnte darauf zurückzuführen sein, dass ipcs SysV shm meldet, während / dev / shm für POSIX shm steht. Ich bin mir nicht sicher, ob es sich bei diesem Programm sicher ist, dass einige Programme dort Dateien direkt erstellen, ohne eine spezielle API zu verwenden, und daher würden nur fuser / lsof mit diesen funktionieren. grawity vor 6 Jahren 0
Versuchen Sie `grep / proc / * / maps`. Siehe auch [dieses Skript] (https://github.com/curu/linuxplayer/blob/master/scripts/who_attach_shm.pl). harrymc vor 6 Jahren 0
@grawity ist möglich, da ich gerade den Vorschlag von harrymc mit `grep 'ausprobiert habe / proc / * / maps` mit paar shmids und alle endeten mit `/ SYSV [einige Zahlen]` HCSF vor 6 Jahren 0
@ harrymc Ich habe mir das Skript angesehen, mit dem Sie verlinkt haben. Mit "/ SYSV" kann auch nach einem Muster gesucht werden. Es scheint also, dass "/ proc / * / maps" nur auf SYSV basierenden Shared Memory enthält. HCSF vor 6 Jahren 0
Könntest du auch die Ausgabe des grep posten? Stellen Sie sicher, dass alle Ausgaben in Ihrem Beitrag zu den gleichen Prozessen gehören. harrymc vor 6 Jahren 0
Und warum haben Sie nicht "ipcs -pm" ausgeführt? Daraus ergeben sich mindestens zwei Prozesse: Schöpfer und Nachfolger. harrymc vor 6 Jahren 0
@harrymc Gerade gepostet (alle Befehle wurden in einer Sitzung ausgeführt). 'ipcs -pm' gibt mir tatsächlich 2 PIDs - Ersteller und letzter Zugriff. Sie sagen mir jedoch nicht, welche Prozesse derzeit an den SHM gebunden sind (meine ursprüngliche Frage # 1). Vielen Dank. HCSF vor 6 Jahren 0