Shared Memory ist eine Möglichkeit, den Status zwischen Prozessen zu teilen. Shared Memory ist, wie der Name schon sagt, eine Methode zum „Teilen“ von Daten zwischen Prozessen. Beide Prozesse definieren denselben Speicherbereich als „shared“ und können dann Informationen austauschen, indem sie einfach hineinschreiben. Dies (früher und immer noch) ist etwas schneller als die Alternative, Netzwerk- oder Pipe-basierte Nachrichten zwischen Prozessen zu senden.
Wenn Sie den Speicher als Mittel zum Speichern von Daten sehen, kann eine Datei auf einem Dateisystem als gemeinsam genutzter Speicher (dh gemeinsam genutzte Datei) angesehen werden. Es ist schwierig, gemeinsames Gedächtnis zu berücksichtigen. Gehört es zu einem Prozess? Beide? Weder? Wenn wir den Speicher, der zu mehreren Prozessen gehört, naiv summieren, „überzählen“ wir grob.
Wie der Name schon sagt, bezieht sich Shared (Virtual) Memory auf virtuellen Speicher, der von mehr als einem Prozess gemeinsam genutzt wird und dann von mehreren Programmen gleichzeitig verwendet werden kann. Obwohl virtueller Speicher es Prozessen ermöglicht, separate (virtuelle) Adressräume zu haben, gibt es Zeiten, in denen Sie Prozesse benötigen, um Speicher gemeinsam zu nutzen. Shared Memory (SHM) ist eine weitere Methode der Interprozesskommunikation (IPC), bei der sich mehrere Prozesse einen einzigen Speicherblock zur Kommunikation teilen.
Shared Memory bietet Prozessen die schnellste Möglichkeit, große Datenmengen aneinander weiterzuleiten. /dev/shm ist nichts anderes als die Implementierung des traditionellen Shared-Memory-Konzepts. Es ist ein effizientes Mittel, um Daten zwischen Programmen zu übertragen. Ein Programm erstellt einen Speicherabschnitt, auf den andere Prozesse (falls zulässig) zugreifen können. Dies wird zu einer Beschleunigung der Dinge unter Linux führen.
Das Problem
Bei jedem Neustart des Servers ändert sich die /dev/shm-Berechtigung:
$ ls -alrt /dev/ | grep shm drwxr-xr-t. 2 root root 60 jul 6 11:14 shm
Ursprüngliche Genehmigung (1777):
# ls -ld /dev/shm drwxrwxrwt. 2 root root 200 Aug 20 03:44 /dev/shm
Vorhandene Berechtigung(1754):
$ ls -alrt /dev/ | grep shm drwxr-xr-t. 2 root root 60 jul 6 11:14 shm
Die Lösung
Die Ursache des Problems liegt im vorhandenen Initscripts-Paket [initscripts-9.49.37-1.0.1.el7_3.1.x86_64].
Problemumgehung
Schritt 1 :Dienst maskieren (rhel-import-state):
# systemctl mask rhel-import-state
Schritt 2 :Überprüfen Sie den Status des Dienstes. Es sieht ähnlich aus wie unten:
rhel-import-state.service Loaded: masked (/dev/null; bad) << Active: active (exited) since Fri 2017-07-21 18:28:05 EDT; 2 weeks 3 days ago Main PID: 600 (code=exited, status=0/SUCCESS) CGroup: /system.slice/rhel-import-state.service
Schritt 3 :Starten Sie den Computer neu und bestätigen Sie, ob das gleiche Problem erneut auftritt oder nicht.
Hinweis :Dies ist der Workaround-Aktionsplan. Aktualisieren Sie für eine dauerhafte Lösung die initscripts-Paketversion auf 9.49.39-1.0.1, die in CentOS/RHEL7 Update 4 enthalten ist.Rückgängigmachen der Änderungen
Sie können die Änderungen auch rückgängig machen, indem Sie den folgenden Befehl ausführen, um den maskierten Dienst zu demaskieren.
# systemctl unmask rhel-import-state.service # systemctl status rhel-import-state.service