Sytuacja: napraw Out of Memory
błędy w Matlab Ubuntu
Cel: przydzielić trochę pamięci wirtualnej i / lub Zamień na zewnętrzny HDD / SSD; spadek odczytu / zapisu z 20 GBps do 0,1 GBps, co jest w porządku!
Terminologia: zamień i pamięć wirtualna tutaj
Nie, swap i pamięć wirtualna są zupełnie inne. Na przykład mapowanie pamięci pliku 1 GB wymaga dodatkowego 1 GB pamięci wirtualnej, ale nie ma zmian w korzystaniu z wymiany. Swap to forma sklepu z zapleczem. Wiele zastosowań pamięci wirtualnej nie ma nic wspólnego ze sklepem z zapleczem. (I były systemy z pamięcią wirtualną i bez wymiany, a także systemy z wymianą, ale bez pamięci wirtualnej.)
Sprzęt konsumencki jest ograniczony, dlatego muszę używać więcej pamięci wirtualnej i / lub wymieniać z zewnętrznymi dyskami twardymi. Matlab mówi o pamięci wymiany (TODO z wyłączeniem pamięci wirtualnej?)
Systemy Linux - zmień przestrzeń wymiany za pomocą poleceń
mkswap
iswapon
.
Charakterystyka systemu
Możesz zobaczyć, ile masz
swapon -s
Filename Type Size Used Priority /dev/sda3 partition 8326140 0 -1
Konfiguracje Matlaba
% /programming//a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB % TODO cannot find ways how to put Matlab use /dev/sda3
Widzisz więc, że mój Matlab go nie używa. Otrzymuję
Out of Memory
błędy z dużymi matrycami w Matlabie. Nie udało mi się wprowadzićreshape
macierzy do wektorów i napisać kodu równoległego. Chcę więc używać pamięci wirtualnej, ponieważ muszę wykonać pracę; stawka nie ma znaczenia.
Pseudo kod
- Skrypt powłoki, który tworzy swap, uruchamia MATLAB i usuwa go po wyjściu z MATLAB. ( MichaelHooreman )
- Włącz wymianę na zewnętrznym dysku twardym. Jak korzystać
sudo swapon -a
tutaj? - Uruchom Matlab.
- Umieść Matlaba użyj zamiany.
- Usuń wymianę po wyjściu Matlaba.
Tymczasowa zamiana, uruchamianie klienta oraz zamykanie / usuwanie zamiany w skrypcie Micheala
Sytuacja : nie można kontrolować błędów podczas konfigurowania środowiska (1), uruchamiania Matlaba (2) i zamykania środowiska (3)
Skrypt
#!/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}
Iteracja 1 z Transcend 25M3 1 TB z niewielkim wykorzystaniem berofe gdzie system plików ext4
Dzienniki po uruchomieniu skryptu
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
Uruchamianie klienta
Historia poleceń zniknęła przy pierwszym uruchomieniu Matlaba w pamięci wymiany (bilet nr 02075943), z błędem Wystąpił problem z odczytem historii poleceń - - . Po prostu uruchom ponownie Matlaba, a problem zostanie rozwiązany, jeśli masz ustawienia domyślne. Komenda
prefdir
daje/home/masi/.matlab/R2016a
która jest domyślna lokalizacja (/home/{username}/.matlab/R2016a
. Plik/home/masi/.matlab/R2016a/matlab.prf
istnieje po restarcie tutaj .... [inne błędy] ...
Zamykanie Matlaba i ponowne wpisywanie hasła w Terminalu
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
Otwórz: Jak zastosować tutaj lepszą obsługę błędów pułapek błędów? Zobacz mój skrypt dla przykładu w źródle. Wątek: Jak wykonać pułapkę błędów i zamianę, jeśli wystąpił błąd / ostrzeżenie?
Permanent Swap = oddzielna konfiguracja wymiany od uruchomionego klienta
Konfiguracja wymiany
# /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
Na końcu /etc/fstab
umieść następującą zmianę
# /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
System: Linux Ubuntu 16.04 64 bit
jądro Linux 4.6
Linux kernel opcje: wl
Matlab: 2016a
Dziennik Matlab docs: Resolve "Out of memory" Błędy
External HDD: Transcend 1 TB StoreJet 25m3 opinię , Transcend 2 TB StoreJet 25m3
Zewnętrzny HDD plików: ext4
Zewnętrzny bufor dysku twardego: 8 MB
Powiązane wątki: Jak zwiększyć ograniczenie pamięci MATLAB w Ubuntu? (jak korzystać z mkswap, swapon dla MATLAB?) , Jak zmniejszyć wzrost pamięci fizycznej w Matlabie? , Jak rozwiązać błąd braku pamięci w Matlabie? , Jak naprawić błąd braku pamięci w Matlabie dla matrycy 10800x10800? ,Jak zwiększyć limit pamięci (ciągły oraz ogólny) w Matlab r2012b? , Jak zwiększyć blok macierzy i rozwiązać błąd braku pamięci w Matlab 2009b? , Jak rozwiązać ten problem braku pamięci dla małej zmiennej w Matlabie? , „Brak pamięci” w Matlabie. Powolne, ale trwałe rozwiązanie?