저는 100 TPS API 트래픽을 관리하는 Linux 서버를 유지 관리하고 있습니다. 처음에는 RAM이 8GB 밖에 없었습니다. 우리는 최근 메모리를 두 배로 늘렸고 JVM 메모리 소비 제한도 두 배로 늘렸습니다. 사용 가능한 메모리가 아직 부족합니다.
free -m
total used free shared buff/cache available
Mem: 15885 9909 156 15 5819 5584
Swap: 18431 127 18304
보시다시피 사용 가능한 메모리는 156MB입니다. 캐시가 지워지면 free
메모리가 늘어납니다. 그러나 몇 시간이 지나도 여전히 같은 수준으로 떨어졌습니다. 이는 정상적인 동작입니까, 아니면 메모리를 다시 늘려야 합니까?
답변1
이는 정상적인 동작입니다. 사용되지 않은 메모리는 전반적인 성능 향상을 위해 캐싱에 사용됩니다. 다른 목적으로 메모리가 필요한 경우 메모리가 자동으로 해제됩니다. 이 특정 동작을 확인하고 다른 사람에게 보여주는 것 외에는 캐시를 삭제할 필요가 없습니다. 메모리에 여유 공간이 있으면 디스크 I/O 활동이 증가하고 애플리케이션 속도가 느려질 수 있습니다.
나도 믿는다자바더 많은 사용 가능한 메모리가 있으면 자연스럽게 더 많은 메모리를 사용하게 되며, 이를 방지하려면 많은 매개 변수가 필요합니다.
이로 인해 일부 모니터링 도구가 메모리 사용량에 대해 경고하는 경우 실제 사용 가능한 메모리에 대한 올바른 보고를 제공하도록 모니터링 도구를 수정해야 합니다(예: 여기서 free는 156mb의 사용 가능한 메모리 외에 5584mb의 사용 가능한 메모리가 있음을 나타냅니다).
참고로, 157MB의 스왑 공간을 사용하는 것은 스왑 인 및 스왑 아웃을 하지 않는 한 문제가 되지 않습니다. (이는 다음 명령으로 확인할 수 있습니다.)vmstat
). 이는 실제 활동에 157MB의 메모리를 사용할 수 있음을 의미합니다. 아직은 지켜봐야 할 부분입니다.
답변2
Linux 커널은 버퍼나 캐시만큼 많은 메모리를 사용합니다. 이는 시스템 속도를 높이며 전적으로 의도적인 것입니다. 실제로 찾고 있는 번호는 '사용 가능' 열에 있습니다. 애플리케이션에 더 많은 메모리가 필요한 경우 운영 체제는 애플리케이션이 사용할 수 있도록 일부 캐시를 확보합니다.