Linux에서 "효과적으로 사용되는" 메모리란 무엇입니까? "사용됨" 또는 ("전체" - "사용 가능")?

Linux에서 "효과적으로 사용되는" 메모리란 무엇입니까? "사용됨" 또는 ("전체" - "사용 가능")?

운영자가 사용하는 메모리와 Linux 서버에서 사용 가능한 메모리를 GUI에 표시해야 합니다.

그렇다면 사용법으로 표시할 논리적으로 올바른 값은 무엇입니까?

[root@host ~]# free
              total        used        free      shared  buff/cache   available
Mem:      131753676   110324960     1433296     4182648    19995420    16240640
Swap:       2097148      652076     1445072

used또는( total- available)?

차이점은 다음과 같습니다. 110324960 대 115513036 또는 5188076kb ~= ~5GB 그렇다면 이 5GB는 무엇입니까? 효과적으로 사용됩니까, 사용 가능합니까, 아니면 사용 불가능하고 사용되지 않습니까? 메모리 사용량 %에서 어떤 표시가 더 정확합니까?

이는 2개의 Java 서비스를 실행하는 CentOS 7.3 PC용입니다.

하지만 PostgreSQL 서버에는 완전히 다른 그림이 있습니다.

[root@postgres_server1 ~]# free
              total        used        free      shared  buff/cache   available
Mem:      131753684     7364056    77736740    15598120    46652888   107942020
Swap:       2097148           0     2097148

used어디와 ( -) total사이의 차이가 available훨씬 더 큽니까: 16447608 kb ~=15.7 GB

답변1

사용량이 무엇을 반영해야 하는지에 따라 다릅니다. In 의 출력 free:

  • "사용됨"은 "전체 - 여유 공간 - 버퍼 - 캐시"로 계산되므로 캐시를 제외하고 현재 유용한 데이터를 저장하고 있는 메모리 양을 반영합니다.
  • "사용 가능"은 다른 목적으로 즉시 사용할 수 있는 실제 메모리의 양이어야 합니다.

"모두 사용 가능"은 "현재 사용 중이며 교체할 수 없는 모든 물리적 메모리"를 의미합니다. 그것과 "사용된"(당신이 언급한 5GB와 15GB)의 차이점은 아직 다른 곳에서는 사용할 수 없는 데이터를 현재 저장하고 있는 물리적 메모리의 양입니다.더티 버퍼(그래서 PostgreSQL은 디스크에 쓰기를 기다리는 더 많은 데이터를 갖게 됩니다) "사용 가능"은 프로그램이 점유되지 않고 요청할 수 있는 최대 물리적 메모리 양을 반영합니다.강요된스왑(아무것도 보장되지는 않지만 프로그램이 그만큼 많은 메모리를 사용하는 경우 당시 시스템의 나머지 동작을 고려할 때 어쨌든 스왑되지는 않습니다).

따라서 두 값 모두 사용된 메모리를 반영하지만 정의는 약간 다릅니다. 어느 것을 사용할지는 귀하(또는 귀하의 요구 사항)에 달려 있습니다. "사용 가능"이 "사용 가능"보다 정확하므로 하나만 보관하려는 경우 더 유용한 값이 될 수 있습니다.

그것에 대해 생각하는 또 다른 방법은 가치관이 대답하는 질문을 고려하는 것입니다.

  • "중고"는 128GiB RAM이 현재 작업 부하에 유용한지 여부를 알려줍니다.
  • "사용 가능"은 남은 용량을 알려줍니다.
  • "전체 - 사용 가능"은 실제로 필요한 물리적 RAM의 양을 알려줍니다(캐싱으로 인한 성능 향상을 놓치고 싶다면 다음 서버나 VM을 얼마나 더 작게 만들 수 있습니까?

완벽한 타협은 없으므로 free두 값이 모두 표시됩니다.

Linux 메모리 관리 시스템에서 메모리를 즉시 사용할 수 있습니다.그리고배포판에서 이식 가능한 사용 가능한 메모리 양을 얻는 방법은 무엇입니까?"사용 가능"이 정확히 무엇을 의미하는지에 대한 자세한 내용을 제공하세요. "버프/캐시"에는 회수할 수 없는 메모리가 포함되어 있고(디스크에 기록되지 않았기 때문에) 회수할 수 있지만 "버프/캐시"에 포함되지 않는 다른 메모리 풀이 있기 때문에 "버프/캐시"와 동일하지 않습니다.

답변2

기존 답변 외에도:

이 "간단한" 질문은 메모리 관리라는 매우 중요한 주제를 다룹니다. 이것은 커널의 주요 "하위 시스템"이기도 합니다. "더 많은 메모리를 구입하세요"는 여전히 보편적인 진실입니다. 그러나 얼마나 많은 것을 가지고 있는지는 중요하지 않습니다. 모든 운영 체제는 RAM 공유가 걸리고, 교환되고, 스래싱되는 상황을 처리해야 합니다.

자원의 효율적인 사용과 고갈 사이에는 미묘한 차이가 있습니다. 나는 당신의 숫자를 보고 다음과 같은 설명을 생각해냈습니다.

자바:

"used"는 "total"의 83%를 나타냅니다. 이 숫자는 높습니다. 그리고 스왑이 활성화되어 있으며 매우 작으며 여전히 사용 가능한 공간이 있습니다.

"무료"는 그 자체로 말합니다. 1% 미만. 16%는 어디로 갔나요? "사용 가능"이라고 하는 것이 16GB인데, 이 경우에는 16% 정도입니다.

"공유"(4G)와 "버퍼/캐시"(19G)는 이러한 "사용 가능한" 16G보다 약간 더 많습니다. 이는 코어가 그 중 2/3를 "희생"했을 수 있음을 반영합니다. 그런데 이제 시스템에서 Java가 실행되는 방식이 이렇게 되었습니다.

따라서 누락된 6번째 x = 총계 - (사용됨 + 무료) (132G - (110+1))는 여기서 21G이고 "avail"(16G) 및 "sh" + "b/c ” (23G)에 있습니다. ).

왼쪽에서 오른쪽으로 읽어야 하며 free먼저 "스왑"을 확인한 다음 "공유" 및/또는 "버퍼/캐시"로 사용되는 방법과 "사용 가능한" 양을 물어야 합니다.

교환이 활성화되면 빨간불이 들어오며 'Free'가 1% 미만이지만 16% 사용 가능하며 교환 내역이 'OK'로 표시됩니다.

(스왑은 132G에 비해 너무 작다고 생각합니다. Java 서비스도 가능하길 바랍니다.행위무엇)


SQL 예:

이는 이것이 어떻게 "되어야 하는지" 보여줍니다. 충분한 RAM과 앱 및 OS가 함께 작동해야 합니다.

5%만 사용됩니다. 하지만 50%는 공짜가 아니다. 이는 "공유"로 사용되며 "버프/캐시"로 유지됩니다. 교환이 활성화되지 않았습니다. 다시 말하지만, 61G를 모두 얻을 수는 없고 그 중 좋은 부분만 얻을 수 있습니다.


새로운 단어를 정의하는 것은 아무 소용이 없습니다. 그것은 단지 해석의 문제일 뿐입니다. 마지막은 커널을 인식하며 free최상위 수준 개요에 적합합니다. 이제 이 정보를 사용하여 "운영자"에게 그가 원하는 것이 무엇인지 물어봐야 했습니다. 아니면 이제는 묻지 않고도 알 수도 있습니다.

관련 정보