메모리 집약적인 애플리케이션에 대한 malloc 거부

메모리 집약적인 애플리케이션에 대한 malloc 거부

malloc프로세스를 종료하는 대신 OOM 킬러가 선택한 프로세스를 거부하는 것이 가능합니까 ? 적어도 프로세스에 의해 메모리 부족이 기록될 수 있다고 생각합니다. 이는 종료되는 것보다 낫습니다. 또한 문제의 일부는 공격 프로세스를 종료하기 전에 시스템이 오랜 시간(몇 분) 동안 응답하지 않는다는 것입니다.

제어 그룹이 다른 프로세스의 메모리를 보장하는 데 더 나은 도구입니까?

답변1

프로세스를 시작하기 전에 제한을 설정할 수 있습니다. 예를 들어 현재 셸의 가상(소프트) 메모리 제한을 1G로 설정합니다.

ulimit -S 1048576

시스템 전체에 걸쳐 이러한 제한을 설정할 수도 있습니다. 예를 들어 다음과 같습니다.

  • /etc/security/limits.conf:

    *               soft    as             25165824
    *               hard    as             25165824
    
  • /etc/systemd/system.conf:

    DefaultLimitAS=25769803776
    

32G 시스템의 모든 프로세스를 24G로 제한합니다. 두 프로세스가 함께 이 OOM 상황을 일으킬 수는 있지만 실제로는 그런 일이 발생하지 않습니다.

"공격 프로세스를 종료하기 전에 오랫동안 응답이 없습니다"에 대해:

  • 스왑 파티션을 사용하지 마십시오. 그렇지 않으면 모든 것이 빨리 종료됩니다.

실제로 malloc(가상 메모리)은 실제로 문제가 되지 않습니다. OOM은 해당 메모리를 사용하여 프로세스가 시작될 때만 발생합니다. 불행하게도 Linux에서는 상주 메모리를 제한할 수 없습니다. "메모리 오버커밋"을 참조하세요.

관련 정보