스왑파일

언제나 초보사용자입니다.

이번에 스왑파일을 사용하면서 이런기능도 있구나 하고 생각하다 한가지 알고 싶어서 질문합니다.
현재 스왑파일을 일정부분 할당해 두고 실제 사용은 수동(터미널에서 명령 실행)으로 필요할때 마다 실행하는 것으로 했습니다.

질문1)
그래서 하다보니 한가지 생각이 드는 것인데,
예를들어 메모리가 90% 이상 사용하게 되면 자동적으로 스왑파일이 사용할 수 있게 실행되게 하는 방법은 없나요?

질문2)
스왑파일이 실행된 후 수동(터미널에서 명령 실행)으로 다시 설정 제거 하는 방법은 무엇인가요?

질문3)
그럼 위의 질문을 종합하여 메모리 90%이상이면 스왑파일 자동 실행되고,
메모리+스왑파일 30% 이하면 이번에는 자동으로 스왑파일이 제거되는 방법은 있을까요?

고수님들의 무한 답변 부탁드립니다.

추가적으로 스왑파일과 스왑파티션의 속도 차이는 제가 찾아 보기로는 스왑파티션쪽이 빠른 것처럼 보이는데,
맞는지 확인도 부탁드립니다.

스왑을
정확히 아는건 아니지만…

11년간의
메일서버(FreeBSD) 운영경험에 비추어 느끼는바가…

'빠르기’보다
'안정성’에 초점이 있는거 같아요.

24시간 365일 비가 오나 눈이 오나
봄/여름/가을/겨울 계절이 바뀌어도
탈없이 쉼없이 계속 일을 하려면
스왑이 필요한거 같더이다.

물리적 메모리가 아무리 많아도
서버는 스왑이 ‘반드시’ 필요하다고 생각해요.

당연 스왑은 파일보다 파티션차원서
준비된게 안정적이구요

내부적 정확한 설계도나 동작원리는…
문서를 자세히 읽어봐야…

[quote="황병희":15rx4yjd]스왑을
정확히 아는건 아니지만…

11년간의
메일서버(FreeBSD) 운영경험에 비추어 느끼는바가…

'빠르기’보다
'안정성’에 초점이 있는거 같아요.

24시간 365일 비가 오나 눈이 오나
봄/여름/가을/겨울 계절이 바뀌어도
탈없이 쉼없이 계속 일을 하려면
스왑이 필요한거 같더이다.

물리적 메모리가 아무리 많아도
서버는 스왑이 ‘반드시’ 필요하다고 생각해요.

당연 스왑은 파일보다 파티션차원서
준비된게 안정적이구요

내부적 정확한 설계도나 동작원리는…
문서를 자세히 읽어봐야…[/quote:15rx4yjd]

언제나 초보사용자입니다.

스왑파티션과 스왑파일에 대한 설명고맙습니다.^^

[quote="mimiqq11":jee4ytjg]언제나 초보사용자입니다.

이번에 스왑파일을 사용하면서 이런기능도 있구나 하고 생각하다 한가지 알고 싶어서 질문합니다.
현재 스왑파일을 일정부분 할당해 두고 실제 사용은 수동(터미널에서 명령 실행)으로 필요할때 마다 실행하는 것으로 했습니다.

질문1)
그래서 하다보니 한가지 생각이 드는 것인데,
예를들어 메모리가 90% 이상 사용하게 되면 자동적으로 스왑파일이 사용할 수 있게 실행되게 하는 방법은 없나요?

질문2)
스왑파일이 실행된 후 수동(터미널에서 명령 실행)으로 다시 설정 제거 하는 방법은 무엇인가요?

질문3)
그럼 위의 질문을 종합하여 메모리 90%이상이면 스왑파일 자동 실행되고,
메모리+스왑파일 30% 이하면 이번에는 자동으로 스왑파일이 제거되는 방법은 있을까요?

고수님들의 무한 답변 부탁드립니다.

추가적으로 스왑파일과 스왑파티션의 속도 차이는 제가 찾아 보기로는 스왑파티션쪽이 빠른 것처럼 보이는데,
맞는지 확인도 부탁드립니다.[/quote:jee4ytjg]

  1. 스왑 파일 또는 파티션을 이해하시려면 먼저 OS의 메모리 관리 개념을 좀 짚고 넘어가셔야 합니다.
    OS의 메모리 관리는 크게 4가지로 나눠지는데, Active, InActive, Weird, Free입니다.

Active는 현재 사용중인 프로그램이 차지한 부분입니다.
ex) 지금 보고 있는 웹브라우저가 차지한 공간. 실제 사용중인 [압축되지 않은] 메모리 공간입니다.

InActive는 프로그램을 켜놨지만 일정시간 이상 사용하지 않아 일종의 Sleep 상태에 들어간 프로그램이 차지한 공간입니다.
ex) 동영상 플레이어를 '멈춤’으로 하고 창을 최소화 한 채로 OS가 체크하는 타이머 이상의 시간동안 아무 동작을 하지 않게 하면 해당 프로그램이 잡고 있던 메모리를 압축해서 메모리 구석으로 밀어넣게 됩니다. 이게 InActive 메모리.

Weird는 쉽게 말하면 찌꺼기입니다.
자세히 설명하면 길어지는데, 디스크 파편화 현상처럼 메모리도 할당하고 해제하는 과정을 반복하다 보면 이러한 공간 파편화가 발생합니다. 이게 Weird 메모리입니다.

Free는… 말 그대로니 자세한 설명은 생략합니다 :)

여튼 이러한데, swap은 파일이 됐건 파티션이 됐건간에 이러한 메모리 영역이 모두 꽉 찬 상태에서 자동으로 가동하게 됩니다.
간단히 말하면 Active, InActive, Weird 어느쪽이 많이 먹던간에 Free가 0인 상태를 말합니다.
실제로 메모리 사용량은 계속 요동치기 때문에 0이어도 0이 아니긴 합니다만 여튼 그런 상황에서 InActive 메모리 중에서 시간이 오래되서 요건 안 쓰겠다 싶은걸 swap으로 던져 넣어서 Free 용량을 확보한다거나
Weird를 없애기 위해서 swap을 이용해 조각모음(…)을 하는 등의 용도로 사용되지요.

  1. 스왑 On / Off는 간단하게
    sudo swapon -a
    sudo swapoff -a

  2. 스왑파일이 존재한다고 해도 사용량은 그렇게 많지 않습니다.
    그리고 동시 접속자 1천명 이상인 서버 용도가 아닌 다음에야 스왑 공간은 그리 크게 필요하지도 않고요.
    요즘 하드웨어 스펙이 워낙 좋아서 말이죠.

간단하게 아래 공식으로 스왑 공간을 만들어 두면 그게 파일이 됐건 파티션이 됐건 별 상관 없습니다.
그리고 자동으로 그걸 감지해서 스왑 붙이고 빼고… 하는게 제 생각엔 자원 낭비가 더 심하겠네요.

M = RAM용량
S = 스왑용량

If M < 2 (물리 메모리가 2gb 미만)
S = M *2 (스왑은 메모리의 2배 이상)
Else (물리 메모리가 2gb를 훨씬 넘어가면)
S = M + 2 (스왑은 메모리에 +2gb 정도)

뱀발을 붙이자면 스왑 파티션이나 파일이나 안정성 면에서는 차이가 없습니다.
다만 파티션을 권장하는 이유는 이게 파일로 존재하게 되면 용량이 수시로 변하면서 일종의 디스크 파편화 효과를 내게 되기 때문입니다. (구형 윈도같이 지옥이 펼쳐지진 않아요. 저상태로 적어도 4년은 써야 체감이 됩니다)

하지만 파티션이라고 꼭 좋은건 아닌게, 파편화 효과는 안 나겠지만 반대로 파일처럼 수시로 용량을 조절한다거나 임의로 여러개를 만들어 붙인다거나 하는 유연성이 절대적으로 부족합니다.

그래서 돈 많은 사람들은 디스크를 사서 -> 빈 ext 파티션으로 통으로 포맷해서 마운트 한 후 -> 해당 디스크에는 스왑 파일만 들어가더라…

같은걸 하시죠 (…)

결국 요는 이겁니다.
대형 서버 관리자 아니시면 신경 안쓰셔도 됩니다.

메모리 32메가 짜리 486 기계의
FreeBSD 시스템에서…
메모리/스와핑 하는걸 모니터링하는걸
기억합니다…

그런 기억에
설명내용을 읽어내려가니
머리속에 더 잘 박히네요^^

소중한 부연설명 감사합니다!!

[quote="yemharc":1ur1ysf1][quote="mimiqq11":1ur1ysf1]언제나 초보사용자입니다.

이번에 스왑파일을 사용하면서 이런기능도 있구나 하고 생각하다 한가지 알고 싶어서 질문합니다.
현재 스왑파일을 일정부분 할당해 두고 실제 사용은 수동(터미널에서 명령 실행)으로 필요할때 마다 실행하는 것으로 했습니다.

질문1)
그래서 하다보니 한가지 생각이 드는 것인데,
예를들어 메모리가 90% 이상 사용하게 되면 자동적으로 스왑파일이 사용할 수 있게 실행되게 하는 방법은 없나요?

질문2)
스왑파일이 실행된 후 수동(터미널에서 명령 실행)으로 다시 설정 제거 하는 방법은 무엇인가요?

질문3)
그럼 위의 질문을 종합하여 메모리 90%이상이면 스왑파일 자동 실행되고,
메모리+스왑파일 30% 이하면 이번에는 자동으로 스왑파일이 제거되는 방법은 있을까요?

고수님들의 무한 답변 부탁드립니다.

추가적으로 스왑파일과 스왑파티션의 속도 차이는 제가 찾아 보기로는 스왑파티션쪽이 빠른 것처럼 보이는데,
맞는지 확인도 부탁드립니다.[/quote:1ur1ysf1]

  1. 스왑 파일 또는 파티션을 이해하시려면 먼저 OS의 메모리 관리 개념을 좀 짚고 넘어가셔야 합니다.
    OS의 메모리 관리는 크게 4가지로 나눠지는데, Active, InActive, Weird, Free입니다.

Active는 현재 사용중인 프로그램이 차지한 부분입니다.
ex) 지금 보고 있는 웹브라우저가 차지한 공간. 실제 사용중인 [압축되지 않은] 메모리 공간입니다.

InActive는 프로그램을 켜놨지만 일정시간 이상 사용하지 않아 일종의 Sleep 상태에 들어간 프로그램이 차지한 공간입니다.
ex) 동영상 플레이어를 '멈춤’으로 하고 창을 최소화 한 채로 OS가 체크하는 타이머 이상의 시간동안 아무 동작을 하지 않게 하면 해당 프로그램이 잡고 있던 메모리를 압축해서 메모리 구석으로 밀어넣게 됩니다. 이게 InActive 메모리.

Weird는 쉽게 말하면 찌꺼기입니다.
자세히 설명하면 길어지는데, 디스크 파편화 현상처럼 메모리도 할당하고 해제하는 과정을 반복하다 보면 이러한 공간 파편화가 발생합니다. 이게 Weird 메모리입니다.

Free는… 말 그대로니 자세한 설명은 생략합니다 :)

여튼 이러한데, swap은 파일이 됐건 파티션이 됐건간에 이러한 메모리 영역이 모두 꽉 찬 상태에서 자동으로 가동하게 됩니다.
간단히 말하면 Active, InActive, Weird 어느쪽이 많이 먹던간에 Free가 0인 상태를 말합니다.
실제로 메모리 사용량은 계속 요동치기 때문에 0이어도 0이 아니긴 합니다만 여튼 그런 상황에서 InActive 메모리 중에서 시간이 오래되서 요건 안 쓰겠다 싶은걸 swap으로 던져 넣어서 Free 용량을 확보한다거나
Weird를 없애기 위해서 swap을 이용해 조각모음(…)을 하는 등의 용도로 사용되지요.

  1. 스왑 On / Off는 간단하게
    sudo swapon -a
    sudo swapoff -a

  2. 스왑파일이 존재한다고 해도 사용량은 그렇게 많지 않습니다.
    그리고 동시 접속자 1천명 이상인 서버 용도가 아닌 다음에야 스왑 공간은 그리 크게 필요하지도 않고요.
    요즘 하드웨어 스펙이 워낙 좋아서 말이죠.

간단하게 아래 공식으로 스왑 공간을 만들어 두면 그게 파일이 됐건 파티션이 됐건 별 상관 없습니다.
그리고 자동으로 그걸 감지해서 스왑 붙이고 빼고… 하는게 제 생각엔 자원 낭비가 더 심하겠네요.

M = RAM용량
S = 스왑용량

If M < 2 (물리 메모리가 2gb 미만)
S = M *2 (스왑은 메모리의 2배 이상)
Else (물리 메모리가 2gb를 훨씬 넘어가면)
S = M + 2 (스왑은 메모리에 +2gb 정도)

뱀발을 붙이자면 스왑 파티션이나 파일이나 안정성 면에서는 차이가 없습니다.
다만 파티션을 권장하는 이유는 이게 파일로 존재하게 되면 용량이 수시로 변하면서 일종의 디스크 파편화 효과를 내게 되기 때문입니다. (구형 윈도같이 지옥이 펼쳐지진 않아요. 저상태로 적어도 4년은 써야 체감이 됩니다)

하지만 파티션이라고 꼭 좋은건 아닌게, 파편화 효과는 안 나겠지만 반대로 파일처럼 수시로 용량을 조절한다거나 임의로 여러개를 만들어 붙인다거나 하는 유연성이 절대적으로 부족합니다.

그래서 돈 많은 사람들은 디스크를 사서 -> 빈 ext 파티션으로 통으로 포맷해서 마운트 한 후 -> 해당 디스크에는 스왑 파일만 들어가더라…

같은걸 하시죠 (…)

결국 요는 이겁니다.
대형 서버 관리자 아니시면 신경 안쓰셔도 됩니다.[/quote:1ur1ysf1]

언제나 초보사용자입니다.

소중한 답변 고맙습니다.
적어주신 내용의 상당부분을 이해하기어렵기도한 전문적인 것인것 같은데, 조금씩 의미를 파악하기 시작했습니다.
제가 메모리가 많이 필요한 이유는 인메모리방식인 프로그램이 있는데, 이 프로그램에서 대용량의 자료에 대한 작업이 이루어지기 때문입니다.
그래서 메모리에 대한 관리가 필요해서 이런 저런 질문을 드리게 되었습니다.

추가적으로 스왑메모리 on off를 간단하게 설명해 주셨는데, 초기에 메모리 부족으로 스왑을 활용하다
스왑메모리의 공간을 일정부분 이용하게 되었을 때 스왑을 off하게 되면 프로그램의 문제는 없는 건가요?
즉, 메모리와 스왑을 각각 일정부분 사용하고 있을때 스왑을 off하게 되면 문제가 발생할거 같기도 한데…
스왑의 이용이 완전히 0이 되게 하고 메모리만 이용하게 되는 순간 스왑을 off해야 할 듯해서
스왑이 완전히 0이 되게 만드는 명령어나 절차가 있는지 궁금해서 질문 드립니다.

고수님의 무한답변 기다리겠습니다.

[quote="mimiqq11":3c7e9u48]
언제나 초보사용자입니다.

소중한 답변 고맙습니다.
적어주신 내용의 상당부분을 이해하기어렵기도한 전문적인 것인것 같은데, 조금씩 의미를 파악하기 시작했습니다.
제가 메모리가 많이 필요한 이유는 인메모리방식인 프로그램이 있는데, 이 프로그램에서 대용량의 자료에 대한 작업이 이루어지기 때문입니다.
그래서 메모리에 대한 관리가 필요해서 이런 저런 질문을 드리게 되었습니다.

추가적으로 스왑메모리 on off를 간단하게 설명해 주셨는데, 초기에 메모리 부족으로 스왑을 활용하다
스왑메모리의 공간을 일정부분 이용하게 되었을 때 스왑을 off하게 되면 프로그램의 문제는 없는 건가요?
즉, 메모리와 스왑을 각각 일정부분 사용하고 있을때 스왑을 off하게 되면 문제가 발생할거 같기도 한데…
스왑의 이용이 완전히 0이 되게 하고 메모리만 이용하게 되는 순간 스왑을 off해야 할 듯해서
스왑이 완전히 0이 되게 만드는 명령어나 절차가 있는지 궁금해서 질문 드립니다.

고수님의 무한답변 기다리겠습니다.[/quote:3c7e9u48]

swap에 대한 개념을 잘 잡으셔야 합니다.

!! swap은 메모리가 아닙니다. !!

무슨 말인가 하면, 메모리가 꽉 차서 스왑까지 메모리로 사용하는게 아니라
메모리를 사용하다 공간이 꽉 차면 당장 사용하지 않는 Inactive 또는 Weird 메모리 데이터를 스왑 파일/파티션에 '기록’하고 메모리에서는 날려버리는 겁니다.
그리고 메모리에는 스왑에 기록한 데이터에 대해서 다시 불러올 때를 위해 아주 작은 지도만 만들어서 가지고 있는거죠.

그러다가 스왑에 기록된 데이터가 필요해 지는 상황이 오면 가지고 있던 지도를 바탕으로 스왑으로부터 메모리로 데이터를 다시 읽어오는 겁니다.
즉, 메모리 8GB + 스왑 8GB 라고 해서 16GB 메모리를 가지게 되는게 아닌겁니다.

이걸 간단하게 예를 들자면 이런겁니다.

야채가 여러종류 들어가는 샐러드를 만들려고 합니다. (프로그램 동작)
먼저 도마를 놓고 썰기 시작했습니다. 감자 사과 파슬리 등등 종류가 많네요. (데이터)
다듬은 재료를 그릇에 넣다 보니 그릇이 꽉 찼습니다. (물리 메모리 Full)
좀 흔들어 주면 재료간에 빈 공간이 붙어서(메모리 정리) 그릇 하나로 될 거 같긴 한데 그냥 그릇을 하나 더 꺼내서 잠깐 담는게 더 빠를거 같아요 (스왑공간 사용)
하지만 샐러드니까 마지막에 섞을땐 그릇 하나에 넣고 소스랑 같이 섞어줘야겠죠

써놓고 보니 이상하네요.
어쨌든, 스왑은 실제 메모리처럼 이용되는 공간은 아니고, 더불어 대용량 데이터를 다루는데 메모리 자체가 부족한 경우에는 결국 물리적인 메모리를 늘리는것 이외에는 답이 없습니다.
애초에 한번에 대용량 데이터를 다룬다는건 그 데이터가 전부 Active memory 상태에 올라간다는 말이고, 그렇다는건 스왑이 있건 없건 메모리는 부족하다는 소리죠.
=> 물론 실제로 메모리를 전부 다 먹고 시스템 전체가 다운되는 일은 어지간하면 없습니다. 커널이 용서치 않아요!

마지막으로 스왑을 사용중에 스왑 off를 정상적인 커맨드를 통해 한다면 스왑에 있는 데이터를 모두 메모리로 옮긴 뒤에 off됩니다.
파일의 경우 예~전에는 강제로 날려버린 뒤 장절한 system crash를 겪을 수 있긴 했는데, 아마 요즘은 코드 레벨에서 막혀 있는걸로 알고 있습니다.
파티션도 마운트 해제로 같은 경험(…)을 할 수 있습니다. 요건 막혀있는지 모르겠네요.

[quote="yemharc":dcbs665m]
swap에 대한 개념을 잘 잡으셔야 합니다.

!! swap은 메모리가 아닙니다. !!

무슨 말인가 하면, 메모리가 꽉 차서 스왑까지 메모리로 사용하는게 아니라
메모리를 사용하다 공간이 꽉 차면 당장 사용하지 않는 Inactive 또는 Weird 메모리 데이터를 스왑 파일/파티션에 '기록’하고 메모리에서는 날려버리는 겁니다.
그리고 메모리에는 스왑에 기록한 데이터에 대해서 다시 불러올 때를 위해 아주 작은 지도만 만들어서 가지고 있는거죠.

그러다가 스왑에 기록된 데이터가 필요해 지는 상황이 오면 가지고 있던 지도를 바탕으로 스왑으로부터 메모리로 데이터를 다시 읽어오는 겁니다.
즉, 메모리 8GB + 스왑 8GB 라고 해서 16GB 메모리를 가지게 되는게 아닌겁니다.

이걸 간단하게 예를 들자면 이런겁니다.

야채가 여러종류 들어가는 샐러드를 만들려고 합니다. (프로그램 동작)
먼저 도마를 놓고 썰기 시작했습니다. 감자 사과 파슬리 등등 종류가 많네요. (데이터)
다듬은 재료를 그릇에 넣다 보니 그릇이 꽉 찼습니다. (물리 메모리 Full)
좀 흔들어 주면 재료간에 빈 공간이 붙어서(메모리 정리) 그릇 하나로 될 거 같긴 한데 그냥 그릇을 하나 더 꺼내서 잠깐 담는게 더 빠를거 같아요 (스왑공간 사용)
하지만 샐러드니까 마지막에 섞을땐 그릇 하나에 넣고 소스랑 같이 섞어줘야겠죠

써놓고 보니 이상하네요.
어쨌든, 스왑은 실제 메모리처럼 이용되는 공간은 아니고, 더불어 대용량 데이터를 다루는데 메모리 자체가 부족한 경우에는 결국 물리적인 메모리를 늘리는것 이외에는 답이 없습니다.
애초에 한번에 대용량 데이터를 다룬다는건 그 데이터가 전부 Active memory 상태에 올라간다는 말이고, 그렇다는건 스왑이 있건 없건 메모리는 부족하다는 소리죠.
=> 물론 실제로 메모리를 전부 다 먹고 시스템 전체가 다운되는 일은 어지간하면 없습니다. 커널이 용서치 않아요!

마지막으로 스왑을 사용중에 스왑 off를 정상적인 커맨드를 통해 한다면 스왑에 있는 데이터를 모두 메모리로 옮긴 뒤에 off됩니다.
파일의 경우 예~전에는 강제로 날려버린 뒤 장절한 system crash를 겪을 수 있긴 했는데, 아마 요즘은 코드 레벨에서 막혀 있는걸로 알고 있습니다.
파티션도 마운트 해제로 같은 경험(…)을 할 수 있습니다. 요건 막혀있는지 모르겠네요.[/quote:dcbs665m]

언제나 초보사용자입니다.

고맙습니다.!! 많은 부분 이해가 되는 군요!! swap에 대해서도 어느 정도 이해를 할 수 있는 기회였습니다.!!
이전에 스왑파일이 파편화가 있을 수 있다고 했는데, 이부분이 제가 이해한 수준에서 맞는지 조금 모호해서 여쭤봅니다.
즉, 만약 제 시스템에 물리 메모리 + 스왑파일을 설정하는데, 스왑파일은 설정(파일 영역을 잡아 주는 것)은 해두고,
필요한 경우에서 임시적으로 실행을 시켜 작동하게 한다면 앞에서 설명한 파편화가 발생하게 되는 건가요?
제 생각에는 스왑파일을 계속해서 셋팅해두고 설명처럼 필요한 경우 실행하는 식으로 하면
스왑파티션과 비슷한 효과를 갖게되고 파편화가 없을 듯 한데, 맞는지 알고 싶습니다.

추가적으로 물리 메모리 + 스왑 파티션 + 스왑파일의 형태로 운영을 할때 유의해야 할 사항은 없는지요?
여기서 스왑파일은 미리 공간은 할당해 두고 필요시에만 swap on하여 사용하는 것으로 하는 것이겠지요!!

고수님의 무한답변 계속 부탁드립니다.

[quote="mimiqq11":28yjeem8]
언제나 초보사용자입니다.

고맙습니다.!! 많은 부분 이해가 되는 군요!! swap에 대해서도 어느 정도 이해를 할 수 있는 기회였습니다.!!
이전에 스왑파일이 파편화가 있을 수 있다고 했는데, 이부분이 제가 이해한 수준에서 맞는지 조금 모호해서 여쭤봅니다.
즉, 만약 제 시스템에 물리 메모리 + 스왑파일을 설정하는데, 스왑파일은 설정(파일 영역을 잡아 주는 것)은 해두고,
필요한 경우에서 임시적으로 실행을 시켜 작동하게 한다면 앞에서 설명한 파편화가 발생하게 되는 건가요?
제 생각에는 스왑파일을 계속해서 셋팅해두고 설명처럼 필요한 경우 실행하는 식으로 하면
스왑파티션과 비슷한 효과를 갖게되고 파편화가 없을 듯 한데, 맞는지 알고 싶습니다.

추가적으로 물리 메모리 + 스왑 파티션 + 스왑파일의 형태로 운영을 할때 유의해야 할 사항은 없는지요?
여기서 스왑파일은 미리 공간은 할당해 두고 필요시에만 swap on하여 사용하는 것으로 하는 것이겠지요!!

고수님의 무한답변 계속 부탁드립니다.[/quote:28yjeem8]

음… 파편화라는건 이런겁니다.

[1][2][3]…[10]

까지 10칸의 공간이 있는데 3짜리 크기의 파일을 디스크에 기록합니다.

그럼 [1][2][3]에 데이터가 써지고 4부터 10까지는 빈칸이 되겠죠.

이 상태에서 다시 4짜리 파일을 추가하면 1부터 7까지는 데이터가 기록되고 8부터 10까지 3칸이 남습니다.

다음으로 처음 기록한 3짜리 파일을 삭제하면 1부터 3, 그리고 8부터 10까지의 공간은 비어있고 4부터 7까지는 데이터가 기록되어 있겠죠.

이 상태에서 다시 4짜리 파일을 기록하면 1, 2, 3에 파일을 쓰고 4부터 7까지는 다른 파일이 있으니 나머지 한칸은 8에 기록되어 하나의 파일임에도 디스크에서는

1, 2, 3, 8에 나뉘어서 기록되게 됩니다.

이건 간단하게 10칸을 두고 말한거지만 이게 용량이 커지고 종류가 다양해질 수록 이렇게 "한번에 기록할 공간이 없어서 나눠서 기록하는" 일이 점점 많아지고, 분할되는 크기도 점점 작고 많아지게 되죠.

이렇게 말 그대로 조각조각 나뉘어서 기록되게 되는데 디스크 파편화 입니다.

다만 리눅스의 ext 파일 시스템은 실제 데이터 기록부와 별개로 해당 파일의 블록들이 어디어디에 기록되는지에 대한 맵 데이터를 기록하는 영역을 따로 관리하기 때문에
디스크 파편화 대비 성능 저하는 거의 없는 편입니다.

스왑 파일의 경우 매 부팅시마다 초기화 되고 설정된 용량만큼 한번에 기록되기 때문에 그 자체는 파편화가 생기지 않지만 (매 부팅마다 청소하니까요)
디스크에 스왑 공간만큼의 데이터를 항상 새로 기록하게 되기 때문에 다른 파일의 입출력에 영향을 주게 되는 겁니다.

부팅할때 swap 용량 = 0
부팅 후 swap 용량 = 설정한 용량만큼 (ex 16gb)
종교시 swap 용량 = 데이터를 모두 정리하고 언마운트 (용량 0)

정리하면 스왑파일 자체는 파편화가 없습니다. 일어나더라도 매 부팅마다 데이터가 싹 사라지고 새로 기록을 시작하기 때문에 문제도 없고요.
스왑으로 인한 파편화는 스왑 공간으로 인해 다른 데이터 입출력 시에 영향이 있다는 말입니다.
다만 이건 위에서도 말했지만 정말 몇년을 서버 풀가동 수준으로 입출력이 있지 않으면 사실 체감 못합니다.
리눅스 파티션의 파일관리 구조도 디스크 파편화에서 상당히 자유롭기도 하고요.

사실상 신경 안쓰셔도 됩니다.
이런거까지 일일이 신경쓰시면 컴퓨터 사용 못해요 (웃음)

그리고 스왑 파티션과 스왑파일 동시 운영은 아무 문제 없습니다.
스왑파일만 여러개를 운영해도 상관없고요.

다만 그렇게까지 필요한가 싶긴 합니다.
실제 스왑파일/파티션의 사용량을 일일이 체크해 보면 그다지 많지 않아요.

요즘의 컴퓨팅 환경에서 스왑공간을 가장 많이 쓰는 때는 컴퓨터가 sleep 모드로 들어갈 때 정도입니다. (hibernate or suspend)

[quote="yemharc":2n2f4z1x]
음… 파편화라는건 이런겁니다.

[1][2][3]…[10]

까지 10칸의 공간이 있는데 3짜리 크기의 파일을 디스크에 기록합니다.

그럼 [1][2][3]에 데이터가 써지고 4부터 10까지는 빈칸이 되겠죠.

이 상태에서 다시 4짜리 파일을 추가하면 1부터 7까지는 데이터가 기록되고 8부터 10까지 3칸이 남습니다.

다음으로 처음 기록한 3짜리 파일을 삭제하면 1부터 3, 그리고 8부터 10까지의 공간은 비어있고 4부터 7까지는 데이터가 기록되어 있겠죠.

이 상태에서 다시 4짜리 파일을 기록하면 1, 2, 3에 파일을 쓰고 4부터 7까지는 다른 파일이 있으니 나머지 한칸은 8에 기록되어 하나의 파일임에도 디스크에서는

1, 2, 3, 8에 나뉘어서 기록되게 됩니다.

이건 간단하게 10칸을 두고 말한거지만 이게 용량이 커지고 종류가 다양해질 수록 이렇게 "한번에 기록할 공간이 없어서 나눠서 기록하는" 일이 점점 많아지고, 분할되는 크기도 점점 작고 많아지게 되죠.

이렇게 말 그대로 조각조각 나뉘어서 기록되게 되는데 디스크 파편화 입니다.

다만 리눅스의 ext 파일 시스템은 실제 데이터 기록부와 별개로 해당 파일의 블록들이 어디어디에 기록되는지에 대한 맵 데이터를 기록하는 영역을 따로 관리하기 때문에
디스크 파편화 대비 성능 저하는 거의 없는 편입니다.

스왑 파일의 경우 매 부팅시마다 초기화 되고 설정된 용량만큼 한번에 기록되기 때문에 그 자체는 파편화가 생기지 않지만 (매 부팅마다 청소하니까요)
디스크에 스왑 공간만큼의 데이터를 항상 새로 기록하게 되기 때문에 다른 파일의 입출력에 영향을 주게 되는 겁니다.

부팅할때 swap 용량 = 0
부팅 후 swap 용량 = 설정한 용량만큼 (ex 16gb)
종교시 swap 용량 = 데이터를 모두 정리하고 언마운트 (용량 0)

정리하면 스왑파일 자체는 파편화가 없습니다. 일어나더라도 매 부팅마다 데이터가 싹 사라지고 새로 기록을 시작하기 때문에 문제도 없고요.
스왑으로 인한 파편화는 스왑 공간으로 인해 다른 데이터 입출력 시에 영향이 있다는 말입니다.
다만 이건 위에서도 말했지만 정말 몇년을 서버 풀가동 수준으로 입출력이 있지 않으면 사실 체감 못합니다.
리눅스 파티션의 파일관리 구조도 디스크 파편화에서 상당히 자유롭기도 하고요.

사실상 신경 안쓰셔도 됩니다.
이런거까지 일일이 신경쓰시면 컴퓨터 사용 못해요 (웃음)

그리고 스왑 파티션과 스왑파일 동시 운영은 아무 문제 없습니다.
스왑파일만 여러개를 운영해도 상관없고요.

다만 그렇게까지 필요한가 싶긴 합니다.
실제 스왑파일/파티션의 사용량을 일일이 체크해 보면 그다지 많지 않아요.

요즘의 컴퓨팅 환경에서 스왑공간을 가장 많이 쓰는 때는 컴퓨터가 sleep 모드로 들어갈 때 정도입니다. (hibernate or suspend)[/quote:2n2f4z1x]

언제나 초보사용자입니다.
명쾌하고 자세한 설명 고맙습니다. 많은 도움이 된거 같습니다.
많은 부분에서 어떻게 셋팅할지 고민이 해결된듯 합니다.
물론 실제로 하다보면 또 이런저런 상황이 생기겠죠. 그때 또 도움을 주시면 고맙겠습니다.
저의 경우는 물리 8G + 스왑파티션 8G로 메모리 부족이 발생하여
추가로 스왑파일 2G가를 활용해서 분석을하기도 하고 있습니다.

이런 상황이다보니 스왑을 어떻게 이용하면 효율적인지 알고 싶어서 이런저런 질문을 계속하게 되었던거 같습니다.

앞으로도 고수님들의 무한답변 기다리겠습니다.^^
고맙습니다.

언제나 초보사용자입니다.

물리메모리 8G + 스왑파티션 8G를 잡아서 우분투를 설치 했을때
처음 시작할땐 스왑파티션이 활성화되지 않게 하고
필요시에 on 하게는 어떻게 설정하여야 하나요?

고수님들의 무한답변 부탁드립니다.

[quote="mimiqq11":3jvlh3hr]언제나 초보사용자입니다.

물리메모리 8G + 스왑파티션 8G를 잡아서 우분투를 설치 했을때
처음 시작할땐 스왑파티션이 활성화되지 않게 하고
필요시에 on 하게는 어떻게 설정하여야 하나요?

고수님들의 무한답변 부탁드립니다.[/quote:3jvlh3hr]

스왑 사용에 대해 시스템이 자동으로 사용/비사용을 하도록 하는 방법이 있습니다.
기본적으로

cat /proc/sys/vm/swappiness

를 입력하면 수치가 나옵니다. 아마 기본설정은 60으로 되어 있을텐데요.
이 수치가 의미하는건 물리 메모리의 xx% 이상을 사용하게 되면 swap도 병행하여 사용하라는 의미입니다.
그런데 이게 좀 애매한게 기본적으로 물리 디스크는 램에 비해 매우 느립니다.
그걸 전제로 스왑을 자주 사용하게 설정하면 디스크와 램 간의 속도차이에 의한 병목현상으로 되려 시스템이 더 느려질 가능성이 높습니다.

때문에 이걸 임의로 설정하면 특정 환경(저사양 혹은 너무 고사양)에서 의외의 성능향상을 얻을 수 있습니다.

일단 물리 메모리가 8gb라고 하셨으니 저대로 놓고 사용하셔도 무방하긴 합니다만, 임의로 수정하시겠다면 90으로 사용하시면 될거 같습니다.

[code:3jvlh3hr]
sudo sysctl vm.swappiness=10
[/code:3jvlh3hr]

이 설정법은 다음과 같습니다.

(전체 메모리 / 100) * 10 = 잔여 물리 메모리 용량

ex)
(8gb / 100) * 10 = (8192 / 100) * 10 = 810

즉, 물리 메모리가 전부 사용중이고 잔여 free 용량이 810MB 이하로 떨어지면 swap을 가동하게 하는 것입니다.

해당 설정을 적용하신 후에 리부팅을 해야 합니다.

언제나 초보사용자입니다.

스왑파일을 만들기 위해서 아래와 같이 하고…

[code:2a8rpmpa]sudo dd if=/dev/zero of=/home/swap.fs bs=4M count=1024
sudo mkswap /home/swap.fs[/code:2a8rpmpa]

필요할 때 마다 실행 시키기 위해서 아래와 같이 합니다.

[code:2a8rpmpa]sudo swapon /home/swap.fs[/code:2a8rpmpa]

그런데 만약 swap.fs 또는 특정 파일을 스왑 파일로 만들어 놓은 것은 관리자가 모르고 있다면
어딘가에 스왑파일이 있는 것을 찾아 보는 것이 있을거 같습니다.

즉 /etc/fstab에 보면 시스템 정보가 있듯이 스왑파일에 대한 정보도 어딘가에 있을거 같은데, 알고 싶습니다.

고수님들의 무한답변 부탁드립니다.

[quote="mimiqq11":16w34yxu]언제나 초보사용자입니다.

스왑파일을 만들기 위해서 아래와 같이 하고…

[code:16w34yxu]sudo dd if=/dev/zero of=/home/swap.fs bs=4M count=1024
sudo mkswap /home/swap.fs[/code:16w34yxu]

필요할 때 마다 실행 시키기 위해서 아래와 같이 합니다.

[code:16w34yxu]sudo swapon /home/swap.fs[/code:16w34yxu]

그런데 만약 swap.fs 또는 특정 파일을 스왑 파일로 만들어 놓은 것은 관리자가 모르고 있다면
어딘가에 스왑파일이 있는 것을 찾아 보는 것이 있을거 같습니다.

즉 /etc/fstab에 보면 시스템 정보가 있듯이 스왑파일에 대한 정보도 어딘가에 있을거 같은데, 알고 싶습니다.

고수님들의 무한답변 부탁드립니다.[/quote:16w34yxu]

스왑파일은 파티션과 다르게 자동 마운트가 되지 않고, 따로 설정파일도 존재하지 않습니다.
다만, 스왑 파티션과 마찬가지로 /etc/fstab에 등록하면 자동으로 마운트 됩니다.

ex) swf 란 이름을 가진 스왑파일이 /home/swap 에 존재한다면 /etc/fstab 파일에 아래처럼 등록한다.
/home/swap/swf none swap sw 0 0

[quote="yemharc":3mva2hcd]
스왑파일은 파티션과 다르게 자동 마운트가 되지 않고, 따로 설정파일도 존재하지 않습니다.
다만, 스왑 파티션과 마찬가지로 /etc/fstab에 등록하면 자동으로 마운트 됩니다.

ex) swf 란 이름을 가진 스왑파일이 /home/swap 에 존재한다면 /etc/fstab 파일에 아래처럼 등록한다.
/home/swap/swf none swap sw 0 0[/quote:3mva2hcd]

언제나 초보사용자입니다.

답변 고맙습니다.
그렇다면 내가 여러개의 swap file을 만들어 두었는데, 각각의 file name을 모르고 있다면
사용할 수 없다는 뜻인가요?
물론 위에서 말씀하신대로 처음부터 /etc/fstab에 등록해 두면 알겠지만,
수동으로 마운트 시킨다고 한다면 결국 내가 각각의 file name을 알아야 한다는 뜻인것이 맞겠지요?

고수님들의 무한답변 부탁드립니다.

[quote="mimiqq11":kmli76ad][quote="yemharc":kmli76ad]
스왑파일은 파티션과 다르게 자동 마운트가 되지 않고, 따로 설정파일도 존재하지 않습니다.
다만, 스왑 파티션과 마찬가지로 /etc/fstab에 등록하면 자동으로 마운트 됩니다.

ex) swf 란 이름을 가진 스왑파일이 /home/swap 에 존재한다면 /etc/fstab 파일에 아래처럼 등록한다.
/home/swap/swf none swap sw 0 0[/quote:kmli76ad]

언제나 초보사용자입니다.

답변 고맙습니다.
그렇다면 내가 여러개의 swap file을 만들어 두었는데, 각각의 file name을 모르고 있다면
사용할 수 없다는 뜻인가요?
물론 위에서 말씀하신대로 처음부터 /etc/fstab에 등록해 두면 알겠지만,
수동으로 마운트 시킨다고 한다면 결국 내가 각각의 file name을 알아야 한다는 뜻인것이 맞겠지요?

고수님들의 무한답변 부탁드립니다.[/quote:kmli76ad]

스왑파일을 찾는데에 따로 특정 방법이 있진 않고, 명령어 조합을 이용해서 찾을수는 있습니다.

일단 file 이라는 명령어가 있는데, 이건 해당 파일의 타입을 알려주는 명령어입니다.

[code:kmli76ad]
yemharc@ubuntu:~$ file test.c
test.c: ASCII text
yemharc@ubuntu:~$


yemharc@ubuntu:~$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xfc25294d8a6bf059dd3359a366db9262d1e983b7, not stripped
yemharc@ubuntu:~$


yemharc@ubuntu:~$ file swf
swf: Linux/i386 swap file (new style), version 1 (4K pages), size 65535 pages, no label, UUID=f9b013bf-ca52-42e6-bf8f-0ad49f3c9adf
yemharc@ubuntu:~$
[/code:kmli76ad]

이런 식으로 file 명령을 이용하면 해당 파일의 타입을 포함은 각종 정보를 얻을 수 있습니다.
그리고 예문의 제일 아래를 보면 swap file 또한 file 명령을 이용해 구분할 수 있는걸 확인 가능합니다.

그럼 이걸 응용하면 아래처럼 각종 파일/폴더가 있는 상태에서 find와 조합하여 추려내는게 가능해집니다.

[code:kmli76ad]
EX)

yemharc@ubuntu:~$ pwd
/home/yemharc
yemharc@ubuntu:~$ ls -al
total 262196
drwxr-xr-x 3 yemharc yemharc 4096 May 31 21:10 .
drwxr-xr-x 3 root root 4096 May 31 20:54 ..
-rw-r–r-- 1 yemharc yemharc 220 May 31 20:54 .bash_logout
-rw-r–r-- 1 yemharc yemharc 3486 May 31 20:54 .bashrc
drwx------ 2 yemharc yemharc 4096 May 31 20:54 .cache
-rw------- 1 yemharc yemharc 41 May 31 20:56 .lesshst
-rw-r–r-- 1 yemharc yemharc 675 May 31 20:54 .profile
-rw-r–r-- 1 root root 268435456 May 31 20:55 swf
-rwxrwxr-x 1 yemharc yemharc 8326 May 31 21:10 test
-rw-rw-r-- 1 yemharc yemharc 44 May 31 21:10 test.c
-rw------- 1 yemharc yemharc 657 May 31 21:10 .viminfo
yemharc@ubuntu:~$


yemharc@ubuntu:~$ find . * -exec file {} ; |grep ‘swap file’
./swf: Linux/i386 swap file (new style), version 1 (4K pages), size 65535 pages, no label, UUID=f9b013bf-ca52-42e6-bf8f-0ad49f3c9adf
./.cache/swf2: Linux/i386 swap file (new style), version 1 (4K pages), size 65535 pages, no label, UUID=f9b013bf-ca52-42e6-bf8f-0ad49f3c9adf
swf: Linux/i386 swap file (new style), version 1 (4K pages), size 65535 pages, no label, UUID=f9b013bf-ca52-42e6-bf8f-0ad49f3c9adf
yemharc@ubuntu:~$
[/code:kmli76ad]

검색결과 현재 폴더의 swf 파일(./swf)과 .cache 폴더 아래의 swf2 파일(./.cache/swf2)이 swap file이라고 나오네요.

이 외엔 딱히 다른 방법이 있는지 모르겠군요.

미미큐님,

쉽게 디렉토리(폴더)
를 활용하시죠~

"/(루트;가장 최상위 위치라는 의미)"
하위에 임의의 폴더(디렉토리)를 하나 만듭니다.
그 폴더 안에서만 스왑파일들을 만듭니다.

그럼 기억하기 쉽습니다^^

"내가 어디다 스왑파일을 만들어두었지?
어우 헤깔려 미치겠어!!!"

와 같은 걱정을
안하셔도 될겁니다…;

//
그리고
yemharc님께서
조언해주신
find 를 활용한 팁은
훗날 다른 관리자가
운용하던 시스템을
미미큐님이
인계받았을때 유용하게
써먹을수 있어요~