안녕하세요. 제목 그대로인데요.
일단 free 내용을 참고해 주시면 감사하겠습니다.
# free -mh
total used free shared buff/cache available
Mem: 503G 167G 65G 121M 270G 334G
Swap: 127G 87G 40G
메모리 상태를 보다가 swap 메모리 항목이 있어서, 처음에는
" 스왑이 생겼다고? 메모리가 부족한가? "
라고 생각했는데, 보면 available 334G / Free 167G 인 걸로 봐서, 메모리가 부족한 건 아닌 걸로 판단했습니다.
그럼, 메모리도 부족하지 않은데 왜 swap 이 생겼나? 라고 생각해 보니, 아래와 같은 결론이 나왔습니다.
"cache 에서도 놓아둘 필요 없을 정도로 접속 빈도가 떨어지는 데이터를 , OS 가 알아서 mem -> cache -> swap 으로 옮겼다"
이전에는 "swap 이 생기는 거 자체가 메모리가 부족하다는 증거다" 라고 생각했습니다만,
지금 생각해 보면 - 현실적으로 - 메모리 크기가 아무리 커도 swap 이 생기는 게 당연하다
라고 보입니다.
위의 판단이 맞을까요?
아니면 swap 은 없는게 맞고, swap 이 있다는 건 무언가 최적화 등의 작업이 필요한 걸까요?
고견 부탁드립니다.
이상입니다. 감사합니다.
6개의 답변이 있습니다.
리눅스에선 swap 메모리가 없을 순 없습니다.
swap은 물리적인 메모리를 사용하는게 아닌, 디스크 영역을 사용 하는 것이고,
swap 메모리는 물리적인 메모리가 커도 기본적으로 활성화가 됩니다.
SWAP메모리가 없을수 없습니다.설치할때 기본인데 그렇다면 문제가 있습니다.
SWAP은 시스템 형태에 따라 도움이 될 수도 있고 오히려 성능저하를 가져올 수도 있습니다.
또한 swappiness 설정 값에 따라 메모리가 풀이 나지 않더라도 swap 영역을 사용합니다.
위에 언급하신 내용으로 보면 swap의 절반정도 사용하고 있는 것으로 나오는데요.
이 사용이 peak시에 발생한 것인지 지속적으로 발생한 것인지? 모니터링 해보셔야 할 것 같습니다.
지속적으로 부족하다면 메모리 증설도 필요하구요.
swap은 메모리가 부족할때 메모리 보조 역할은 하지만 메모리만큼의 성능은 나오지 않습니다.
지속적인 swap이 발생한다면 안정적인 성능을 위해 증설이 필요합니다.
리눅스 OS 설치 해보시면 아시겠지만 swap 메모리 파티션 설정 안하면
리눅스 OS 설치 자체가 안될텐데요
리눅스에서 기본적으로 스왑 메모리를 활성화해서 사용합니다.
메모리의 많고, 적고 여부를 떠나서...
/etc/fstab에도 기본적으로 swapfile을 등록해서 사용하도록 설정되게 되고...
swap file을 확인해 보려면...
swapon --show
명령으로 확인해 보면 되겠고...
/etc/fstab에서 부팅시 자동 설정되게 되어 있는 내용을 확인해 볼 수도 있겠고요.
스와을 비활성화하고 싶다면
swapoff -v 스왑파일
명령으로 비활성화 시켜 주면 되겠고요.
/etc/fstab
설정된 swapfile 부분을 제거해 주고 재 부팅 시켜 주면 컴퓨터가 켜질때 활성화되지 않게 되겠고요.
특별한 이유가 없다면 그냥 사용하는 것이 더 낫지 않을까 하는 생각이 드네요.
가능하다면 swapfile이 가장 빠른 디스크를 사용하도록 설정해서 사용하는게 좋을 걸로 보이고요.
리눅스에서 놀고 있는 free메모리를 활용하는 측면에서 buffer/cache 활용하고 메모리 요청을이 오면 변환 로직에 따라 cache메모리를 free로 반환합니다
즉 cache는 파일의 real data릉 cache하고 메모리 공간입니다 한번이라도 disk에서 읽었던 file을 메모리에 로딩 해 놓기 때문에 재 요청시 빠른 응답/성능과 read 성능이 향상될수 있습니다
실제 메모리 용량이 부족한 경우 swap응 사용할 수 있기 때문에 간헐적으로 메모리를 많이 사용하는 타이밍에는 성능 저하가 될수 있죠
결론적으로 ex) vfs_cache_pressure 설정을 어떻게 하느냐에따라 메모리 사용량으로 cache—> swap 문제를 해결 할 수 있을 것 같습니다