Situazione: correggere Out of Memory
errori nell'obiettivo Matlab di Ubuntu
: allocare un po 'di memoria virtuale e / o scambiare su HDD / SSD esterni; la lettura / scrittura diminuisce da 20 GBps a 0,1 GBps, il che è ok!
Terminologia: scambio e memoria virtuale qui
No, lo scambio e la memoria virtuale sono completamente diversi. Ad esempio, la mappatura della memoria di un file da 1 GB utilizza un ulteriore 1 GB di memoria virtuale ma non ha alcun cambiamento nell'uso di swap. Lo swap è una forma di negozio di supporto. Molti usi della memoria virtuale non hanno nulla a che fare con l'archivio di backup. (E ci sono stati sistemi con memoria virtuale e nessun scambio, nonché sistemi con scambio ma nessuna memoria virtuale.)
L'hardware di consumo è limitato, quindi ho bisogno di usare più memoria virtuale e / o scambiare con i miei HDD esterni. Matlab dice della memoria di scambio (TODO esclusa la memoria virtuale?)
Sistemi Linux: modifica lo spazio di swap utilizzando i comandi
mkswap
eswapon
.
Caratteristiche del sistema
Puoi vedere quanto ce l'hai
swapon -s
Filename Type Size Used Priority /dev/sda3 partition 8326140 0 -1
Le configurazioni di Matlab
% /programming//a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB % TODO cannot find ways how to put Matlab use /dev/sda3
Quindi vedi che il mio Matlab non lo sta usando. Ricevo
Out of Memory
errori con grandi matrici in Matlab. Non ho avuto successoreshape
nell'ingegnere matrici di vettori e scrivere codice parallelo. Quindi voglio usare la memoria virtuale perché devo lavorare; il tasso non ha importanza.
pseudocodice
- Script di shell che crea uno scambio, avvia MATLAB ed elimina lo scambio quando MATLAB esce. ( MichaelHooreman )
- Abilita scambio su HDD esterno. Come si usa
sudo swapon -a
qui? - Avvia Matlab.
- Metti Matlab usa lo swap.
- Elimina lo scambio quando esce Matlab.
Swap temporaneo, esecuzione del client e chiusura / rimozione dello swap nello script di Micheal
Situazione : impossibile controllare gli errori durante l'impostazione dell'ambiente (1), l'esecuzione di Matlab (2) e la chiusura dell'ambiente (3)
Script
#!/usr/bin/env bash
# /programming//a/69808/54964
set -e
# TODO How to do swapoff if any error?
SWAP_FILE="/media/masi/SamiSwapVirtual/.swap_file_20.7.2016"
SIZE_MB=16000
TO_RUN="matlab"
dd if="/dev/zero" of=${SWAP_FILE} bs="1M" count=${SIZE_MB} status="progress"
mkswap ${SWAP_FILE}
chmod 0600 ${SWAP_FILE}
sudo chown 0.0 ${SWAP_FILE} # /unix//a/297153/16920
sudo swapon -v ${SWAP_FILE}
echo "Swap enabled. Press enter to continue"; read
${TO_RUN}
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v ${SWAP_FILE}
rm -vf ${SWAP_FILE}
Iterazione 1 con Transcend 25M3 1 TB con poco uso di file system ext4
Registra dopo aver avviato lo script
sh start_matlab_with_swap.sh 16000+0 records in 16000+0 records out 16777216000 bytes (17 GB, 16 GiB) copied, 134.489 s, 125 MB/s Setting up swapspace version 1, size = 15.6 GiB (16777211904 bytes) no label, UUID=48c2835b-4499-4534-aa49-0648e15bd5d9 [sudo] password for masi: swapon /media/masi/SamiWeek/tmp/swap_file_18.7.2016 swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: insecure file owner 1000, 0 (root) suggested. swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: found swap signature: version 1d, page-size 4, same byte order swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: pagesize=4096, swapsize=16777216000, devsize=16777216000 Swap enabled. Press enter to continue start_matlab_with_swap.sh: 11: read: arg count
Esecuzione del client
La cronologia dei comandi è andata al primo avvio di Matlab nella memoria di scambio (ticket # 02075943), con l'errore Si è verificato un problema durante la lettura della cronologia dei comandi - - . Basta riavviare Matlab e il problema è risolto se si dispone di impostazioni predefinite. Il comando
prefdir
indica/home/masi/.matlab/R2016a
qual è il percorso predefinito (/home/{username}/.matlab/R2016a
. Il file/home/masi/.matlab/R2016a/matlab.prf
esiste dopo il riavvio, qui .... [altri errori] ...
Chiudere Matlab e digitare nuovamente la password nel Terminale
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
Apri: Come applicare la migliore gestione degli errori del trapping degli errori qui? Vedi il mio script per l'esempio nella fonte. Thread Come eseguire il trapping degli errori e lo Swapoff in caso di errore / avviso?
Swap permanente = Impostazione di swap separata dal client in esecuzione
Impostazione di Swap
# /unix//q/297767/16920
masi@masi:~$ sudo fallocate -l 20G /mnt/.swapfile
masi@masi:~$ sudo mkswap /mnt/.swapfile
Setting up swapspace version 1, size = 20 GiB (21474832384 bytes)
no label, UUID=45df9e48-1760-47e8-84d7-7a14f56bbd72
masi@masi:~$ sudo swapon /mnt/.swapfile
swapon: /mnt/.swapfile: insecure permissions 0644, 0600 suggested.
masi@masi:~$ sudo chmod 600 /mnt/.swapfile
masi@masi:~$ free -m
total used free shared buff/cache available
Mem: 7925 1494 175 196 6255 5892
Swap: 28610 0 28610
Inserire quanto segue alla fine di /etc/fstab
per la modifica permanente
# /unix//a/298212/16920
# /unix//a/298543/16920
# If swap is on SSD, trim blocks each time at startup.
#/mnt/.swapfile none swap defaults,discard 0 0
# If swap on External HDD, just use sw.
/media/masi/SamiWeek/.swapfile none swap sw 0 0
Sistema: Linux Ubuntu 16.04 64 bit
kernel Linux: 4.6
Opzioni del kernel Linux: wl
Matlab: 2016a
Documenti ufficiali Matlab: risoluzione errori "Memoria
esaurita " HDD esterno: Transcend 1 TB StoreJet 25M3 review , Transcend 2 TB StoreJet 25M3 File
system HDD esterno: ext4
Buffer HDD esterno: 8 MB
Thread correlati: Come aumentare la limitazione della memoria MATLAB in Ubuntu? (come utilizzare mkswap, swapon per MATLAB?) , Come ridurre l'aumento della memoria fisica in Matlab? , Come risolvere l'errore di memoria esaurita in Matlab? , Come risolvere l'errore di memoria esaurita in Matlab per matrice 10800x10800? ,Come posso aumentare il limite di memoria (sia contiguo che globale) in Matlab r2012b? , Come aumentare il blocco dell'array e risolvere l'errore di memoria insufficiente in Matlab 2009b? , Come risolvere questo problema di memoria insufficiente per una piccola variabile in Matlab? , "Memoria insufficiente" in Matlab. Una soluzione lenta ma permanente?