Situação: corrija Out of Memory
erros no Matlab do Ubuntu.
Objetivo: alocar memória virtual e / ou trocar no HDD / SSD externo; a leitura / gravação diminui de 20 GBps para 0,1 GBps, o que é bom!
Terminologia: troca e memória virtual aqui
Não, a troca e a memória virtual são completamente diferentes. Por exemplo, o mapeamento de memória de um arquivo de 1 GB usa 1 GB adicional de memória virtual, mas não altera o uso de troca. Swap é uma forma de loja de apoio. Muitos usos da memória virtual não têm nada a ver com o armazenamento de backup. (E existem sistemas com memória virtual e sem troca, bem como sistemas com troca, mas sem memória virtual.)
O hardware do consumidor é limitado, portanto, preciso usar mais memória virtual e / ou trocar com meus HDs externos. Matlab diz sobre a memória swap (TODO excluindo memória virtual?)
Sistemas Linux - Altere seu espaço de troca usando os comandos
mkswap
eswapon
.
Características do sistema
Você pode ver quanto você tem
swapon -s
Filename Type Size Used Priority /dev/sda3 partition 8326140 0 -1
Configurações do Matlab
% /programming//a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB % TODO cannot find ways how to put Matlab use /dev/sda3
Então você vê que meu Matlab não está usando. Eu recebo
Out of Memory
erros com grandes matrizes no Matlab. Não obtive sucesso aoreshape
inserir matrizes para vetores e escrever código paralelo. Então, eu quero usar a memória virtual porque preciso fazer o trabalho; a taxa não importa.
Pseudo-código
- O script de shell que cria uma troca, inicia o MATLAB e exclui a troca quando o MATLAB sair. ( MichaelHooreman )
- Habilite a troca no disco rígido externo. Como usar
sudo swapon -a
aqui? - Inicie o Matlab.
- Coloque o Matlab use a troca.
- Exclua a troca quando o Matlab sair.
Troca temporária, execução de cliente e fechamento / remoção de troca no script de Micheal
Situação : não é possível controlar erros na configuração do ambiente (1), executando o Matlab (2) e fechando o
script do ambiente (3)
#!/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}
Iteração 1 com Transcend 25M3 1 TB com pouco uso berofe, em que o sistema de arquivos ext4
Logs após iniciar o 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
Executando o Cliente
O histórico de comandos foi iniciado na primeira inicialização do Matlab na memória de troca (ticket # 02075943), com o erro Ocorreu um problema ao ler o histórico de comandos - - . Basta reiniciar o Matlab e o problema será resolvido se você tiver as configurações padrão. O comando
prefdir
indica/home/masi/.matlab/R2016a
qual é o local padrão (/home/{username}/.matlab/R2016a
. O arquivo/home/masi/.matlab/R2016a/matlab.prf
existe após o reinício, aqui .... [outros erros] ...
Fechando o Matlab e digitando a senha novamente no Terminal
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
Aberto: Como aplicar o melhor tratamento de erros de interceptação de erros aqui? Veja meu script para o exemplo na fonte. Thread Como fazer uma captura e troca de erros se houver erro / aviso?
Troca permanente = instalação de troca separada do cliente em execução
Configurando 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
Coloque o seguinte no final de /etc/fstab
para a mudança 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 bits
do kernel Linux: 4.6
kernel Linux opções: wl
Matlab: 2016a
Matlab Oficial docs: Resolve "falta de memória" erros
External HDD: Transcend 1 TB StoreJet 25m3 revisão , Transcend 2 TB StoreJet 25m3
HDD externo sistema de arquivos: ext4
Buffer externo do disco rígido: 8 MB
Tópicos relacionados: Como aumentar a limitação de memória do MATLAB no ubuntu? (como usar mkswap, swapon para MATLAB?) , Como reduzir o aumento da memória física no Matlab? , Como resolver erro de falta de memória no Matlab? , Como corrigir erro de falta de memória no Matlab para a matriz 10800x10800? ,Como aumentar o limite de memória (contíguo e geral) no Matlab r2012b? , Como aumentar o bloco de matriz e resolver o erro de falta de memória no Matlab 2009b? , Como resolver esse problema de falta de memória para uma pequena variável no Matlab? , 'Memória insuficiente' no Matlab. Uma solução lenta mas permanente?