状況:Out of Memory
UbuntuのMatlabの
目標のエラーを修正する:外部HDD / SSDに仮想メモリやスワップを割り当てます。読み取り/書き込みが20 GBpsから0.1 GBpsに減少しました。
用語:ここでスワップと仮想メモリ
いいえ、スワップと仮想メモリは完全に異なります。たとえば、1GBファイルのメモリマッピングでは、追加の1GBの仮想メモリが使用されますが、スワップの使用に変更はありません。スワップは、バッキングストアの一種です。仮想メモリの多くの用途は、バッキングストアとは何の関係もありません。(また、仮想メモリがあり、スワップがないシステム、およびスワップはあるが仮想メモリがないシステムがあります。)
消費者のハードウェアは限られているため、より多くの仮想メモリを使用するか、外部HDDとスワップする必要があります。Matlabはスワップメモリについて述べています(仮想メモリを除くTODO?)
Linuxシステム—
mkswap
およびswapon
コマンドを使用して、スワップ空間を変更します。
システムの特徴
あなたはそれをどれだけ持っているか見ることができます
swapon -s
Filename Type Size Used Priority /dev/sda3 partition 8326140 0 -1
Matlabの構成
% /programming//a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB % TODO cannot find ways how to put Matlab use /dev/sda3
だから、あなたは私のMatlabがそれを使用していないことがわかります。
Out of Memory
Matlabで大きな行列のエラーを受け取ります。reshape
行列をベクトルに変換し、並列コードを書くことに失敗しました。ですから、作業を完了する必要があるため、仮想メモリを使用します。レートは関係ありません。
擬似コード
- スワップを作成し、MATLABを起動し、MATLABの終了時にスワップを削除するシェルスクリプト。(MichaelHooreman)
- 外付けHDDでスワップを有効にします。
sudo swapon -a
ここでの使用方法は? - Matlabを起動します。
- Matlabがスワップを使用するようにします。
- Matlabの終了時にスワップを削除します。
Michealのスクリプトでの一時的なスワップ、実行中のクライアント、およびスワップのクローズ/削除
状況:環境のセットアップ(1)、Matlabの実行(2)、環境のクローズ(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}
Transcend 25M3 1 TBを使用したイテレーション1。 ext4
スクリプト開始後のログ
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
クライアントを実行する
コマンド履歴は、スワップメモリ(チケット#02075943)でMatlabの最初の起動時に失われ、コマンド履歴の読み取りに問題がありました--。Matlabを再起動するだけで、デフォルト設定があれば問題は解決します。コマンドが
prefdir
与えられる/home/masi/.matlab/R2016a
(デフォルトの場所である/home/{username}/.matlab/R2016a
。ファイルは/home/masi/.matlab/R2016a/matlab.prf
、再起動後に存在してここに。... [その他のエラー] ...
ターミナルでMatlabを閉じてパスワードをもう一度入力する
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
オープン:エラートラップのより良いエラー処理をここに適用する方法は?ソースの例については、スクリプトを参照してください。スレッドエラー/警告の場合、エラートラップおよびスワップオフの方法
永続的なスワップ=実行中のクライアントからのスワップセットアップの分離
スワップのセットアップ
# /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
/etc/fstab
永続的な変更のために、最後に以下を入力します
# /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
システム:Linux Ubuntu 16.04 64ビット
Linuxカーネル:4.6
Linuxカーネルオプション:wl
Matlab:2016a
Official Matlab docs:Resolve "Out of Memory" Errors
External HDD:Transcend 1 TB StoreJet 25M3 review、Transcend 2 TB StoreJet 25M3
External HDD filesystem:ext4
外部HDDバッファー:8 MB
関連スレッド:UbuntuでMATLABメモリの制限を増やす方法 (MATLABのmkswap、swaponの使用方法)、Matlabで物理メモリの増加を減らす方法 、Matlabのメモリ不足エラーを解決するにはどうすればよいですか?、10800x10800マトリックスのMatlabでメモリ不足エラーを修正する方法は?、Matlab r2012bでメモリ制限(全体および連続)を増やすにはどうすればよいですか?、Matlab 2009bでアレイブロックを増やしてメモリ不足エラーを解決する方法は?、Matlabの小さな変数のこのメモリ不足の問題を解決するにはどうすればよいですか?、MATLABで「メモリ不足です」。遅いが永続的な解決策?