Situation: corriger les Out of Memory
erreurs dans Matlab d'Ubuntu
Objectif: allouer de la mémoire virtuelle et / ou Swap sur disque dur externe / SSD; la lecture / écriture passe de 20 Go / s à 0,1 Go / s, ce qui est correct!
Terminologie: swap et mémoire virtuelle ici
Non, le swap et la mémoire virtuelle sont complètement différents. Par exemple, le mappage de la mémoire d'un fichier de 1 Go utilise 1 Go supplémentaire de mémoire virtuelle mais n'a aucun changement dans l'utilisation du swap. Le swap est une forme de magasin de sauvegarde. De nombreuses utilisations de la mémoire virtuelle n'ont rien à voir avec le stockage de sauvegarde. (Et il y a eu des systèmes avec mémoire virtuelle et pas de swap ainsi que des systèmes avec swap mais pas de mémoire virtuelle.)
Le matériel grand public est limité, je dois donc utiliser plus de mémoire virtuelle et / ou échanger avec mes disques durs externes. Matlab parle de la mémoire de swap (TODO hors mémoire virtuelle?)
Systèmes Linux - Modifiez votre espace de swap à l'aide des commandes
mkswap
etswapon
.
Caractéristiques du système
Vous pouvez voir combien vous en avez
swapon -s
Filename Type Size Used Priority /dev/sda3 partition 8326140 0 -1
Configurations de Matlab
% /programming//a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB % TODO cannot find ways how to put Matlab use /dev/sda3
Vous voyez donc que mon Matlab ne l'utilise pas. Je reçois des
Out of Memory
erreurs avec de grandes matrices dans Matlab. Je n'ai pas réussi àreshape
intégrer des matrices aux vecteurs et à écrire du code parallèle. Je veux donc utiliser la mémoire virtuelle parce que je dois faire le travail; le taux n'a pas d'importance.
Pseudocode
- Script shell qui crée un swap, lancez MATLAB et supprimez le swap lorsque MATLAB se ferme. ( MichaelHooreman )
- Activer l'échange sur le disque dur externe. Comment l'utiliser
sudo swapon -a
ici? - Démarrez Matlab.
- Mettez Matlab utiliser le swap.
- Supprimer l'échange à la sortie de Matlab.
Swap temporaire, exécution du client et fermeture / suppression du swap dans le script de Micheal
Situation : impossible de contrôler les erreurs lors de la configuration de l'environnement (1), de l'exécution de Matlab (2) et de la fermeture de l'environnement (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}
Itération 1 avec Transcend 25M3 1 To avec peu d'utilisation berofe où le système de fichiers ext4
Journaux après le démarrage du 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
Exécuter le client
L'historique des commandes a disparu au premier démarrage de Matlab dans la mémoire de swap (ticket # 02075943), avec l'erreur Un problème est survenu lors de la lecture de l'historique de vos commandes - - . Redémarrez simplement votre Matlab et le problème est résolu si vous avez des paramètres par défaut. La commande
prefdir
indique/home/masi/.matlab/R2016a
quel est l'emplacement par défaut (/home/{username}/.matlab/R2016a
. Le fichier/home/masi/.matlab/R2016a/matlab.prf
existe après le redémarrage, ici .... [autres erreurs] ...
Fermer Matlab et saisir à nouveau le mot de passe dans le terminal
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
Ouvrir: Comment appliquer ici la meilleure gestion des erreurs de la récupération des erreurs? Voir mon script pour l'exemple dans la source. Thread Comment faire le recouvrement d'erreur et le swapoff en cas d'erreur / d'avertissement?
Swap permanent = configuration de swap distincte du client en cours d'exécution
Configuration de 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
Mettez ce qui suit à la fin de /etc/fstab
pour le changement permanent
# /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
Système: Linux Ubuntu 16.04 64 bits
noyau Linux: 4.6
Options du noyau Linux: wl
Matlab: 2016A
officiel Matlab docs: Resolve "Mémoire insuffisante" Erreurs
disque dur externe: Transcend 1 To StoreJet 25M3 examen , Transcend 2 To StoreJet 25M3
système de fichiers du disque dur externe: ext4
Tampon de disque dur externe: 8 Mo
Threads associés: Comment augmenter la limitation de mémoire MATLAB dans Ubuntu? (comment utiliser mkswap, swapon pour MATLAB?) , Comment réduire l'augmentation de la mémoire physique dans Matlab? , Comment résoudre l'erreur de mémoire insuffisante dans Matlab? , Comment réparer une erreur de mémoire insuffisante dans Matlab pour la matrice 10800x10800? ,Comment augmenter la limite de mémoire (contiguë et globale) dans Matlab r2012b? , Comment augmenter le bloc de tableau et résoudre l'erreur de mémoire insuffisante dans Matlab 2009b? , Comment résoudre ce problème de mémoire insuffisante pour une petite variable dans Matlab? , 'Out of memory' dans Matlab. Une solution lente mais permanente?