Tình huống: sửa Out of Memory
lỗi trong Matlab của Ubuntu
Mục tiêu: phân bổ một số bộ nhớ ảo và / hoặc Hoán đổi trên ổ cứng / SSD ngoài; việc đọc / ghi giảm từ 20 GB / giây xuống còn 0,1 GB / giây, không sao cả!
Thuật ngữ: trao đổi và bộ nhớ ảo ở đây
Không, trao đổi và bộ nhớ ảo là hoàn toàn khác nhau. Ví dụ: ánh xạ bộ nhớ tệp 1GB sử dụng thêm 1GB bộ nhớ ảo nhưng không có thay đổi trong việc sử dụng trao đổi. Hoán đổi là một hình thức của cửa hàng sao lưu. Nhiều cách sử dụng bộ nhớ ảo không liên quan gì đến cửa hàng sao lưu. (Và đã có các hệ thống có bộ nhớ ảo và không có trao đổi cũng như các hệ thống có trao đổi nhưng không có bộ nhớ ảo.)
Phần cứng tiêu dùng bị hạn chế nên tôi cần sử dụng thêm bộ nhớ ảo và / hoặc trao đổi với các ổ cứng gắn ngoài. Matlab nói về bộ nhớ trao đổi (TODO không bao gồm bộ nhớ ảo?)
Hệ thống Linux - Thay đổi không gian trao đổi của bạn bằng cách sử dụng các lệnh
mkswap
vàswapon
.
Đặc điểm của hệ thống
Bạn có thể thấy bạn có bao nhiêu
swapon -s
Filename Type Size Used Priority /dev/sda3 partition 8326140 0 -1
Cấu hình của Matlab
% /programming//a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB % TODO cannot find ways how to put Matlab use /dev/sda3
Vì vậy, bạn thấy rằng Matlab của tôi không sử dụng nó. Tôi nhận được
Out of Memory
lỗi với ma trận lớn trong Matlab. Tôi đã không thành công trongreshape
việc đưa ma trận vào vectơ và viết mã song song. Vì vậy, tôi muốn sử dụng bộ nhớ ảo vì tôi cần hoàn thành công việc; tỷ lệ không quan trọng.
Mã giả
- Shell script tạo ra một trao đổi, bắt đầu MATLAB và xóa trao đổi khi MATLAB thoát. ( MichaelHooreman )
- Cho phép trao đổi trên ổ cứng ngoài. Làm thế nào để sử dụng
sudo swapon -a
ở đây? - Bắt đầu Matlab.
- Đặt Matlab sử dụng trao đổi.
- Xóa trao đổi khi Matlab thoát.
Hoán đổi tạm thời, Chạy ứng dụng khách và Đóng / Xóa Hoán đổi trong tập lệnh của Micheal
Tình huống : không thể kiểm soát lỗi khi thiết lập môi trường (1), chạy Matlab (2) và đóng môi trường (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}
Lặp lại 1 với Transcend 25M3 1 TB với ít sử dụng berofe trong đó hệ thống tập tin ext4
Nhật ký sau khi bắt đầu tập lệnh
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
Chạy máy khách
Lịch sử lệnh đã xuất hiện trong lần khởi động đầu tiên của Matlab trong bộ nhớ trao đổi (vé # 02075943), với lỗi Có vấn đề khi đọc lịch sử lệnh của bạn - - . Chỉ cần khởi động lại Matlab của bạn và vấn đề được giải quyết nếu bạn có cài đặt mặc định. Lệnh
prefdir
cho/home/masi/.matlab/R2016a
đó là vị trí mặc định (/home/{username}/.matlab/R2016a
. Tệp/home/masi/.matlab/R2016a/matlab.prf
tồn tại sau khi khởi động lại, ở đây .... [các lỗi khác] ...
Đóng Matlab và gõ lại mật khẩu trong Terminal
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
Mở: Làm thế nào để áp dụng xử lý lỗi tốt hơn đối với bẫy lỗi ở đây? Xem kịch bản của tôi cho ví dụ trong nguồn. Chủ đề Cách thực hiện Bẫy lỗi và Hoán đổi nếu Lỗi / Cảnh báo?
Hoán đổi vĩnh viễn = Thiết lập hoán đổi riêng biệt từ Máy khách đang chạy
Thiết lập hoán đổi
# /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
Đặt những điều sau vào cuối /etc/fstab
cho sự thay đổi vĩnh viễn
# /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
Hệ thống: Linux Ubuntu 16.04 64 bit
Linux kernel: 4.6
tùy chọn Linux kernel: wl
Matlab: 2016a
chính thức Matlab tài liệu: Giải quyết "Out of Memory" Lỗi
External HDD: Transcend 1 TB StoreJet 25M3 xem xét , Transcend 2 TB StoreJet 25M3
External HDD hệ thống tập tin: ext4
Bộ đệm HDD ngoài: 8 MB
Chủ đề liên quan: Làm thế nào để tăng giới hạn bộ nhớ MATLAB trong ubfox? (làm thế nào để sử dụng mkswap, hoán đổi cho MATLAB?) , Làm thế nào để giảm tăng bộ nhớ vật lý trong Matlab? , Làm thế nào để khắc phục lỗi bộ nhớ trong Matlab? , Làm thế nào để khắc phục lỗi hết bộ nhớ trong Matlab cho ma trận 10800x10800? ,Làm cách nào để tăng giới hạn bộ nhớ (liền kề cũng như tổng thể) trong Matlab r2012b? , Làm cách nào để tăng khối mảng và giải quyết lỗi bộ nhớ trong Matlab 2009b? , Làm thế nào để giải quyết vấn đề hết bộ nhớ này cho một biến nhỏ trong Matlab? , 'Hết bộ nhớ' trong Matlab. Một giải pháp chậm nhưng vĩnh viễn?