消费级硬件有限,所以我需要在我的外部硬盘上使用更多的虚拟内存和/或交换空间。Matlab提到了交换空间(TODO排除虚拟内存?)
“Linux系统 - 使用mkswap和swapon命令来更改交换空间。”
系统特点
你可以通过执行
swapon -s
命令来查看你有多少交换空间。Matlab的配置如下:
% https://stackoverflow.com/a/35971040/54964 com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB
% TODO 找不到如何让Matlab使用/dev/sda3
所以你可以看到我的Matlab没有使用它。在Matlab中,当处理大矩阵时,我会遇到内存不足的错误。我尝试将矩阵重塑为向量并编写并行代码,但都没有成功。
因此,我想使用虚拟内存,因为我需要完成工作,速度并不重要。
伪代码
1. 创建一个交换空间的Shell脚本,启动MATLAB,并在MATLAB退出时删除交换空间。(MichaelHooreman)
2. 在外部硬盘上启用交换空间。如何在这里使用
sudo swapon -a
命令?3. 启动Matlab。
4. 让Matlab使用交换空间。
5. 在Matlab退出时删除交换空间。
Micheal的脚本中的临时交换空间、运行客户端和关闭/删除交换空间的情况
情况: 无法控制设置环境(1)、运行Matlab(2)和关闭环境(3)中的错误脚本
#!/usr/bin/env bash
# https://stackoverflow.com/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} # https://unix.stackexchange.com/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,之前很少使用过文件系统为ext4。
运行脚本后的日志
sh start_matlab_with_swap.sh 16000+0 个记录已写入 16000+0 个记录已读取 16777216000 字节(17 GB,16 GiB)已复制,134.489 秒,125 MB/s 设置交换空间版本 1,大小为 15.6 GiB(16777211904 字节) 无标签,UUID=48c2835b-4499-4534-aa49-0648e15bd5d9 masi 的密码: swapon /media/masi/SamiWeek/tmp/swap_file_18.7.2016 swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: 不安全的文件所有者 1000,建议为 0(root)。 swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: 找到交换机标记:版本 1d,页面大小 4,相同的字节顺序 swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: 页面大小=4096,交换大小=16777216000,设备大小=16777216000 交换已启用。按回车键继续 start_matlab_with_swap.sh: 11: read: arg count
运行客户端
在交换内存中首次启动 Matlab 时,命令历史记录消失(工单 #02075943),并出现错误 There was a problem reading your command history - -。只需重新启动 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 [ 这里出现错误! ]
永久交换 = 将交换设置与运行客户端分开
设置交换
# https://unix.stackexchange.com/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
的末尾,以实现永久更改。# 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文档:解决“内存不足”错误 外置硬盘:Transcend 1 TB StoreJet 25M3 评测,Transcend 2 TB StoreJet 25M3 外置硬盘文件系统:ext4 外置硬盘缓存:8 MB 相关主题:如何在Ubuntu中增加MATLAB内存限制?(如何使用mkswap、swapon来为MATLAB提供内存?),如何减少Matlab中的物理内存增加?,如何解决Matlab的内存不足错误?,如何解决Matlab中10800x10800矩阵的内存不足错误?,如何在Matlab r2012b中增加内存限制(连续和总体)?,如何增加Matlab 2009b中的数组块并解决内存不足错误?,如何解决Matlab中一个小变量的内存不足问题?,Matlab中的“内存不足”。一种缓慢但永久的解决方案?