무료 스왑이 없는데 56GiB의 여유 메모리가 있습니까?

무료 스왑이 없는데 56GiB의 여유 메모리가 있습니까?

나는 56GiB의 여유 RAM(free -m)을 표시하지만 1MiB의 여유 스왑만 표시하는 CentOS7.9 시스템을 가지고 있으며 3일 동안 이 상태를 유지했습니다. 초기 문제 보고서는 대규모(EE 에뮬레이트된) 애플리케이션이 계속 충돌한다는 것이었습니다.

이 상황에서 기억이 멈추는 원인이 무엇인지 이해하도록 도와줄 수 있는 사람이 있습니까?

답변1

실제로 얼마나 많은 스왑 공간이 사용되는지는 언급하지 않았지만, 그 양이 크지 않다면 하나의 프로세스(또는 프로세스)가 사용 가능한 메모리를 모두 소모하거나 소모하게 만드는 상황으로 설명할 수 있습니다(예를 들어캐시하지 않아야 함을 표시하지 않고 많은 파일을 읽음). 이로 인해 가능한 한 많은 데이터가 메모리 밖으로 밀려나고 그 중 일부는 스왑으로 종료됩니다.

스왑 영역의 데이터는 필요할 때만 메모리로 다시 가져오므로 시스템은 일반적으로 스왑 영역에 데이터(특정 시점에 사용되었지만 자주 필요하지 않은 데이터에 해당)를 축적합니다. 데이터가 사용되더라도 스왑 영역에 보관할 수 있습니다. 이렇게 하면 메모리를 다시 해제해야 하는 경우 (변경되지 않은 경우) 스왑 영역에 다시 복사할 필요가 없습니다.

스왑 사용량을 안정적으로 줄이는 유일한 방법은 스왑의 데이터가 포함된 프로세스를 종료하거나 종료되도록 하거나 사용 가능한 스왑 자체를 줄이는 것입니다( swapoff).

귀하가 설명하는 것과 같은 상황이 극복할 수 없는 문제를 야기해서는 안 됩니다. 스왑의 데이터가 적극적으로 사용되는 경우 메모리에 다시 로드될 때까지 시스템 속도가 상당히 느려지지만 사용 가능한 메모리가 많기 때문에 시스템이 충돌할 가능성이 훨씬 적습니다. 교환하고 교환할 데이터를 내보냅니다).

답변2

이 대규모 응용 프로그램이 메모리를 가득 채우면 "비활성" 소프트웨어의 다른 부분이 스왑 영역으로 푸시됩니다( /proc/sys/vm/swappinessRAM에서 스왑 영역으로 콘텐츠를 얼마나 적극적으로 이동하는지에 영향을 미치도록 변경이 이루어질 수 있습니다). 마침내 종료/충돌되면 모든 메모리가 해제되고 스왑 영역에 다른 소프트웨어와 여유 RAM이 남게 됩니다.

메모리는 해당 메모리가 속한 애플리케이션에서 사용될 때까지 스왑에서 다시 이동되지 않습니다. 스왑의 메모리를 자주 사용하지 않으면 RAM으로 다시 가져오는 데 시간이 걸릴 수 있습니다. 스왑( swapoff -a)을 닫아 강제로 모든 것을 RAM으로 다시 플러시하고 스왑을 지운 다음 swapon -a스왑을 다시 열 수 있습니다.

관련 정보