당신은 발생하는 리눅스 내 램 먹었다 문제.
당황하지 마십시오.
이것은 문제가되지 않습니다.
시스템이 설계된대로 작동합니다.
문제는 운영 체제가 아닙니다. 문제는 "사용 가능한"메모리가 무엇인지 이해하는 것입니다.
유닉스 시스템은 단순히 프로그램을 실행하는 것 이상으로 메모리를 사용합니다. 메모리는 다음 용도로 사용될 수 있습니다.
- 프로그램 실행 (활성 / 사용)
- 전송중인 버퍼링 데이터 (버퍼)
- 최근 디스크에서 읽거나 디스크에 쓴 데이터 캐싱 (캐시)
- 물론 아무것도 (무료)
다음은 최신 Unix 시스템이 RAM 사용량을보고하는 방법에 대한 간략한 (그리고 대부분 불완전한) 둘러보기입니다.
사용 가능한 메모리 (OS 정의) 란 무엇입니까?
유닉스 시스템이 RAM을 Free 로보고 할 때는 "이 RAM을 아무 것도 사용하지 않습니다"라는 의미입니다.
Free RAM은 사실상 쓸모가 없습니다. 시스템을 더 빠르게 만들지 않고 무언가를 필요로하는 경우에 대비하여 "무료"상태로 앉아 있습니다. 위에서 언급 한 다른 세 가지 항목 중 하나 일 수 있습니다.
캐시 및 버퍼 메모리 란 무엇입니까?
캐시 및 버퍼 메모리는 운영 체제에서 시스템 속도를 높이기 위해 사용하는 RAM입니다.
이 메모리는 현재 프로그램을 실행하는 데 필요하지 않으므로 OS는 자주 사용하는 데이터를 보유하기 위해이 cache
메모리를 사용합니다. 시스템은 화면에 "Hello World"를 인쇄하는 데 필요한 지침을 찾기 위해 디스크로 이동할 필요가 없습니다.
실제로는 공유 메모리, 유선 메모리 등이 있지만 그보다 훨씬 복잡 하지만 우리의 목적을 위해이 간단한 설명이 적합합니다.
액티브 메모리 란?
활성 메모리는 "사용 된"메모리 (애플리케이션이 무엇을 하든지 사용하는 RAM), 스프레드 시트 정렬, 웹 페이지 제공, 그래픽 편집 등으로 이해됩니다.
"활성"메모리는 최근 "활성"입니다. -프로그램이 콘텐츠 (읽기 또는 쓰기)를 사용했다고 주장하며 스왑 아웃에 적합한 후보로 간주되지 않습니다.
비활성 메모리 란 무엇입니까?
활성 메모리와 마찬가지로, 비활성 메모리는 응용 프로그램이 무엇을 하든지 사용하는 RAM입니다. 차이점은이 메모리에 잠시 동안 액세스하지 않았기 때문에 푸시가 OS를 밀어 넣으면 디스크로 교체 할 수 있다고 생각하고 프로그램이 다시 요청하지 않을 것이라고 주장하는 프로그램은 약간의 운이 있습니다. 눈치 채지 못할 것이다.
"사용 된"메모리 란 무엇입니까 (HUMAN 정의)
"사용 된"메모리로 생각하는 것은 기본적으로 활성 및 비활성 메모리의 합계입니다. 모든 RAM은 현재 응용 프로그램에서 사용한다고 주장했습니다.
활성 및 비활성 메모리의 합보다 RAM을 더 많이 설치하고 (최고 512-1024MB의 안전 마진) 좋은 위치에 있다면 OS 가 스왑을 치지 않고 성능을 저하시키지 않을 것 입니다. .
"Free"메모리 (HUMAN 정의) 란 무엇입니까?
당신과 내가 "무료"메모리로 생각하는 것은 프로그램을 실행할 수있는 메모리입니다.
이것은 OS 보고서의 "무료"수치보다 약간 더 복잡합니다. 프로그램이 RAM을 요청하면 운영 체제는 다음과 같은 방식으로 해당 RAM을 최소한의 방식으로 가져 오려고 시도합니다.
- 사용 가능한 메모리가 없으면 (아무것도하지 않고) 해당 RAM이 할당됩니다.
- 사용 가능한 메모리가 없으면 OS는 캐시 및 버퍼 공간을 잠식합니다. 버퍼 풀에서 가장 최근에 / 최근에 자주 액세스하는 항목이 던져지고 해당 RAM이 프로그램에 제공됩니다.
- 버퍼링 / 캐시 RAM이없는 경우 스와 퍼는 비활성 메모리를보고 액세스 가능성이 가장 낮은 영역을 선택합니다. 해당 데이터는 스왑 (디스크) 및 프로그램에 새로 추가 된 RAM 으로 페이징됩니다 .
- 모든 비활성 RAM이 스왑 아웃 된 경우 스왑 퍼는 디스크에 활성 RAM을 배치하기 시작합니다.
(이것은 성능이 일반적으로 개에게가는 곳입니다. 프로그램이 CPU를 켤 때마다 스왑 아웃 비트를 RAM으로 다시 가져와야합니다. 즉, 다른 프로그램의 활성 메모리를 스왑해야 합니다. 스왑의 높은 회전율을 스 래싱 이라고합니다 )
- 시스템이 스왑 파티션을 채울 수있는 모든 시스템을 스왑하거나 스왑 파티션 없이 시스템 을 실행하는 경우 나쁜 일 이 발생합니다. 이 시점에서 다음 두 가지 중 하나가 발생합니다.
malloc()
실패합니다. 이것은 POSIX 호환 동작입니다. 운영 체제는 프로그램이 요청을 충족시킬 수 없다는 것을 RAM에게 요청합니다.
프로그램은 더 적은 RAM을 요구하거나 더 작은 메모리 청크로 할 수없는 경우 정리하고 종료 할 수 있습니다. (프로그램이 잘못 작성된 경우 단순히 충돌합니다.)
- Linux 박스를 사용하는 경우 OOM-Killer 는 갱 스타일 드라이브를 사용하여 다른 프로세스를 종료하여 요청을 충족시키기에 충분한 RAM을 확보하려고 시도 할 수 있습니다.
여기의 설명과 관련 질문에 대한 대답을 말할 수없는 경우 이것이 문제를 처리하는 끔찍한 방법이라고 생각합니다.
파일을 삭제할 때 여유 RAM이 증가하는 이유는 무엇입니까?
이 질문의 예에서 백업 파일을 삭제하여 RAM을 "사용 가능"할 수 있음을 알았습니다. 이에 대한 설명은 매우 간단합니다. 파일을 사용하는 파일이없고 (열린 파일 핸들 없음) OS는 아무도 해당 데이터에 다시 액세스하지 않으며 파일 시스템 캐시에서 데이터를 제거한다는 것을 알고있는 파일 시스템 (연결되지 않은)입니다.
이렇게하면 OS 보고서가 더 많은 여유 메모리가되지만 시스템 성능에는 영향을 미치지 않습니다.