สถานการณ์: แก้ไขOut of Memory
ข้อผิดพลาดใน
เป้าหมายMatlab ของ Ubuntu : จัดสรรหน่วยความจำเสมือนและ / หรือสลับบน HDD / SSD ภายนอก การอ่าน / เขียนลดลงจาก 20 GBps เป็น 0.1 GBps ซึ่งก็โอเค!
คำศัพท์: swap และหน่วยความจำเสมือนที่นี่
ไม่การสลับและหน่วยความจำเสมือนแตกต่างอย่างสิ้นเชิง ตัวอย่างเช่นการแม็พหน่วยความจำไฟล์ 1GB ใช้หน่วยความจำเสมือนเพิ่มเติม 1GB แต่ไม่มีการเปลี่ยนแปลงในการใช้ swap Swap เป็นรูปแบบการสำรองข้อมูล การใช้หน่วยความจำเสมือนจำนวนมากไม่มีอะไรเกี่ยวข้องกับการสำรองข้อมูล (และมีระบบที่มีหน่วยความจำเสมือนและไม่มีการสลับเช่นเดียวกับระบบที่มีการสลับ แต่ไม่มีหน่วยความจำเสมือน)
ฮาร์ดแวร์ผู้บริโภคมี จำกัด ดังนั้นฉันต้องใช้หน่วยความจำเสมือนและ / หรือการแลกเปลี่ยนกับ HDD ภายนอกของฉันมากกว่า Matlab พูดเกี่ยวกับหน่วยความจำ swap (สิ่งที่ต้องทำไม่รวมหน่วยความจำเสมือน?)
ระบบ 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
'เข้าเมทริกซ์ถึงเวกเตอร์และเขียนโค้ดแบบขนาน ดังนั้นฉันต้องการใช้หน่วยความจำเสมือนเพราะฉันต้องทำงานให้เสร็จ อัตราไม่สำคัญ
pseudocode
- เชลล์สคริปต์ที่สร้างการแลกเปลี่ยนเริ่มต้น MATLAB และลบการแลกเปลี่ยนเมื่อออกจาก MATLAB ( MichaelHooreman )
- เปิดใช้งานการสลับกับ HDD ภายนอก วิธีใช้
sudo swapon -a
ที่นี่ - เริ่ม Matlab
- ใส่ Matlab ใช้การแลกเปลี่ยน
- ลบการสลับเมื่อ Matlab ออก
Swap ชั่วคราว, เรียกใช้ไคลเอนต์และปิด / ลบ Swap ในสคริปต์ของ 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}
การทำซ้ำ 1 กับ Transcend 25M3 1 TB โดยใช้ berofe เพียงเล็กน้อยซึ่งระบบไฟล์ 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
ใช้ไคลเอนต์
ประวัติคำสั่งไปในจุดเริ่มต้นแรกของ Matlab ในหน่วยความจำแลกเปลี่ยน (ตั๋ว # 02075943) กับข้อผิดพลาดมีปัญหาในการอ่านประวัติคำสั่งของคุณ - - เพียงแค่เริ่ม Matlab ของคุณใหม่และปัญหาจะได้รับการแก้ไขหากคุณมีการตั้งค่าเริ่มต้น คำสั่ง
prefdir
ให้/home/masi/.matlab/R2016a
ซึ่งเป็นสถานที่ตั้งค่าเริ่มต้น (/home/{username}/.matlab/R2016a
. ไฟล์/home/masi/.matlab/R2016a/matlab.prf
ที่มีอยู่หลังจากที่เริ่มต้นที่นี่... [ข้อผิดพลาดอื่น ๆ ] ...
การปิด Matlab และพิมพ์รหัสผ่านอีกครั้งใน Terminal
[sudo] password for masi: swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016 [ bugs here! ]
เปิด: วิธีใช้การดักจับข้อผิดพลาดที่ดีกว่าที่นี่ได้อย่างไร ดูสคริปต์ของฉันสำหรับตัวอย่างในแหล่งที่มา หัวข้อวิธีทำดักข้อผิดพลาดและ Swapoff หากข้อผิดพลาด / คำเตือน?
Swap ถาวร = การติดตั้ง Swap แยกจากการรันไคลเอ็นต์
การตั้งค่า 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
ใส่สิ่งต่อไปนี้ในตอนท้ายของ/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
เอกสาร Matlab อย่างเป็นทางการ: แก้ไขข้อผิดพลาด Out of Memory หน่วยความจำ
HDD ภายนอก: ชนะการตรวจสอบ StoreJet 25M3 1 TB , Transcend 2 TB StoreJet 25M3
ระบบไฟล์ HDD ภายนอก: ext4
บัฟเฟอร์ HDD ภายนอก: 8 MB
หัวข้อที่เกี่ยวข้อง: วิธีเพิ่มข้อ จำกัด หน่วยความจำ MATLAB ในอูบุนตู? (วิธีใช้ mkswap, swapon สำหรับ MATLAB?) , วิธีลดหน่วยความจำกายภาพเพิ่มขึ้นใน Matlab? , วิธีแก้ไขจากข้อผิดพลาดของหน่วยความจำใน Matlab? , วิธีการแก้ไขข้อผิดพลาดหน่วยความจำไม่เพียงพอใน Matlab สำหรับเมทริกซ์ 10800x10800? ,ฉันจะเพิ่มขีด จำกัด หน่วยความจำ (ต่อเนื่องรวมถึงทั้งหมด) ใน Matlab r2012b ได้อย่างไร , วิธีการเพิ่มอาร์เรย์ที่ถูกบล็อกและแก้ไขข้อผิดพลาดออกจากหน่วยความจำใน Matlab 2009b? , วิธีการแก้ไขจากหน่วยความจำฉบับนี้มาเป็นตัวแปรขนาดเล็กใน Matlab? , 'หน่วยความจำไม่เพียงพอ' ใน Matlab วิธีแก้ปัญหาที่ช้า แต่ถาวร