이름으로 프로세스 메모리를 영원히 제한

이름으로 프로세스 메모리를 영원히 제한

저는 개발을 위해 webpack을 사용하고 있습니다. 문제는 현재 프로젝트가 규모가 크고 약 6GB의 RAM(상단에 따르면 RAM의 약 30%)이 필요하다는 것입니다.

메모리를 영구적으로 제한하는 명령을 실행할 수 있습니까? 루트로 시작한다는 점에 유의하세요(우리가 사용하는 도구 - 저도 알아요 - 이상해요)

문제는 메모리가 너무 적으면 컴퓨터가 정지된다는 것입니다. 얼지 않을 방법을 찾고 있어요. 따라서 시스템 자체를 위해 500MB를 예약할 수도 있습니다. 나는 제안을 받아들인다

답변1

하드 및/또는 소프트 제한을 설정하는 데 사용하는 경우 ulimit [-H|S]일단 설정하면특정 쉘에 대해루트가 아닌 사용자는 하드 제한을 수정할 수 없습니다. 이를 수행하려면 루트가 아닌 프로세스 소유자가 실행을 중지하고 새로운 제한을 설정한 후 다시 시작해야 합니다.

현재 프로젝트의 실행 셸에서 제한을 지정해야 합니다. 호출 셸에서 이 작업을 수행하면 해당 셸에서 시작되거나 생성된 모든 프로세스에 제한 세트가 적용됩니다.결합된. 따라서 이를 염두에 두고 최대 스택 크기( ulimit -H -s <limit>) 및/또는최대 상주 세트 크기( ulimit -H -m <limit>최대 RSS의 경우).

RSS는 프로세스가 차지하는 물리적 메모리 부분입니다.

시스템에 따라 후자에 액세스할 수도 있고 그렇지 않을 수도 있습니다. (지금은 Ubuntu OS에 액세스하여 확인할 수 없습니다. 운이 좋지 않을 수도 있습니다.)

이 제한을 설정하면 얻을 수 있는 동작이 복제 실행에 대해 완전히 결정적이지는 않다는 점에 유의하는 것이 중요합니다. 주어진 순간에 시스템이 수행하는 작업에 따라 한 실행에서 다음 실행으로 서로 다른 시간에 메모리 블록을 교환하기로 결정할 수 있습니다. 즉, 실행 중 서로 다른 시간에 서로 다른 RSS 값에 도달할 수 있습니다. 예를 들어 관련되지 않은 다른 프로세스가 동시에 실행되는 경우입니다.

매뉴얼 페이지 외에도 ulimit답변과 설명을 확인하세요.여기.

답변2

/etc/security/limits.conf프로젝트(또는 이를 실행하는 프로그램)가 시스템 서비스, 슬라이스, 마운트 또는 소켓인 경우 를 사용하거나 설정하는 대신 service/slice/mount/socket 파일에서 리소스 제한을 설정해야 합니다 ulimit.

배포판에서 /usr/lib/systemd/system/또는 /etc/systemd/system배포판에 따라 시스템 단위 파일을 찾을 수 있습니다.

systemctl edit <unit name>빠르게 편집하려면 직접 편집을 사용할 수 있습니다 . 이전 명령 사양을 사용하면 --full편집하는 동안 전체 서비스 파일을 볼 수 있습니다(기본적으로 복사 및 교체 편집).

특정 문제에 대해 권장되는 설정은 다음과 같습니다.

MemoryHigh=<Bytes>

이 지시문을 프로그램의 메모리 사용 제한 지점을 지정하는 것으로 생각할 수 있습니다. K, M, G 또는 T를 접미사로 추가하여 각각 킬로바이트, 메가바이트, 기가바이트 또는 테라바이트를 지정할 수 있습니다.

다음을 설정할 수도 있습니다.

MemoryMax=<Bytes>

이 명령 값을 초과하면 장치 내에서 메모리 부족 킬러가 호출됩니다. 이 지침에 대한 맨페이지(systemd.resourcecontrol)는 이것을 "최후의 방어선"으로 권장합니다. 이전 지침과 마찬가지로 K, M, G, T를 지정할 수도 있습니다.

MemoryLimit또한 최신 시스템 버전을 사용하지 않는 경우 유용할 수 있는 위의 두 지시문 앞에는 더 이상 사용되지 않는 설정이 있습니다 .

언급된 두 가지 지시문은 전체 제어 그룹에 제한을 적용하여 분기된 프로세스가 제한을 벗어날 수 없도록 방지합니다. 그러나 LimitAS(주소 공간 제한) 지시문을 사용하여 개별 프로세스에 제한을 설정할 수도 있습니다.

MemoryHigh=및를 사용하는 샘플 서비스 파일MemoryMax=

[Unit]
Description=A foobar service that does foo and bar
After=network.target

[Service]
Type=simple
MemoryHigh=2500M
MemoryMax=3000M
ExecStart=/usr/bin/foobar-daemon start
ExecStop=/usr/bin/foobar-daemon stop

[Install]
WantedBy=multi-user.target

지침에 대한 전체 설명 또는 기타 정보

바라보다systemd.resourcecontrol또는 man systemd.resource-control그리고시스템 실행 프로그램또는man systemd.exec

관련 정보