Mac OS X non sta creando un file di scambio

4

Recentemente ho iniziato a riscontrare un sacco di problemi di memoria sul mio Mac con High Sierra. Piuttosto che la finestra di chiusura forzata in arrivo, il mio sistema si bloccherebbe completamente e l'unico modo per recuperare è forzare il riavvio.

Dopo alcune indagini, ho scoperto che il mio sistema non crea alcun file di scambio anche quando la pressione della memoria è critica. Non c'è nulla nella directory /private/var/vm/ .

Ho già provato sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist .

C'è un altro modo per abilitare lo swapping? O per eseguire alcuni diagnostici?

Ulteriori dettagli:

Sto avviando da un SSD Thunderbolt esterno (non so se questa è la causa).

Di seguito è riportato l'output da vm_stat . Se faccio qualcosa di intensivo di memoria in questa fase, il mio sistema si bloccherà.

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.

Modifica

Altri dettagli:

Questo è l'output di 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

E l'output di 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)

Soluzione (aggiornata): Sono state suggerite alcune buone soluzioni. Dopo aver rivisitato nuovamente il problema, consiglierei la soluzione di Lint di seguito. È il modo più generale che tiene conto delle modifiche nei nomi dei volumi.

    
posta kayoz 15.03.2018 - 10:32
fonte

8 risposte

2

Ho avuto lo stesso problema con High Sierra (e Mojave) da un SSD esterno. Non ho provato il suggerimento di Glorfindel ♦ di pulire il disco su Sierra su HFS + prima di ripristinare High Sierra, il che sembra molto lavoro.

Tuttavia, da gennaio ho usato il mio demone di lancio con uno script bash, simile alla soluzione di chrisgooley, tuttavia, il mio script controlla anche quale ID volume montare. Ho pensato di condividere la mia soluzione con il controllo dinamico per l'ID del volume corretto.

Inizialmente, avevo hardcoded anche l'ID del volume, ma questo era problematico perché ogni volta che il sistema si avviava con altre unità collegate, l'ID del volume cambierebbe il volume di swap che non riusciva a montare.

Il mio script e il demone sono in basso:

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>

Alcune note:

Cambia [/ path / to / script] nel plist dove mai hai posto lo script bash.

Rimuovi il # sulle linee eco nello script bash per risolvere i problemi (devi eseguire lo script in Terminal con sudo o specificare un percorso stdout nel plist).

Lo script controlla se esiste / private / var / vm / sleepimage. In caso contrario, il volume di scambio non viene montato e tenta di montare il volume corretto. Se lo fa, controllerà ancora altre quattro volte in intervalli di due minuti prima di uscire. Il motivo per cui l'ho aggiunto è perché ho scoperto che se avessi semplicemente provato a montare il volume non appena il demone fosse stato caricato, non avrebbe funzionato.

    
risposta data 13.11.2018 - 02:53
fonte
4

Ho avuto lo stesso problema quando ho installato High Sierra su un SSD esterno.

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

Soluzione :

  1. Crea un file plist come utente root e mettilo nella cartella /Library/LaunchDaemons/ . Deve essere scritto nella notazione inversa del dominio come questa:

    /Library/LaunchDaemons/local.mountdisk3s4.plist
    
  2. Copia i dati xml nel tuo file plist e cambia il nome del volume VM APFS con il tuo.

    <?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>
    

    Nel mio caso appare così:

    <?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. Riavvia il tuo Mac

risposta data 05.06.2018 - 16:40
fonte
3

Il volume VM APFS dedicato non è montato correttamente:

+-> 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

Dovrebbe essere montato su Mount Point / private / var / vm.

Inserire mount in Terminale dovrebbe rivelare qualcosa del tipo:

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

La ragione non è chiara. Almeno alcuni file di scambio sono stati creati in passato perché 2.1 GB (= due file di scambio a 1 GiB) vengono consumati dalla VM.

Una soluzione temporanea è specificare un'altra directory di file di scambio. Dopo disabilitare SIP , questo può essere ottenuto modificando il file /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist con sudo nano ... o LaunchControl .

originale:

<?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>

Se la directory / vm non esiste, crearla:

sudo mkdir /vm
sudo chmod 755 /vm

Riavvia il Mac in un secondo momento. Abilita nuovamente SIP!

Secondo me questo è correlato all'aggiornamento supplementare 10.13.3. Almeno nelle mie varie MV di Sierra Sierra sono state create altre cartelle / vm , ognuna contenente uno swapfile0 abbandonato. La directory di swap attuale è / private / var / vm - > disk1s4 (volume VM APFS) - testato con sudo memory_pressure -l critical in Terminale.

Devo approfondire ulteriormente questo argomento.

Per risolvere davvero il problema, rimuovere e riaggiungere il volume APFS della VM in qualche modo dovrebbe aiutare:

  • Ripristina il file predefinito com.apple.dynamic_pager.plist
  • Controlla se esiste la cartella / private / var / vm
  • Avvia la modalità di ripristino di High Sierra
  • Apri il terminale nella barra dei menu > Utilità e inserisci diskutil ap list per ottenere i dettagli APFS
  • Rimuovi il volume della VM APFS:

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

    Nel tuo caso av_vmUUID è 5DE0EA6B-CA57-4226-B038-2E256FCC5B98 così:

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

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

    con diskX: contenitore APFS Riferimento del contenitore con UUID 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10 visualizzato in diskutil ap list (probabilmente disk3, disk4 o disk5)

    Il volume verrà creato ma non verrà montato perché il punto di montaggio specificato non esiste nel sistema di base della modalità di ripristino!

  • Riavvia il Mac e controlla innanzitutto se VM è montato su / private / var / vm con mount . Provalo con sudo memory_pressure -l critical .
risposta data 16.03.2018 - 12:09
fonte
1

Ho lo stesso problema dopo l'aggiornamento. Il mio modo è semplicemente cancellare il contenitore APFS, quindi utilizzare Time Machine per ripristinare Sierra con HFS +, quindi ripristinare High Sierra con partizioni APFS. Di seguito sono le mie configurazioni che lo fanno funzionare.

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
    
risposta data 27.03.2018 - 14:16
fonte
1

Ho esattamente gli stessi sintomi. Ho installato High Sierra 10.13.4 su un SSD esterno con fulmine SSFS appena formattato. Activity Monitor non mostra spazi di swap e diskutil apfs list mostra che la partizione VM non è montata, come sopra. Mi sono ripetuto il panico quando ho esaurito la memoria (il mio computer ha solo 4 GB di RAM).

La mia soluzione, che non ho ancora testato, è quella di creare un clone di Carbon Copy del disco esterno, quindi cancellarlo e riformattarlo (usando il comando "Partition" di Utility Disco) come Mac OS Extended (Journaled), e quindi ripristinare utilizzando CCC. Questo dovrebbe restituirmi la mia VM.

    
risposta data 20.04.2018 - 01:30
fonte
1

Mi sono imbattuto in questo problema durante l'aggiornamento a Mojave. Il mio sistema operativo è installato su un SSD esterno. La mia correzione finì per essere simile a quella di Michael Golban ma avevo bisogno di un comando in più.

Ho finito per scrivere un piccolo script bash e caricarlo con un LaunchDaemon.

/usr/local/sbin/mount_swap.sh

#!/bin/bash
/sbin/mount_apfs disk3s4 /private/var/vm
diskutil mount -mountPoint /private/var/vm disk3s4

com.local.mountswap.plist

<?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>com.local.mountswap</string>
     <key>ProgramArguments</key>
     <array>
          <string>/usr/local/sbin/mount_swap.sh</string>
     </array>
     <key>KeepAlive</key>
     <dict>
    <key>SuccessfulExit</key>
    <false/>
     </dict>
</dict>
</plist>

Non appena questi comandi sono stati eseguiti durante il test, la riga "Swap Used" nel Monitor attività inizierà a mostrare valori positivi.

    
risposta data 18.10.2018 - 06:21
fonte
0

Anche in questa situazione, l'avvio da un SSD Samsung T5 collegato a USB3. Ho provato la soluzione di Lint, tuttavia nel mio caso il comando

/usr/sbin/diskutil list | grep "VM" | awk '{ print $7 }'

genera due risposte, poiché sia il disco rigido interno che l'SSD esterno contengono una partizione di swap (VM). Non riesco a trovare una soluzione a questo problema (automatizzando il processo di installazione all'avvio), quindi qualcuno può aiutarti?

    
risposta data 13.01.2019 - 12:29
fonte
-1

Mac OSX High Sierra è un derivato Linux di sorta, e molti SO Linux consigliano di disabilitare lo swap durante l'installazione su un SSD poiché il tipo di memoria utilizzato in una partizione di swap mette un carico elevato sul supporto magnetico dello ssd in un potenziale modo distruttivo. Quindi, direi che High Sierra disabilita lo spazio di swap su SSD come standard. La mia opzione preferita è installare lo spazio di swap su un'unità tradizionale separata.

link

    
risposta data 20.08.2018 - 17:25
fonte

Leggi altre domande sui tag