Mac OS X no está creando un archivo de intercambio

3

Recientemente comencé a tener muchos problemas de memoria en mi mac que ejecutaba High Sierra. En lugar de que aparezca la ventana de forzar la salida, mi sistema se congelaría completamente y la única forma de recuperación es forzar un reinicio.

Después de investigar un poco, descubrí que mi sistema no está creando ningún archivo de intercambio, incluso cuando la presión de la memoria es crítica. No hay nada en el directorio /private/var/vm/ .

Ya he probado sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist .

¿Hay alguna otra manera de habilitar el intercambio? ¿O para ejecutar algunos diagnósticos?

Detalles adicionales:

Estoy arrancando desde un SSD externo Thunderbolt (no sé si esta es la causa).

A continuación se muestra la salida de vm_stat . Si hago algo de memoria intensiva en esta etapa, mi sistema se congelará.

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:

Algunos detalles más:

Esta es la salida 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

Y la salida 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)

Solución (actualizada): Una serie de buenas soluciones sugeridas. Después de volver a revisar el problema, recomendaría la solución de pelusa a continuación. Es la forma más general que tiene en cuenta los cambios en los nombres de volúmenes.

    
pregunta kayoz 15.03.2018 - 10:32

7 respuestas

2

He tenido el mismo problema al ejecutar High Sierra (y Mojave desde entonces) desde un SSD externo. No he intentado la sugerencia de Glorfindel ♦ de limpiar el disco de Sierra en HFS + antes de restaurarlo en High Sierra, lo que parece mucho trabajo.

Sin embargo, he estado usando mi propio demonio de lanzamiento con un script bash desde enero, similar a la solución de chrisgooley, sin embargo, mi script también comprueba qué ID de volumen se debe montar. Pensé que compartiría mi solución con la verificación dinámica para el ID de volumen correcto.

Inicialmente, también codifiqué el ID de volumen, pero esto era problemático porque cada vez que el sistema arrancaba con unidades adicionales conectadas, el ID de volumen cambiaría y el volumen de intercambio no se montaría.

Mi script y mi demonio están abajo:

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>

Algunas notas:

Cambie la [/ ruta / a / script] en el plist a donde quiera que coloque el script de bash.

Elimine el # en las líneas de eco en la secuencia de comandos de bash para solucionar problemas (deberá ejecutar la secuencia de comandos en Terminal con sudo o especificar una ruta de salida estándar en la lista).

El script comprueba si existe / private / var / vm / sleepimage. Si no lo hace, entonces el volumen de intercambio no está montado e intenta montar el volumen correcto. Si lo hace, comprobará de nuevo cuatro veces más en intervalos de dos minutos antes de salir. La razón por la que agregué esto fue porque descubrí que si simplemente intentaba montar el volumen tan pronto como se cargaba el demonio, fallaría.

    
respondido por el lint 13.11.2018 - 02:53
4

Tuve el mismo problema cuando instalé High Sierra en un SSD externo.

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

Solución :

  1. Cree un archivo plist como usuario root y póngalo en la carpeta /Library/LaunchDaemons/ . Debe estar escrito en notación de dominio inverso como este:

    /Library/LaunchDaemons/local.mountdisk3s4.plist
    
  2. Simplemente copie estos datos xml en su archivo plist y cambie el nombre de APFS VM Volume con el suyo.

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

    En mi caso, se ve así:

    <?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. Reinicia tu Mac

respondido por el Michael Golban 05.06.2018 - 16:40
3

El volumen dedicado de APFS de VM no se monta correctamente:

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

Se debe montar en el Mount Point / private / var / vm.

Ingresar mount en la Terminal debería revelar algo como:

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

La razón no está clara. Al menos algunos archivos de intercambio se crearon en el pasado porque la máquina virtual consume 2.1 GB (= dos archivos de intercambio a 1 GiB).

Una solución temporal es especificar otro directorio de archivos de intercambio. Después de desactivar SIP , esto se puede lograr modificando el archivo /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist con 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 el directorio / vm no existe, créelo:

sudo mkdir /vm
sudo chmod 755 /vm

Reinicia tu Mac después. Habilitar SIP de nuevo!

En mi opinión, esto está relacionado con la Actualización complementaria 10.13.3. Al menos en mis varias High Sierra VMs se crearon carpetas adicionales / vm , cada una de las cuales contiene un archivo de intercambio abandonado. El directorio de intercambio real es / private / var / vm - > disk1s4 (volumen de máquina virtual APFS) aunque - probado con sudo memory_pressure -l critical en Terminal.

Tengo que seguir investigando esto.

Para solucionar realmente el problema, eliminar y volver a agregar el volumen de VM APFS roto de alguna manera podría ayudar:

  • Restaure el archivo com.apple.dynamic_pager.plist predeterminado
  • Compruebe si existe la carpeta / private / var / vm
  • Arrancar en modo de recuperación High Sierra
  • Abrir Terminal en la barra de menú > Utilidades e ingrese diskutil ap list para obtener los detalles de APFS
  • Eliminar el volumen de la máquina virtual APFS:

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

    En su caso, av_vmUUID es 5DE0EA6B-CA57-4226-B038-2E256FCC5B98 así que:

    diskutil ap deleteVolume 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
    
  • Agregar un volumen de VM APFS:

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

    con diskX: Referencia del contenedor APFS del contenedor con el UUID 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10 que se muestra en el diskutil ap list (probablemente disk3, disk4 o disk5)

    El volumen se creará, pero no se montará porque el punto de montaje especificado no existe en el sistema base del modo de recuperación.

  • Reinicie su Mac y primero verifique si la VM está montada en / private / var / vm con mount . La prueba con sudo memory_pressure -l critical .
respondido por el klanomath 16.03.2018 - 12:09
1

Tengo el mismo problema después de la actualización. A mi manera, simplemente está borrando el contenedor APFS y luego utilizando Time Machine para restaurar Sierra con HFS + y luego restaurar High Sierra con particiones APFS. A continuación se muestran mis configuraciones que lo hacen funcionar.

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
    
respondido por el Chang-Han Huang 27.03.2018 - 14:16
1

Tengo exactamente los mismos síntomas. Instalé High Sierra 10.13.4 en un SSD externo de APFS recién formateado y formateado. El Monitor de actividad no muestra espacio de intercambio, y diskutil apfs list muestra que la partición de la VM no está montada, como se muestra arriba. He estado recibiendo pánicos repetidos cuando me quedo sin memoria (mi computadora solo tiene 4 GB de RAM).

Mi solución, que aún no he probado, es hacer un Carbon Copy Clone del disco externo, luego borrarlo y reformatearlo (usando el comando "Partición" de la Utilidad de Disco) como Mac OS Extended (Journaled), y luego restaurar utilizando CCC. Esto debería devolverme mi VM.

    
respondido por el Alan Harper 20.04.2018 - 01:30
1

Me encontré con este problema cuando actualicé a Mojave. Mi sistema operativo está instalado en un SSD externo. Mi solución terminó siendo similar a la de Michael Golban, pero necesitaba un comando adicional.

Terminé escribiendo un pequeño script de bash y cargándolo 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>

Tan pronto como se ejecutaron estos comandos durante la prueba, la línea "Swap Used" en el Monitor de actividad comenzará a mostrar valores positivos.

    
respondido por el chrisgooley 18.10.2018 - 06:21
0

Mac OSX High Sierra es un derivado de Linux, y muchos sistemas operativos de Linux recomiendan desactivar el intercambio cuando se instala en un SSD, ya que el tipo de almacenamiento utilizado en una partición de intercambio supone una gran carga para los medios magnéticos del SSD. forma destructiva Por lo tanto, supongo que High Sierra desactiva el espacio de intercambio en ssds como estándar. Mi opción preferida es instalar el espacio de intercambio en una unidad tradicional separada.

enlace

    
respondido por el miller the gorilla 20.08.2018 - 17:25

Lea otras preguntas en las etiquetas