사이트 내 전체검색
[linux] 메모리 관리
로빈아빠
https://cmd.kr/server/224 URL이 복사되었습니다.

본문

메모리 관리

-------------------------------------------------------------------
* 먼저 이 내용은 The Linux System Administrators Guide에서 일부 발췌했음을 알린다.

작성자 한마디
* 제목은 메모리 관리 이지만, 가상 메모리인 스왑 공간에 대해서  대부분 다루고 있다. 실제메모리 관리는 사용자보다 커널에 의해서 자동적으로 하기 때문에 그런거 같다. 이문서는 가상 메모리와 스왑 공간 할당, 사용에 대한 개괄적인 내용을 다루고 있다. 파티션 설정이나 스왑 공간에 대해서 더 자세히 알고싶은 사람은  여기를 참조 하기 바란다.

  http://kldp.org/HOWTO/mini/html/Partition/Partition.html
----------------------------------------------------------------------

1. 가상 메모리란?
리눅스에서 가상 메모리(Virtual Memory)를 지원한다.
그럼 가상 메모리란 무엇인가? 메모리는 보통 물리적 메모리인 RAM을 생각하기 쉽다. 하지만 이 RAM만을 가지고 시스템을 운용하기에는 힘들다 특히 적은 RAM을 보유하고있는 시스템은 더욱더 힘들다. 그것을 보완하기 위해서 디스크의 일부를 마치 확장된 RAM처럼 이용하는 것이다.

2. 가상 메모리의 유용성
리눅스 커널은 실제메모리에 올라와 있는 메모리 블록중에 쓰이지 않는 것은 가상 메모리에 저장하고, 필요한 메모리 블록만 불러서 실제 메모리에서 쓴다. 그리고 필요 없으면 다시 가상메모리 공간으로 보낸다. 이렇게 가상메모리를 이용함으로서 실제메모리의 효율성을 높인다.

3. 스왑공간 생성
스왑 공간 생성 방법은 두가지가 있는데 먼저 스왑 파티션을 따로 생성 하는 것이고 두번째는 스왑 파일을 만드는 것이다.

그럼 스왑 파일에 대해서 알아보자
스왑 파일은 평범한 파일이며, 파일시스템 내에 존재 해야 된다. 그리고 스왑파일은 홀이 없어야 한다.

홀이 없는 스왑파일을 생성하는 방법은 다음과 같다.

$dd if=/dev/zero of=/extra-swap bs=1024 count=1024
1024+0 records in
1024+1 records out
$

위에서 /extra-swap은 스왑화일 이름이다.
bs= 뒤에 오는 숫자는 입출력 단위 크기를 지정한것이다.
count = 뒤에 오는 숫자는 입출력 단위의 몇배 크기의 파일을 만들 것인지 지정하기 위한것이다.
*count는 꼭 4의 배수로 지정하는 것이 좋다.

두번째 방법인 스왑 파티션은 일반 파티션과 다를것이 없다. 스왑 파티션은 보통 설치할때 생성한다.
단 쓸 스왑 파티션은 type 82로 지정하는것이 좋다.

리눅스 스왑공간은 127mb로 제한하고 있다.
만약 127mb 이상을 스왑 공간으로 사용하고 싶다면 파티션 분할시 127mb씩 스왑 파티션을 분할해서 쓰기를 권한다.

스왑 파일이나 스왑 파티션을 생성하면 그에 해당하는 인식표를 달아야 한다.

$mkswap /extra-swap 1024
Setting up swapspace. size = 104480 bytes
$

이렇게 했지만 스왑공간을 사용한것은 아니고 커널이 이것을 가상 메모리로 사용할수 있도록 준비만 마친것이다.

mkswap을 사용할때는 주의 해야 한다.
왜냐하면 파일이나 파티션이 사용중인지 판별해주지 않는다. 그러므로 잘못 사용하면 파일과 파티션이 공중분해 될수 있다.

다행히 mkswap 명령은 주로 시스템 설치시에만 사용된다.

4. 스왑 공간 사용하기
스왑 공간을 초기화하는데는 swapon을 쓴다.

$swapon /extra-swap

스왑 공간들은 /etc/fstab 파일에 의해서 자동적으로 사용가능하다.
free 명령을 내리면 스왑의 사용상황을 알수 있다. (/proc/meminfo을 통해서도 알수 있다.)

스왑 공간은 swapoff로 멈출수 있다. (임시로 잡은 스왑이 아니라면 굳이 멈출 필요가 없다.)

주의 할점은 임시로 잡은 스왑공간이라면 스왑 종료시 그 공간에 있던 메모리 페이지들은 실제 메모리에 들어가게 된다. 실제 메모리 보다 작은 페이지들이 있으면 다행이지만 실제 메모리 보다 큰 메모리 페이지가 있을 경우 다른 스왑 공간으로 내보내고, 다른 스왑공간도 부족하다면 리눅스 시스템은 상당히 느려질수 있다.
그러므로 스왑을 정지하기 전에 free를 이용해 실제 메모리 공간이 충분히 있는지 확인해야 한다.

5. 스왑공간 할당
스왑 공간 할당은 리눅스 설치시 바로 스왑 파티션을 잡는것도 좋지만 귀찮아도 시스템을 설치한후 메모리 필요량을 체크한후 알맞은 스왑 파티션을 설정하는것이 좋다.

스왑 파티션 설정시에는 메모리 필요량의 10% 이상의 여유를 두면 좋다.

스왑 공간을 할당할때 실제 메모리의 두배로 할당하라는것은 근거 없는 이야기이다.

예를 들자면 만약 128메가의 실제 메모리를 가지고 있다면 256메가의 스왑공간을 할당해야 하고, 256메가의 실제 메모리라면 512메가를 할당해야 한다.
이런 계산 방법은 정말 어리석은 계산 방법이다. (필자도 이것을 보기 전까진 그랬다-_-;)..

스왑 파티션과 스왑 파일간의 성능은 거의 차이가 없으므로 자신이 원하는데로 스왑 공간을 설정하면 된다. (장단점이 있다.그건 직접 해보시길~^^;)

6. 버퍼 캐쉬
디스크의 내용을 메모리에 저장하는것인데 거의 신경 쓸 필요가없다.
왜냐하면 리눅스 커널에서 자동적으로 관리해주기 때문이다.

버퍼 캐쉬에 대해서 더 잘알고 싶으면 다른 문서를 참고하라.

댓글목록

등록된 댓글이 없습니다.

1,139 (14/23P)

Search

Copyright © Cmd 명령어 3.144.45.187