Categories
[linux] virtualbox 메모리 관리하기
핵심요약
리눅스 가상머신에서 프로그램을 작동하고 있는데, 프로세스가 작동되다가 꺼지는 현상이 발생되었다. 잘 안되어서 다른 것을 하다가 이제서야 해당 현상을 해결하려 해봤다.
상세 현상
프로그램은 돌아가는 것을 확인했으나, 상당량의 메모리를 소비하는 것을 확인했다.
이후에는 가상머신 자체가 렉이 걸리며 작동을 안한다.
몇 시간 기다리면 가상머신 작동이 복원되지만, 작동 중인 프로세스는 멈춰버린다.
결과적으로 내가 원하는 프로그램 작동을 못하게 된다.
원인 추측
이전에도 지나친 서버 자원 활용으로 인해 서버 자체에서 쓸모없는 프로세스를 킬 (kill)해 버리는 현상을 본 적이 있다.
본인이 현재 노트북 내에서 리눅스 가상머신 환경을 따로 구축했고, 최대 메모리는 약 5.4기가, 최대 CPU는 7개 정도로 설정했는데,
아마도 사용하는 프로그램 특성 (대용량의 데이터베이스를 기반으로 한 데이터 변환 기능)상 “메모리의 초과로 인한 프로세스의 강제 종료”인 것 같다.
해결 : systemctl 이용한 가용메모리 제한
출처 : markyang92.log 블로그
따라서 사용자가 사용할 자원자체를 제한해버리기로 했다.
어차피 홀로 사용하는 가상 서버라 부담없이 다음과 같은 명령어를 입력했다.
1. 현재 사용하는 프로세스 확인
khb:$ systemd-cgls
이런식으로 현재 사용되는 서비스들과 각 계층 (모든 프로세스가 실행되는)들을 확인할 수 있다.
2. 본인의 컴퓨터 자원 확인 후 가상머신 내 메모리 제한 설정
본인은 가장 큰 계층들인 user.slice, system.slice 둘 다에 메모리 제한을 걸기 위해 다음과 같은 명령어를 썼다.
khb:$ sudo systemctl --runtime set-property user.slice MemoryHigh=4G MemoryMax=4G
khb:$ sudo systemctl --runtime set-property system.slice MemoryHigh=4G MemoryMax=4G
즉 개별 프로세스마다 사용할 수 있는 최대 메모리 용량 4G (MemoryHigh=4G), 모든 프로세스 총합 메모리 용량 4G로 설정했다.