리눅스 메모리 및 수동 분리 장치 및 스왑 메모리

오늘 우리는 리눅스 메모리 메커니즘에 대해 이야기.

먼저 우리는 이성의 개념에서 보면

첫째, 리눅스 메모리 메커니즘 무엇인가?

따라서 우리는, 우리가 메모리에 완료 읽고 모든 데이터를 기록 할, 그리고 신체에 이르게하므로 메모리가 제한되어, 훨씬 빨리 읽고 데이터를 기록 읽고 하드 디스크에 비해 물리적 메모리에서 직접 데이터를 기록, 알고 메모리와 가상 메모리의 개념.

실제 메모리는 메모리 크기를 제공하는 시스템 하드웨어이며, 가상 메모리의 개념이 리눅스의 물리적 메모리를 기준으로 실제 메모리입니다, 가상 메모리가 제안 충족하기 위해 실제 메모리 전략, 그것은 디스크 공간의 사용이다 가상 메모리 스왑 공간 가상화 된 논리 메모리, 디스크 공간 (스왑 공간)라고한다.

물리 메모리의 확장으로, 리눅스가 물리적 메모리에있을 것, 가상 메모리 스왑 파티션 상세한 물리적 메모리가 해제 된 이후 커널 일시적 않는 메모리 블록 정보가 공간을 바꿔 기록되므로되는 것 인, 필요 원본 콘텐츠를 사용할 때,이 메모리는, 다른 용도로 사용할 수 있으며,이 정보는 교체 공간으로부터 물리적 메모리로 다시 판독된다.

리눅스 메모리 관리 페이지에 액세스 메커니즘은 완전히 물리적 메모리의 적절한 시점에서 커널 데이터 블록은 종종, 가상 메모리로 자동 전환에 사용되지 않고 이용 될 수있는 물리적 메모리를 확보하기 위해, 촬영과 빈번하게 사용 정보는 물리적 메모리에 보호를받습니다.

메모리의 리눅스 운영 메커니즘에 대한 자세한 내용은, 우리는 아래에 언급 된 몇 가지 측면을 알아야합니다

  1. 많은 사용 가능한 실제 메모리를 유지하기 위해, 아무것도 메모리를 필요로하지 않는 경우에도, 리눅스 일시적으로 사용되지 않는 메모리 페이지를 교체합니다 위해 시간에서 페이지 교환 작업 시간에 리눅스 시스템. 이 교환에 필요한 대기 시간을 피할 수 있습니다.

  2. 가상 메모리로 전환 할 때 사용하지 않을 페이지 교환을위한 리눅스 조건, 모든 페이지입니다 "대부분 최근에 사용"을 기반으로 리눅스 커널 알고리즘, 단순히 일부 페이지가 자주 가상 메모리에 파일을 사용하지 않는 교환, 때로는 우리가 나타납니다 이러한 현상에 : 리눅스가 실제 메모리를 많이하지만, 또한 스왑 공간을 많이 사용합니다. 사실, 그것은 놀라운 일이 아니다, 예를 들어, 메모리 리소스를 많이 걸립니다, 실행 메모리 공정을 많이 차지, 다음 가상 메모리에 페이지를 교환하는 자주 사용되는 파일의 일부가 될 것입니다,하지만 나중에이 메모리 자원을 많이 차지 과정을 해제 많은 메모리의 끝에서, 그것은, 페이지 파일이 자동이 필요한 경우가 아니면, 시스템의 실제 메모리를 많이가 유휴 상태가 될 순간에, 그리고 스왑 공간이 사용중인 물리적 메모리로 교환되지 않습니다 스왑 된 단지 현상이 언급되고있다. 그것에서 얼마나 알고있는이 시점에, 한, 아무것도 걱정하지 마십시오.

  3. 이러한 교류를 저장하기에 충분한 가상 메모리 공간이 없을 수 있기 때문에이 시간에이 페이지를 수용 할 수있는 충분한 물리적 메모리가없는 경우 페이지 스왑 공간 사용시 처음, 물리적 메모리로 교환 될 것입니다, 그들은 즉시 스왑됩니다 리눅스는 시간이 지남에 따라 자체를 복원 할 수 있지만 페이지는 결국 거짓 충돌 리눅스, 서비스 예외 및 기타 문제로 이어질 것입니다,하지만 복구 후 시스템은 기본적으로 사용할 수 없게되었습니다.

따라서, 합리적인 계획 및 리눅스 메모리 사용량의 디자인은 매우 중요하다.

응용 프로그램이 일부 메모리를 할당하도록 운영 체제 데이터 파일을 읽을 필요가 리눅스 운영 체제에서, 데이터가 디스크에서 메모리로 읽을 수 있습니다 다음 응용 프로그램 데이터를 배포, 당신은 파일을해야 할 때 데이터를 기록 할 때, 운영 체제는 메모리에서 디스크의 사용자 데이터 다음, 데이터를 수신하기위한 메모리를 할당한다. 많은 양의 데이터가있는 경우, 디스크에서 메모리로 읽거나 읽을 메모리가 디스크에 기록하고 디스크에서 모두 데이터를 읽거나 디스크에 데이터를 기록하기 때문에, 시스템이됩니다 매우 낮은 성능을 기록하는, 아주이다 시간과 리소스를 많이 사용하는 프로세스는이 경우에, 리눅스는 버퍼와 캐시 메커니즘을 도입했다.

버퍼와 캐시 메모리 조작은 운영 체제가 첫 번째 버퍼에 보이는 것 특정 파일 및 캐시 메모리 영역을 읽을 필요가있을 때 있도록 한 번에 열 파일과 파일, 정보 저장 시스템 속성 사용, 발견하는 경우, 직접 판독 필요한 데이터가 발견되면 응용 프로그램에 전달, 그것은 크게 운영 시스템의 성능을 향상 캐싱하여 운영 체제의 캐싱 메커니즘 인 디스크에서 읽습니다. 그러나 버퍼의 내용과 캐시 버퍼는 다르다.

버퍼는 기내 페이지 파일 시스템 메타 데이터 (메타 데이터) 및 추적을 기록 할 장비의 조각을 버퍼링하는 데 사용되는 캐시 된 파일은 버퍼를 만드는 데 사용됩니다. 더 인기있는 것은 말할 : 버퍼가 주로에 대한 내용, 속성 어떤 상점 디렉토리 및 파일 권한 및 사용. 캐시 파일 및 사용 프로그램은 직접 우리의 기억을 열었다.

우리의 결론이 올바른지 확인하기 위해, VI는 크게 열 두 번째 시간을 단축하지 않는이 개 개방 속도 사이의 유사점과 차이점을 느낄 수, 변경 사항이 캐시보고, 다시이 파일을 vi가 매우 큰 파일을 열 수 있습니다 처음으로 그것보다 더 빨리?
그런 다음 명령을 실행합니다 :

find /* -name  *.conf
 

버퍼의 값의 변경 여부를 확인하고 표시 어떤 다른 배의 속도를 확인하려면 find 명령을 반복합니다.

 

 

두, 리눅스 때 가상 메모리 (스왑)을 사용하려면?

A. [루트 @의 웬웬 ~] # 고양이 / proc 디렉토리 / sys 인 / VM의 / swappiness

(60)

swappiness 

이 컨트롤은 커널이 스왑하는 방법을 적극적 정의하는 데 사용되는 

메모리 페이지가. 높은 값이 공격성을 증가, 낮은 값은 

스왑의 양을 줄입니다. 0의 값은하지 않도록 커널을 지시 

자유의 금액 및 파일 백업까지 스왑을 시작합니다 적은 페이지와 IS 

존의 하이 워터 마크 마침내 내. 

는 IS (60)의 디폴트 값은 

변환 

이 매개 변수가 적극적인 (공격적인) 사용자 정의 커널 스왑 메모리 페이지입니다. 더 큰 가치는 낮은 값은 스왑의 양을 감소, 공격성 증가합니다. 0의 값은 높은 미만의 물 한 영역을 사용 가능한 메모리 페이지와 파일의 수는, 스왑을 사용하는 경우에만, 스왑을 사용하지 커널을 지시합니다. 

기본값은 60입니다. 

보려면 여기를 적극적으로 소개하는 것은 안개입니다. 이 값은 아마 단지 의미를 알고있다. 일부 환경에서는 사용자가 많은 스왑 사용량이 분명히 가능한 많은 메모리가있는 이유에 대해 불평했지만, 사실 이것은 정상적인 현상이다.

  

최대 물리 메모리 공간 및 스왑 인 경우 swappiness = 0 나타내며

swappiness = 100을 나타내는 경우에는 교체 영역의 유효 이용 및 내부 스왑 공간에 적절한 데이터 전송 메모리.

정상적인 상황에서 :

상기 메모리는 4G보다 큰 경우 제안 설정 스왑 영역 (메모리 4G보다 작거나 같다) 두 배의 메모리 인, 메모리 스왑 긴 라인보다 크다. 또한 좋을 것이다 이러한 시스템의 성능이 저하됩니다 swappiness를보십시오.

B. 매개 변수 swappiness를 수정

임시로 해결

[루트 @의 웬웬 ~] # sysctl을 vm.swappiness = 10

vm.swappiness = 10

[루트 @의 웬웬 ~] # 고양이 / proc 디렉토리 / sys 인 / VM의 / swappiness                 

(10)

 

영구 수정 :

[루트 @의 웬웬 ~] # 정력 /etc/sysctl.conf의

매개 변수에 가입 :

vm.swappiness = 35

그런 다음 직접에서 :

[루트 @의 웬웬 ~] # sysctl을 -p

효과 여부를 확인합니다 :

고양이 / proc 디렉토리 / sys 인 / VM의 / swappiness

(35)

 

 

 

셋째, 어떻게 메모리를 해제하려면?

일반 시스템 메모리는 자동으로 해제되지 않습니다

주요 구성 파일 / proc 디렉토리 /에서 sys / VM의 / drop_caches하지 . 이 문서는 기본 값이 0, 즉, 캐시를 해제하지 않는 캐시 매개 변수의 방출을 기록합니다. 그 값은 다른 의미를 나타내는 0 내지 3 사이의 임의의 수가 될 수있다 :

0 - 해제하지 않는
1-- 발표 페이지 캐시
해제 dentries과 아이 노드 - 2
(3) - 모든 캐시를 해제

실제 작동 :

 

wKiom1kIfqfCWjMwAABa_PWXhZ8253.png-wh_50

그것의 추가 사용 가능한 메모리의 분명히 많은

 

 

넷째, 어떻게 스왑의 출시?

전제 : 첫째, 그렇지 않으면 그들은 아래로 될 것 같거나 스왑 메모리 사용량이 큰 것으로 남아 보장하기! 메모리의 메커니즘에 따르면, 스왑 파티션은 일단 스왑 파티션에 저장된 모든 파일은 실제 메모리를 덤프, 발표했다. 일반적으로 스왑 파티션 완전한 릴리스 스왑을 다시 마운트합니다.

가. 현재 스왑 파티션이 무엇인지에 장착보기?

wKioL1kIg_-QgRPNAAAc0YY8hDs713.png-wh_50

나. 파티션을 종료합니다

wKiom1kIhCjzKPz0AAAJ4nqUEqM343.png-wh_50

. C 검사 상태 :

wKioL1kIhEuQnJNsAAARrgqCj1I720.png-wh_50

라. 스왑 파티션이 종료보기, 결론은 전체 0 보여줍니다

wKioL1kIhGPAeVG_AAAmRTAqcso981.png-wh_50

전자. 스왑 이동 마운트는 / dev / sda5입니다

wKiom1kIhL-DWuyLAAAJq9dwCWk401.png-wh_50

바. 성공적으로 마운트 확인

wKioL1kIhJKAttdNAAAbWQ1IwjE929.png-wh_50

 

 

다섯째, 실제 사례의 소수?

그럴 게요, MySQL의 시간을 설정

my.cnf의 파일

innodb_buffer_pool_size = 6G (내 운영 시스템 메모리는 일반적으로이 값은 오퍼레이팅 시스템 메모리의 80 %로 설정 6G이다)

이 값은 더 나은 설정되지 않습니다. 너무 크게 설정, 그것은하여 SQL 쿼리의 효율성을 감소 운영체제의 원인이 점령 시스템 스왑 공간 느려집니다 이어질 것입니다.

내가 MySQL을 사용 할 때와 같은 대형 운영 시스템 메모리와,이 buffer_pool_size가 너무 크게 설정하면 여기에 당신이 이해할 수, 최근 재에 따라, 때문에 리눅스 메모리 메커니즘, 몇 시간 동안 메모리에 많은 데이터를 호출 최적의 원리가, 스왑 파티션으로 필터링 데이터의 일부 스왑 파티션이 다른 데이터 호출이 다시 스크리닝 스왑 파티션으로 데이터의 일부가 될 때 현상이있을 수 있고, 데이터 출력 적시 깨끗하지 않다, 즉, 이 경우에도 비어있는 물리적 메모리의 흑자이며, 스왑 파티션이 가득 찼습니다.

추천

출처www.cnblogs.com/robinunix/p/11248878.html