15 votes

Mac OS X ne crée pas de fichier d'échange (swap)

J'ai récemment commencé à rencontrer de nombreux problèmes de mémoire sur mon mac fonctionnant sous High Sierra. Plutôt que de faire apparaître la fenêtre de sortie forcée, mon système se figeait complètement et la seule façon de le récupérer était de forcer un redémarrage.

Après quelques recherches, j'ai découvert que mon système ne crée pas de fichiers d'échange même lorsque la pression mémoire est critique. Il n'y a rien dans le /private/var/vm/ répertoire.

J'ai déjà essayé sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist .

Existe-t-il un autre moyen d'activer le swapping ? Ou d'effectuer des diagnostics ?

Détails supplémentaires :

Je démarre depuis un SSD Thunderbolt externe (je ne sais pas si c'est la cause).

Voici le résultat de vm_stat . Si je fais quelque chose d'intensif en mémoire à ce stade, mon système se fige.

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                                4116.
Pages active:                            854231.
Pages inactive:                          825841.
Pages speculative:                        27754.
Pages throttled:                              0.
Pages wired down:                        606483.
Pages purgeable:                          22070.
“Translation faults”:                  75731290.
Pages copy-on-write:                     401121.
Pages zero filled:                     49766457.
Pages reactivated:                     17690835.
Pages purged:                           1577284.
File-backed pages:                       503400.
Anonymous pages:                        1204426.
Pages stored in compressor:             6563399.
Pages occupied by compressor:           1875311.
Decompressions:                        21012443.
Compressions:                          32102441.
Pageins:                                2172708.
Pageouts:                                 35123.
Swapins:                                      0.
Swapouts:                                     0.

Editar:

Quelques détails supplémentaires :

C'est la sortie de diskutil ap list

APFS Container (1 found)
|
+-- Container disk4 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10
    ====================================================
    APFS Container Reference:     disk4
    Capacity Ceiling (Size):      499898105856 B (499.9 GB)
    Capacity In Use By Volumes:   452259872768 B (452.3 GB) (90.5% used)
    Capacity Available:           47638233088 B (47.6 GB) (9.5% free)
    |
    +-< Physical Store disk3s2 39853349-6B62-4961-99DE-811BA56465EC
    |   -----------------------------------------------------------
    |   APFS Physical Store Disk:   disk3s2
    |   Size:                       499898105856 B (499.9 GB)
    |
    +-> Volume disk4s1 99688E85-E9EF-3688-A324-913D00FF6A0E
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk4s1 (No specific role)
    |   Name:                      System (Case-insensitive)
    |   Mount Point:               /
    |   Capacity Consumed:         449420767232 B (449.4 GB)
    |   FileVault:                 No
    |
    +-> Volume disk4s2 729366E4-48AA-45A3-95DA-8871B8A29778
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk4s2 (Preboot)
    |   Name:                      Preboot (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         20357120 B (20.4 MB)
    |   FileVault:                 No
    |
    +-> Volume disk4s3 431C0191-2B1F-480C-94D0-AF4748E6D213
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk4s3 (Recovery)
    |   Name:                      Recovery (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         509820928 B (509.8 MB)
    |   FileVault:                 No
    |
    +-> Volume disk4s4 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
        ---------------------------------------------------
        APFS Volume Disk (Role):   disk4s4 (VM)
        Name:                      VM (Case-insensitive)
        Mount Point:               Not Mounted
        Capacity Consumed:         2147504128 B (2.1 GB)
        FileVault:                 No

Et la sortie de mount :

/dev/disk4s1 on / (apfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk2 on /Volumes/Storage (hfs, local, journaled)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)

Solution (mise à jour) : Un certain nombre de bonnes solutions ont été suggérées. Après avoir réexaminé la question, je recommande la solution de lint ci-dessous. C'est la solution la plus générale qui tient compte des changements de noms de volumes.

9voto

Michael Golban Points 91

J'ai eu le même problème lorsque j'ai installé High Sierra sur un SSD externe.

Volume disk3s4 647DA4A9-7E85-4523-A4D2-F0392D3789D4
        ---------------------------------------------------
        APFS Volume Disk (Role):   disk3s4 (VM)
        Name:                      VM (Case-insensitive)
        Mount Point:               Not Mounted
        Capacity Consumed:         4294987776 B (4.3 GB)
        FileVault:                 No

Solution :

  1. Créez un fichier plist en tant qu'utilisateur Root et mettez-le dans /Library/LaunchDaemons/ dossier. Il doit être écrit en notation inverse du domaine comme ceci :

    /Library/LaunchDaemons/local.mountdisk3s4.plist
  2. Copiez simplement ces données xml dans votre fichier plist et changez le nom du volume APFS VM avec le vôtre.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
         <key>Label</key>
         <string>THE NAME OF FILE</string>
         <key>ProgramArguments</key>
         <array>
              <string>/sbin/mount_apfs</string>
              <string>YOUR APFS VOLUME</string>
              <string>/private/var/vm</string>
         </array>
         <key>KeepAlive</key>
         <dict>
        <key>SuccessfulExit</key>
        <false/>
         </dict>    
    </dict>
    </plist>

    Dans mon cas, cela ressemble à ceci :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
         <key>Label</key>
         <string>local.mountdisk3s4</string>
         <key>ProgramArguments</key>
         <array>
              <string>/sbin/mount_apfs</string>
              <string>disk3s4</string>
              <string>/private/var/vm</string>
         </array>
         <key>KeepAlive</key>
         <dict>
        <key>SuccessfulExit</key>
        <false/>
         </dict>    
    </dict>
    </plist>
  3. Redémarrez votre Mac

8voto

lint Points 96

J'ai eu le même problème en utilisant High Sierra (et Mojave depuis) sur un SSD externe. Je n'ai pas essayé la suggestion de Glorfindel de nettoyer le disque vers Sierra sur HFS+ avant de restaurer vers High Sierra, ce qui semble être beaucoup de travail.

J'ai cependant utilisé mon propre démon de lancement avec un script bash depuis janvier, similaire à la solution de chrisgooley, cependant, mon script vérifie également quel ID de volume monter. J'ai pensé que je partagerais ma solution avec la vérification dynamique de l'ID de volume correct.

Au départ, j'ai également codé en dur l'ID du volume, mais cela posait problème car à chaque fois que le système démarrait avec des disques supplémentaires connectés, l'ID du volume changeait et le volume swap ne se montait pas.

Mon script et mon daemon sont ci-dessous :

mountvm.sh

#!/bin/bash
# Mount the APFS VM volume if it isn't already mounted

VM_VOLUME=$(/usr/sbin/diskutil list | grep "VM" | awk '{ print $7 }') 
# echo "VM Volume is $VM_VOLUME"
for i in {1..5}
do
    if [ ! -e /private/var/vm/sleepimage ]
    then
#       echo "$(date "+%a %d/%m/%Y %I:%M:%S%p") > VM volume not yet mounted..."
#       echo -n "$(date "+%a %d/%m/%Y %I:%M:%S%p") > "
        /usr/sbin/diskutil mount -mountPoint /private/var/vm/ $VM_VOLUME
        break
    else
#       echo "$(date "+%a %d/%m/%Y %I:%M:%S%p") > VM volume already mounted..."
        if [ $i -lt 6 ]
        then
#           echo -n "$(date "+%a %d/%m/%Y %I:%M:%S%p") > Confirming in "
            for count in {2..1}
            do
#               echo -n "$count min..."
                sleep 60
            done
            echo
        fi
    fi
done

exit 0

com.local.mountvm.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.local.mountvm</string>
    <key>ProgramArguments</key>
    <array>
        <string>[/path/to/script]/mountvm.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Quelques notes :

Changez le [/path/to/script] dans le plist à l'endroit où vous placez le bash script.

Supprimez le # sur les lignes d'écho dans le script de bash pour résoudre le problème (vous devrez exécuter le script dans Terminal avec sudo ou spécifier un chemin stdout dans la plist).

Le script vérifie si /private/var/vm/sleepimage existe. S'il n'existe pas, alors le volume de swap n'est pas monté et tente de monter le volume correct. Si c'est le cas, il vérifiera à nouveau quatre fois à intervalles de deux minutes avant de se terminer. La raison pour laquelle j'ai ajouté cela est que j'ai constaté que si j'essayais simplement de monter le volume dès que le démon se chargeait, cela échouait.

4voto

klanomath Points 63400

Le volume APFS de la VM dédiée n'est pas monté correctement :

+-> Volume disk4s4 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
    ---------------------------------------------------
    APFS Volume Disk (Role):   disk4s4 (VM)
    Name:                      VM (Case-insensitive)
    Mount Point:               Not Mounted
    Capacity Consumed:         2147504128 B (2.1 GB)
    FileVault:                 No

Il doit être monté sur le Le Mont /private/var/vm.

Entrer sur mount dans le Terminal devrait révéler quelque chose comme :

...
/dev/disk4s4 on /private/var/vm (apfs, local, noexec, journaled, noatime, nobrowse)
...

La raison n'est pas claire. Au moins quelques fichiers swap ont été créés dans le passé parce que 2.1 GB (= deux swapfiles à 1 GiB) sont consommés par VM.


Une solution de contournement temporaire est de spécifier un autre répertoire de fichiers d'échange. Après désactivation de SIP cela peut être réalisé en modifiant le fichier /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist avec sudo nano ... o LaunchControl .

Original :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
    </array>
</dict>
</plist>

Mod :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
        <string>-F</string>
        <string>/vm/swapfile</string>
    </array>
</dict>
</plist>

Si le répertoire /vm n'existe pas, créez-le :

sudo mkdir /vm
sudo chmod 755 /vm

Redémarrez ensuite votre Mac. Activez à nouveau le SIP !


À mon avis, ce problème est lié à la mise à jour supplémentaire 10.13.3. En tout cas, dans mes différentes VM High Sierra, des dossiers supplémentaires /vm ont été créés - chacun contenant un swapfile0 abandonné. Le répertoire swap réel est /private/var/vm -> disk1s4 (volume APFS VM) cependant - testé avec sudo memory_pressure -l critical dans le terminal.

Je dois approfondir cette question.


Pour vraiment résoudre le problème, supprimer et réinsérer le volume APFS VM cassé devrait aider :

  • Restaurer le fichier com.apple.dynamic_pager.plist par défaut

  • Vérifiez si le dossier /private/var/vm existe.

  • Démarrer en mode de récupération High Sierra

  • Ouvrez Terminal dans la barre de menu > Utilitaires et entrez diskutil ap list pour obtenir les détails de l'APFS

  • Supprimez le volume APFS VM :

    diskutil ap deleteVolume <av_vmUUID> #<av_vmUUID>: UUID of the APFS Volume with the VM role

    Dans votre cas av_vmUUID est 5DE0EA6B-CA57-4226-B038-2E256FCC5B98 donc :

    diskutil ap deleteVolume 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
  • Ajoutez un volume APFS VM :

    diskutil ap addVolume diskX APFS VM -mountpoint /private/var/vm -role V

    avec diskX : APFS Container Référence du conteneur avec l'UUID 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10 indiqué dans la fenêtre diskutil ap list (probablement disque3, disque4 ou disque5)

    Le volume sera créé mais il ne sera pas monté car le point de montage spécifié n'existe pas dans le système de base du mode de récupération !

  • Redémarrez votre Mac et vérifiez d'abord si la VM est montée sur /private/var/vm avec mount . Le tester avec sudo memory_pressure -l critical .

1voto

Chang-Han Huang Points 11

J'ai le même problème après la mise à jour. Ma méthode consiste simplement à effacer le conteneur APFS puis à utiliser Time Machine pour restaurer Sierra avec HFS+ puis restaurer High Sierra avec les partitions APFS. Voici mes configurations pour que cela fonctionne.

MacBook-Pro:~ root# diskutil apfs list
APFS Container (1 found)
|
+-- Container disk1 96CC8155-6433-4240-B445-3E909F80E1CF
    ====================================================
    APFS Container Reference:     disk1
    Capacity Ceiling (Size):      250790436864 B (250.8 GB)
    Capacity In Use By Volumes:   221076267008 B (221.1 GB) (88.2% used)
    Capacity Available:           29714169856 B (29.7 GB) (11.8% free)
    |
    +-< Physical Store disk0s2 0D0BAEFE-FBC0-496D-9260-5F2A5D6B0793
    |   -----------------------------------------------------------
    |   APFS Physical Store Disk:   disk0s2
    |   Size:                       250790436864 B (250.8 GB)
    |
    +-> Volume disk1s1 5AA2CDA5-EAD1-4D9C-BEE0-E85957526A37
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk1s1 (No specific role)
    |   Name:                      Macintosh HD (Case-insensitive)
    |   Mount Point:               /
    |   Capacity Consumed:         218261549056 B (218.3 GB)
    |   FileVault:                 No
    |
    +-> Volume disk1s2 4BC0480C-2FED-4B48-A3A5-5E133B707776
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk1s2 (Preboot)
    |   Name:                      Preboot (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         19046400 B (19.0 MB)
    |   FileVault:                 No
    |
    +-> Volume disk1s3 DF8D07CD-27C0-4EB2-A939-2D3E2E64EB66
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk1s3 (Recovery)
    |   Name:                      Recovery (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         509820928 B (509.8 MB)
    |   FileVault:                 No
    |
    +-> Volume disk1s4 27BDB6EB-9BE8-417E-8B03-D2C03E64DD30
        ---------------------------------------------------
        APFS Volume Disk (Role):   disk1s4 (VM)
        Name:                      VM (Case-insensitive)
        Mount Point:               /private/var/vm
        Capacity Consumed:         2147504128 B (2.1 GB)
        FileVault:                 No
MacBook-Pro:~ root# 
MacBook-Pro:~ root# 
MacBook-Pro:~ root# diskutil mount -mountPoint /private/var/vm disk1s4
Volume VM on disk1s4 mounted
MacBook-Pro:~ root# 

MacBook-Pro:~ root# vi /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MacBook-Pro:~ root# cat /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
                <string>-F</string>
                <string>/private/var/vm/swapfile</string>
    </array>
</dict>
</plist>
MacBook-Pro:~ root# ls -l /sbin/dynamic_pager
-rwxr-xr-x  1 root  wheel  43920  1 19 16:32 /sbin/dynamic_pager
MacBook-Pro:~ root# ls -l /private/var/vm/swapfile*
-rw-------  1 root  wheel  1073741824  3 28 00:36 /private/var/vm/swapfile0

1voto

Alan Harper Points 21

J'ai exactement les mêmes symptômes. J'ai installé High Sierra 10.13.4 sur un SSD externe thunderbolt APFS fraîchement formaté. Le moniteur d'activité ne montre aucun espace d'échange, et diskutil apfs list montre que la partition VM n'est pas montée, comme ci-dessus. J'ai eu des paniques répétées lorsque je manquais de mémoire (mon ordinateur n'a que 4 Go de RAM).

Ma solution, que je n'ai pas encore testée, est de faire un Carbon Copy Clone du disque externe, puis de l'effacer et de le reformater (en utilisant la commande "Partition" de Disk Utility) en Mac OS Extended (Journaled), puis de le restaurer en utilisant CCC. Cela devrait me permettre de récupérer ma VM.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X