質問: 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の最後に次を入力します# https://unix.stackexchange.com/a/298212/16920 # https://unix.stackexchange.com/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 matlabの公式ドキュメント: 「メモリ不足」エラーの解決 外付けhdd:transcend 1 tb storejet 25m3 review 、transcend 2 tb storejet 25m3 外部hddファイルシステム:ext4 外部hddバッファー:8 mb 関連スレッド: buntuでmatlabメモリの制限を増やす方法は? (matlabのmkswap、swaponの使用方法) 、 matlabで物理メモリの増加を減らす方法? 、 matlabでメモリ不足エラーを解決する方法 、 10800x10800マトリックスのmatlabでメモリ不足エラーを修正する方法 、 matlab r2012bでメモリ制限(連続および全体)を増やす方法 、 matlab 2009bで配列ブロックを増やしてメモリ不足エラーを解決する方法 、 matlabの小さな変数のこのメモリ不足問題を解決する方法? 、 'out of memory 'matlabで。遅いが永続的な解決策?
回答: ok、かなりのリストがあります。インラインで返信させてください ここでエラートラップのより良いエラー処理を適用する方法は?ソースの例については、スクリプトを参照してください。スレッドエラー/警告の場合のエラートラップおよびスワップオフの方法. 私はこのスクリプトのコンセプトがまったく好きではありません。スワップとして使用しようとしている外付けハードドライブがあることは悪い考えです。定期的にこれを行うつもりであれば、パーティションのサイズを変更して適切なスワップパーティションを配置するか、スワップファイルを追加するか、より大きな内部ディスクを購入してください。 マトリックスサイズがスワップサイズを超えた場合に警告を出す方法 数学をやるだけです。プログラムが開始される前にマトリックスのサイズがわかっている場合は、mibでサイズを計算し、使用可能なスワップと比較します。 matlabで巨大なマトリックスを計算する際にプログレスバーを持つ方法は? matlabにはapiがありますか?これがその質問にふさわしいフォーラムだとは思いません。 apiを使用している場合でも、スワップを介してioをブロックするため、実際の現実を反映しないぎこちないプログレスバーになります。 イテレーション(2)でビジーな進行状況やswapon -s/swapoffを強制終了するにはどうすればよいですか? あなたはしません。計算が終わったからといって、オペレーティングシステムが割り当てたリソースで完了したわけではありません。スワップへの書き込みが完了すると、解放されます。あまりにも多くのメモリを消費しているため、多くのアプリケーションが必要なメモリを取得できないため、スワップも使用しています。そのままにして、オペレーティングシステムに任せてください。次の実行を実行する前に、キャッシュをクリアします。echo 3 > /proc/sys/vm/drop_caches おそらくそれ以上のことがあります。私はlinux vmの専門家ではありません。 slab/slubアロケーターがどのように機能し、大容量のメモリ要件に合わせてどのように調整するかを調査する価値があります。 matlabをメモリにmlockできる場合があります。これにより、osがメモリを強制的に予約するか、起動しないだけで、完了したらロックを解除する必要があります。私はc apiでこれをうまく行うことができますが、再コンパイルできないプロセスの外でそれをどのように行うのかわかりません。最後に、これはec2が作成したものです。必要なのは16gで、m4.4xlargeには1時間あたり0.958ドルで64gのramが搭載されているようです。それはカップコーヒーより少ない。ジュジュチャームなどを使用してmatlabのインストールのスクリプトを作成し、すべてをサービスとして計算に変換します。16gは16 gbですか? はい、通常、接尾辞を省略すると、バイト単位のbase2数を意味します。簡潔にする場合は、16gibと記述します。 「100 gbを超えるマトリックスが必要です。ec2で実行できるかどうかわかりません。」 ec2には、最大2tbのメインメモリを持つマシンがあります。自分で見て。 https://aws.amazon.com/ec2/instance-types/ echo 3 > /proc/sys/vm/drop_cachesでもキャッシュをクリアする必要がありますか? はい、常にそうすることは害になりません。 linuxカーネルのdocumentation/sysctl/vm.txtを参照してください。 matlabをメモリにロックするにはどうすればよいですか? man mlock。それを引用したとき、私は馬鹿げたが。この呼び出しにより、必要なすべてのメモリを割り当てて、スワップアウトされないようにすることができます。仮想メモリは使用されません。それはあなたが望むものではありません。 c apiをmatlabにバインドできると思います。 --プロセスに何らかの障害がある場合、スワップをオフにする考えはありますか? ここで率直に言いますが、あなたが提案する方法でスワップファイルをマイクロ管理するというコンセプトはばかげています。オペレーティングシステムの仕事は、リソースを管理し、公平で一貫した方法でリソースを配布することです。より多くのリソースを与えると、適切と思われるようにそれらを使用します。完了したときにそれを伝えることができず、その下からリソースをヤンクすると、osは完了したことを通知します。 osにメモリアドレススペースを要求すると、常に成功しない場合があります。これは、再試行できないという意味ではありません。 matlabがmallocを2回呼び出すことを理解できないのは、matlabの問題です。したがって、必要な変更に影響を与えるには、その100gのスペースが本当にプレミアムである場合、オペレーティングシステムにどのように伝えるかを理解する必要があります。メモリフットプリントを(スターターのキャッシュをクリアすることで)トリミングし、メモリマネージャが提供された追加のスワップスペースを使用する必要性を感じないようにします。その後、その場合にのみ、メモリマネージャにスワップファイルを解放するように依頼できます。メモリやディスクのようなものを成長させるのは簡単ですが、それらを縮小するのははるかに困難です。縮小により、そのスペースにリソースが割り当てられているすべてのユーザーの再バランスが強制されます。代わりに「100tbのストレージアレイはあるが、今では60tbしか必要ないのに、アレイの動作が停止するのは40tbのディスクを取り外すとどうしてですか?」さて、答えは明らかですよね?だから私はそれを見るようにあなたのオプションがあります。 matlab c apiを調査して、これらの大規模なワーキングセットにメモリを割り当てる方法をより適切に制御できるかどうかを確認してください。 サブマトリックスまたはその他のスパースデータ表現を使用して、現在の計算をリファクタリングします。 膨大な数の線形代数ライブラリを使用してc/c++で独自のプログラムを作成し、計算を実行し、mallocまたはmmap anonymousを使用して必要なアドレス空間を割り当てます。