La mémoire partagée est un moyen de partager l'état entre les processus. La mémoire partagée, comme son nom l'indique, est une méthode pour « partager » des données entre des processus. Les deux processus définissent la même zone mémoire comme "partagée", et ils peuvent alors échanger des informations simplement en y écrivant. Ceci (était, et est toujours un peu) plus rapide que l'alternative consistant à envoyer des messages réseau ou pipe entre les processus.
Si vous considérez la mémoire comme un moyen de stocker des données, un fichier sur un système de fichiers peut être considéré comme une mémoire partagée (c'est-à-dire un fichier partagé). Il est difficile de rendre compte de la mémoire partagée. Appartient-il à un processus ? Tous les deux? Ni? Si nous additionnons naïvement la mémoire appartenant à plusieurs processus, nous "surcomptons" grossièrement.
Comme son nom l'indique, la mémoire partagée (virtuelle) fait référence à la mémoire virtuelle qui est partagée par plusieurs processus et peut ensuite être utilisée par plusieurs programmes simultanément. Bien que la mémoire virtuelle permette aux processus d'avoir des espaces d'adressage (virtuels) séparés, il y a des moments où vous avez besoin de processus pour partager la mémoire. La mémoire partagée (SHM) est une autre méthode de communication interprocessus (IPC) dans laquelle plusieurs processus partagent un seul bloc de mémoire pour communiquer.
La mémoire partagée offre aux processus le moyen le plus rapide de se transmettre de grandes quantités de données. /dev/shm n'est rien d'autre qu'une implémentation du concept traditionnel de mémoire partagée. C'est un moyen efficace de transmettre des données entre les programmes. Un programme créera une portion de mémoire, à laquelle d'autres processus (si autorisés) peuvent accéder. Cela se traduira par une accélération des choses sur Linux.
Le problème
À chaque redémarrage du serveur, la permission /dev/shm change :
$ ls -alrt /dev/ | grep shm drwxr-xr-t. 2 root root 60 jul 6 11:14 shm
Autorisation d'origine (1777) :
# ls -ld /dev/shm drwxrwxrwt. 2 root root 200 Aug 20 03:44 /dev/shm
Autorisation existante (1754) :
$ ls -alrt /dev/ | grep shm drwxr-xr-t. 2 root root 60 jul 6 11:14 shm
La solution
La cause du problème est liée au package initscripts existant [initscripts-9.49.37-1.0.1.el7_3.1.x86_64].
Solution
Étape 1 :Masquez le service (rhel-import-state):
# systemctl mask rhel-import-state
Étape 2 :vérifier l'état du service. Il ressemblera à ci-dessous :
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
Étape 3 :Redémarrez la machine et confirmez si le même problème se reproduit ou non.
Remarque :Il s'agit du plan d'action de contournement. Pour une résolution permanente, mettez à niveau la version du package initscripts vers 9.49.39-1.0.1, qui est incluse dans la mise à jour 4 de CentOS/RHEL7.Annuler les modifications
Vous pouvez également annuler les modifications en exécutant la commande ci-dessous pour démasquer le service masqué.
# systemctl unmask rhel-import-state.service # systemctl status rhel-import-state.service