Postgres 공부를 하면서 그리고 datapage , memory에 관한 공부를 진행하면서 더욱 근본적인 컴퓨터에 대해서 공부의 필요성을 느꼈다. 어쩌면 컴퓨터에서 일어나는 일이기에 당연한 것이기도하다. 컴공과 출신이 아닌 내가 지금이라도 한 번 정리해야하는건 필연적인 과정이다.
리눅스에서 메모리는 시스템 성능에 매우 중요한 역할을 한다. 메모리 자원의 적절한 관리는 시스템 안정성과 성능을 유지하는 데 필수적이다. `free -h` 명령어는 시스템의 메모리 사용 상태를 확인하는 데 유용한 도구로, 사람이 읽기 쉽게 메모리 사용량을 보여준다. 여기서는 `free -h` 명령어의 출력 항목을 기반으로 리눅스 메모리 관리에 대해 설명한다.
1. Mem (물리적 메모리) 섹션
- total (전체 메모리)
시스템에 설치된 물리적 메모리(RAM)의 총량을 의미한다. 이 값은 시스템이 사용할 수 있는 전체 물리적 메모리 용량이다. 예를 들어, 16GB의 물리적 메모리가 장착된 시스템에서는 total이 16GB로 표시된다.
- used (사용 중인 메모리)
현재 사용되고 있는 메모리의 양을 의미한다. 이 값에는 실제로 프로세스가 사용하고 있는 메모리뿐만 아니라 버퍼와 캐시로 사용 중인 메모리도 포함된다. 이는 메모리가 프로세스에 의해 할당되었거나 시스템 성능 최적화를 위해 일시적으로 저장되는 데이터를 포함한다.
- free (사용 가능한 메모리)
아무 작업에도 사용되지 않고 남아 있는 물리적 메모리이다. 그러나 리눅스는 메모리의 효율적인 활용을 위해 가능한 한 많은 메모리를 캐시로 사용하려 하기 때문에, free 값이 적더라도 시스템이 메모리 부족 상태인 것은 아니다. 필요한 경우, 캐시 메모리가 해제되어 다른 프로세스에서 사용할 수 있다.
- shared (공유 메모리)
여러 프로세스 간에 공유되고 있는 메모리의 양을 의미한다. 주로 tmpfs나 IPC(프로세스 간 통신)에서 공유 메모리로 사용된다. 이 메모리는 여러 프로세스가 데이터를 공유할 때 활용된다.
- buff/cache (버퍼/캐시 메모리)
버퍼와 캐시로 사용 중인 메모리의 합계를 나타낸다. 이 값은 시스템 성능을 최적화하기 위해 메모리 자원을 효율적으로 사용 중인 메모리 영역을 포함하며, 필요 시 다른 프로세스에 할당될 수 있다.
***1. 버퍼(Buffer)는 주로 디스크 I/O 작업을 최적화하기 위해 사용된다. 데이터를 디스크로 쓰기 전에 일시적으로 메모리에 저장해 두는 역할을 한다. 데이터를 디스크에 직접 쓰는 대신, 먼저 버퍼에 저장함으로써 여러 개의 작은 쓰기 작업을 하나의 큰 작업으로 묶어 디스크 쓰기 성능을 높인다. 또한, 디스크에서 데이터를 읽을 때도 마찬가지로 버퍼에 데이터를 저장한 후 처리한다.
***2. 캐시(Cache)는 자주 사용되는 데이터나 파일을 메모리에 저장하여, 디스크에 다시 접근하지 않고 빠르게 데이터를 읽을 수 있도록 한다. 캐시는 파일 시스템이나 프로그램이 자주 접근하는 데이터를 저장해 두기 때문에 성능을 크게 향상시킬 수 있다. 예를 들어, 웹 서버가 자주 요청받는 파일을 캐시로 관리하면 디스크 접근 없이 빠르게 파일을 제공할 수 있다.
- available (사용 가능한 메모리)
시스템에서 실제로 사용 가능한 메모리의 양을 나타낸다. available은 캐시 메모리까지 고려한 값으로, 프로세스가 추가적인 메모리를 요청할 때 시스템이 제공할 수 있는 메모리 자원이다. 캐시 메모리가 필요시 해제되어 재사용될 수 있기 때문에, available 값이 free 값보다 클 수 있다.
2. Swap (스왑 메모리) 섹션
- total (스왑 총량)
시스템에서 사용할 수 있는 스왑 공간의 총량을 나타낸다. 스왑은 물리적 메모리가 부족할 때, 디스크를 사용하여 메모리처럼 활용하는 공간이다. 스왑은 성능 저하를 초래할 수 있지만, 물리적 메모리 부족 시에는 시스템이 스왑을 사용해 안정성을 유지한다.
- used (사용 중인 스왑 메모리)
현재 사용되고 있는 스왑 공간의 양을 의미한다. 물리적 메모리가 부족할 때, 사용하지 않는 메모리 페이지가 스왑으로 옮겨지며, 스왑에 저장된 데이터는 물리적 메모리보다 느리게 접근된다. 스왑이 많이 사용되는 경우, 시스템 성능이 저하될 수 있다.
- free (사용 가능한 스왑 메모리)
남아 있는 스왑 공간을 나타낸다. 스왑 공간이 충분히 남아 있으면, 물리적 메모리가 부족할 때 시스템이 안정적으로 동작할 수 있다.
리눅스 메모리 관리 동작 방식
리눅스는 메모리를 매우 효율적으로 관리한다. 가능한 많은 메모리를 버퍼와 캐시로 사용하여 시스템 성능을 최적화한다. 그러나 새로운 프로세스가 메모리를 요구하면, 캐시 메모리나 버퍼에 사용 중인 메모리를 해제하여 해당 프로세스에 할당한다. 이를 통해 시스템은 메모리를 낭비하지 않고, 필요에 따라 동적으로 할당할 수 있는 유연성을 유지한다.
버퍼와 캐시로 사용되는 메모리는 언제든지 다른 용도로 사용할 수 있도록 관리되며, 이는 시스템 성능을 향상시키는 데 중요한 역할을 한다. `free -h` 명령어에서 free 값이 적다고 해서 시스템에 메모리가 부족한 것은 아니다. available 값을 참고해야 실제로 사용할 수 있는 메모리를 파악할 수 있다.
결론
리눅스 메모리 관리에서 `free -h` 명령어는 시스템 메모리의 상태를 쉽게 이해할 수 있도록 돕는다. 이를 통해 엔지니어는 물리적 메모리와 스왑 메모리의 사용 상태를 파악하고, 버퍼/캐시 메모리와 available 메모리를 고려해 시스템이 실제로 얼마나 많은 메모리를 사용할 수 있는지 정확하게 판단할 수 있다. 이 정보를 바탕으로 시스템의 성능 최적화와 메모리 관리에 필요한 조치를 취할 수 있다.
'DBA의 길' 카테고리의 다른 글
DBA 의 컴퓨터 공부 - write throuth , write back 그리고 Postgres (0) | 2024.10.20 |
---|---|
Postgres - vacuum .. 은 메모리를 청소하지 않아 (1) | 2024.10.15 |
INDEX에 대하여 .. 조금 더 깊은 이야기 (Postgres 와 datapage) (2) | 2024.10.15 |
INDEX에 대하여, JOIN을 곁들인 (0) | 2024.10.13 |
JOIN에 대하여 (2) | 2024.10.13 |