12GB의 물리적 메모리(RAM) 할당을 사용하여 Linux 서버에서 실행되는 Java 애플리케이션이 있고 아래와 같이 시간이 지남에 따라 정상적인 사용률이 표시됩니다.
sys> free -h
total used free shared buff/cache available
Mem: 11G 7.8G 1.6G 9.0M 2.2G 3.5G
Swap: 0B 0B 0B
최근 애플리케이션의 로드를 늘리면 RAM 사용률이 거의 가득 차고 여유 공간이 거의 없어 약간의 속도 저하가 발생할 수 있지만 애플리케이션은 여전히 잘 작동하는 것을 볼 수 있습니다.
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 134M 17M 411M 240M
Swap: 0B 0B 0B
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 145M 25M 373M 204M
Swap: 0B 0B 0B
나는 언급했다https://www.linuxatemyram.com/다음 사항이 제안됩니다.
경고 표시조사해야 할 실제 메모리 부족 상황:
- 사용 가능한 메모리(또는 "사용 가능한 + 버퍼/캐시")가 0에 가깝습니다.
- 사용된 스왑이 증가하거나 변동합니다.
- dmesg | grep oom-killer는 OutOfMemory-killer의 작동 상태를 표시합니다.
위의 사항을 보면 애플리케이션 수준에서는 OOM 문제가 보이지 않으며 스와핑도 비활성화되어 있습니다. 따라서 이 두 가지 사항은 무시됩니다. 저를 괴롭히는 것은 사용 가능한 메모리가 0보다 작다는 것입니다. 명확히 해야 합니다.
질문:
available이 0에 가까우면 시스템 충돌이 발생합니까?
사용 가능한 메모리가 줄어들면 RAM을 업그레이드해야 한다는 뜻인가요?
RAM 메모리는 어떤 기준으로 할당/증가해야 합니까?
RAM 메모리 할당을 위해 따라야 할 공식적인 권장 사항/지침이 있습니까?
답변1
available이 0에 가까우면 시스템 충돌이 발생합니까?
널리 사용되는 최신 운영 체제는 이러한 상황을 처리할 수 있으므로 시스템이 너무 느려져서 실제로 사용할 수 없을지라도 시스템이 정상적으로 충돌하지는 않습니다.
사용 가능한 메모리가 줄어들면 RAM을 업그레이드해야 한다는 뜻인가요?
사용 가능한 RAM이 실제로 너무 낮아 프로세스가 RAM에서 제거될 수 있습니다. 아마도 메모리를 더 추가해야 할 것입니다.
RAM 메모리는 어떤 기준으로 할당/증가해야 합니까?
성능이 영향을 받거나(즉, 과도한 스왑 사용량으로 인해 디스크 스래싱이 발생하는 경우) 작업을 완료하는 데 필요한 RAM이 부족하여 작업을 완료할 수 없는 경우입니다.
RAM 메모리 할당을 위해 따라야 할 공식적인 권장 사항/지침이 있습니까?
내가 아는 한, 아니오. 사람마다 RAM 요구 사항이 다릅니다. 2021년 최신 운영 체제, 데스크톱 환경, 웹 브라우저에 관해 이야기한다면 4GB RAM이 절대적으로 최소이지만 8GB 미만의 RAM을 사용하는 것은 권장하지 않습니다. 궁극적으로 이는 작업 흐름에 따라 다르며 아무도 모릅니다. 일부 분야에서는 사람들이 이미 128GB RAM을 갖춘 워크스테이션(비디오 및 이미지 편집, 3D 렌더링, 수학/화학/물리/엔지니어링 컴퓨팅, 인공 지능)을 보유하고 있습니다.
답변2
available이 0에 가까우면 시스템 충돌이 발생합니까?
내 서버 중 하나에서 테스트할 때 아래와 같이 로드한 메모리가 거의 가득 찼습니다.
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 135M 25M 187M 45M
Swap: 0B 0B 0B
내 앱만(더 많은 메모리 소비) 종료되는 것을 볼 수 있습니다.메모리 부족 킬러커널 로그에서 참조 가능
dmesg -e
[355623.918401] [21805] 553000 21805 69 21 2 0 0 rm
[355623.921381] Out of memory: Kill process 11465 (java) score 205 or sacrifice child
[355623.925379] Killed process 11465 (java), UID 553000, total-vm:6372028kB, anon-rss:2485580kB, file-rss:0kB, shmem-rss:0kB
https://www.kernel.org/doc/gorman/html/understand/understand016.html
Out Of Memory Killer 또는 OOM Killer는 시스템 메모리가 심각하게 부족할 때 Linux 커널에서 사용하는 프로세스입니다. 이는 Linux 커널이 프로세스에 너무 많은 메모리를 할당하기 때문에 발생합니다. ...이는 실행 중인 프로세스에 물리적으로 사용 가능한 것보다 더 많은 메모리가 필요하다는 의미입니다.