상황 : Out of Memory
Ubuntu Matlab
목표 의 오류 수정 : 외부 HDD / SSD에 일부 가상 메모리 및 / 또는 스왑을 할당하십시오. 읽기 / 쓰기가 20GBps에서 0.1GBps로 감소했습니다.
용어 : 스왑 메모리와 가상 메모리 여기
아니요, 스왑과 가상 메모리는 완전히 다릅니다. 예를 들어, 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 1TB의 반복 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을 다시 시작하면 기본 설정이되어 있으면 문제가 해결됩니다. 명령
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! ]
Open : 오류 트래핑의 더 나은 오류 처리를 어떻게 적용합니까? 소스의 예제는 내 스크립트를 참조하십시오. Thread 오류 / 경고시 오류 트래핑 및 스왑 오프를 수행하는 방법은 무엇입니까?
영구 스왑 = 실행중인 클라이언트와 스왑 설정 분리
스왑 설정
# /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 문서 : "메모리 부족"오류 해결
외부 HDD : Transcend 1 TB StoreJet 25M3 review , Transcend 2 TB StoreJet 25M3
외장 HDD 파일 시스템 : ext4
외부 HDD 버퍼 : 8 MB
관련 스레드 : 우분투에서 MATLAB 메모리 제한을 늘리는 방법은 무엇입니까? (MATLAB에 mkswap, swapon을 사용하는 방법?) , Matlab에서 실제 메모리 증가를 줄이는 방법은 무엇입니까? , Matlab에서 메모리 부족 오류를 해결하는 방법? , 10800x10800 매트릭스 용 Matlab의 메모리 부족 오류를 수정하는 방법? ,Matlab r2012b에서 메모리 제한 (연속 및 전체)을 어떻게 늘리나요? , Matlab 2009b에서 어레이 블록을 늘리고 메모리 부족 오류를 해결하는 방법은 무엇입니까? , Matlab의 작은 변수에 대한 메모리 부족 문제를 해결하는 방법은 무엇입니까? , 매트랩 '메모리 부족'. 느리지 만 영구적 인 해결책?