메모리 제한으로 systemd를 실행하면 프로그램이 충돌하는 이유는 무엇입니까?

메모리 제한으로 systemd를 실행하면 프로그램이 충돌하는 이유는 무엇입니까?

저는 다양한 프로그램에 대해 다양한 방법을 사용하여 리소스 관리를 제어합니다. 내가 사용할 때시스템 실행 중~을 위한절뚝거리는(GNU 이미지 처리 프로그램), 사진의 메모리 요구 사항이 제한(즉, 내가 설정한 300MB)보다 높을 때 프로그램이 충돌하고 닫힙니다. 당신은 가지고 있습니까?시스템 실행 중충돌이나 메모리 제한 없이 안전하게 사용하는 방법은 무엇입니까?

다음 명령을 사용하여 바로가기(예: 데스크톱 파일)에서 systemd-run을 사용하여 시작합니다.

systemd-run --scope -p MemoryLimit=300M gimp-2.8 %U

답변1

프로그램(예: gimp)이 컴파일되고 모든 동작이 사전 설정됩니다. 자체적으로 메모리를 할당할 수 없으면 어떤 작업도 실행할 수 없습니다. 프로그램이 액세스할 수 없는 메모리에 액세스하려고 할 때마다 프로그램은 해당 메모리(예를 들어 gimp의 경우 이미지를 저장하는 데 사용됨)로 실행될 것으로 예상하기 때문에 종료해야 합니다(세그먼트 오류로 인해).

물론 이미지는 더 적은 메모리로 저장될 수 있지만 이는 김프의 코드에는 없으며 단순히 메모리에 대한 김프 액세스를 거부한다고 해서 더 효율적이지는 않습니다.

메모리 부족 문제가 발생하는 경우 좋은 해결책은 다음과 같습니다.파일 교환. 이는 메모리에 대한 프로그램의 액세스를 제한하지 않고, 대신 사용되지 않는 메모리를 디스크(RAM이 아닌)에 저장하고 필요할 때 디스크에서 다시 가져옵니다.

관련 정보