본 포스팅은 업무 중 갑자기 잘 작동되었던 알고리즘이 갑자기 확 느려졌을 때 해결했던 방법을 공유하고자 한다.
swap memory
스왑 메모리는 실제 물리적 메모리가 아닌 시스템 응답 불가 상태를 방지하기 위해 마련해 놓은 비상용 메모리이다. 따라서 알고리즘을 구동하는 중 swap memory를 많이 사용한다면 메모리 관련 오류 발생이 내재되어 있다고 봐도 된다.
필자는 알고리즘을 새롭게 구성한 뒤 실행을 시키니 몇 분뒤 급격히 속도가 저하되는 것을 알게 되었다.
코드 특성상 규모가 큰 데이터를 로드하고 저장하는 코드라 swap 메모리 관련 문제라 파악하고 swap 메모리 사용량을 확인했다.
swap 메모리 사용량 확인법은 "htop" 혹은 "free -m"을 활용하면 된다.
htop에서 왼쪽 밑에 위치해있는 Swp가 swap 메모리 사용량을 나타내는 부분이며 free -m에서는 밑에 Swap 부분이 swap 메모리 사용량을 보여준다.
위 그림들과 같이 할당된 swap 메모리는 975M인데 모두를 사용하고 있었다.
swap memory 초기화
"swapoff -a"와 "swapon -a"는 각각 swap 메모리 사용을 중지시키는 명령어이고 활성화하는 명령어이다.
swapoff -a && swapon -a
이 둘을 순차적으로 실행시키기 위해 "swapoff -a && swapon -a"으로 합쳐서 명령창에 입력하면 swap 메모리를 내렸다 다시 시작하는 명령어가 된다.
위 그림들과 같이 천천히 swap 메모리가 줄어들면서 할당된 메모리가 0K가 되었다가 swapon을 통해 976M를 할당받는다.
만약 "swapoff: Not superuser." 혹은 "swapon: cannot open /dev/mapper/cl--gpu1--vg-swap_1: Permission denieddenied" 와 같은 오류메시지가 떴다면 이는 sudo 권한을 부여하여 실행시키란 얘기로 "sudo swapoff -a && sudo swapon -a"로 변경해서 입력시켜 주면 된다.
sudo swapoff -a && sudo swapon -a
다음과 같이 swap 메모리를 초기화하는 법에 대해 알아보았다. 물론 유비무환이라고 gc.collect()를 메모리를 많이 잡아먹을 것 같은 부분 (ex - for loop, while..)에 군데군데 추가하는 습관을 가져보자.
gc.collect()의 간단한 설명은 다음 링크를 확인하면 된다.
[Python] gc.collect()
오늘은 gc 라이브러리의 collcect 함수에 대해 포스팅하겠다. gc.collect() gc 라이브러리는 파이썬이 구동될 때 메모리 관리를 수행한다. 필자는 gc.collect()를 주로 사용하며 대용량의 데이터를 저장하
baembaembaem.tistory.com
'Linux' 카테고리의 다른 글
[Linux] 리눅스에서 서버 계정 비밀번호 변경 (19) | 2023.06.28 |
---|---|
[Linux] 리눅스에서 zip 파일 풀기 (0) | 2023.06.28 |
[Linux] conda list에서 원하는 라이브러리 찾기 (0) | 2023.02.05 |
[Linux] tmux 활용하기 (0) | 2023.01.27 |
[Linux] 리눅스 명령어 모음 (0) | 2023.01.18 |
댓글