핵심요약

리눅스 가상머신에서 프로그램을 작동하고 있는데, 프로세스가 작동되다가 꺼지는 현상이 발생되었다. 잘 안되어서 다른 것을 하다가 이제서야 해당 현상을 해결하려 해봤다.


상세 현상

프로그램은 돌아가는 것을 확인했으나, 상당량의 메모리를 소비하는 것을 확인했다.

이후에는 가상머신 자체가 렉이 걸리며 작동을 안한다.

몇 시간 기다리면 가상머신 작동이 복원되지만, 작동 중인 프로세스는 멈춰버린다.

결과적으로 내가 원하는 프로그램 작동을 못하게 된다.


원인 추측

이전에도 지나친 서버 자원 활용으로 인해 서버 자체에서 쓸모없는 프로세스를 킬 (kill)해 버리는 현상을 본 적이 있다.

본인이 현재 노트북 내에서 리눅스 가상머신 환경을 따로 구축했고, 최대 메모리는 약 5.4기가, 최대 CPU는 7개 정도로 설정했는데,

아마도 사용하는 프로그램 특성 (대용량의 데이터베이스를 기반으로 한 데이터 변환 기능)상 “메모리의 초과로 인한 프로세스의 강제 종료”인 것 같다.


해결 : systemctl 이용한 가용메모리 제한

출처 : markyang92.log 블로그

따라서 사용자가 사용할 자원자체를 제한해버리기로 했다.

어차피 홀로 사용하는 가상 서버라 부담없이 다음과 같은 명령어를 입력했다.


1. 현재 사용하는 프로세스 확인

khb:$ systemd-cgls

Imgur

이런식으로 현재 사용되는 서비스들과 각 계층 (모든 프로세스가 실행되는)들을 확인할 수 있다.


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로 설정했다.