瀏覽代碼

Merge pull request #39481 from KentaTada/use-memavailable

Use MemAvailable instead of MemFree to estimate actual available memory
Sebastiaan van Stijn 6 年之前
父節點
當前提交
44a3267912
共有 2 個文件被更改,包括 12 次插入5 次删除
  1. 6 0
      pkg/system/meminfo_linux.go
  2. 6 5
      pkg/system/meminfo_unix_test.go

+ 6 - 0
pkg/system/meminfo_linux.go

@@ -27,6 +27,7 @@ func ReadMemInfo() (*MemInfo, error) {
 func parseMemInfo(reader io.Reader) (*MemInfo, error) {
 	meminfo := &MemInfo{}
 	scanner := bufio.NewScanner(reader)
+	memAvailable := int64(-1)
 	for scanner.Scan() {
 		// Expected format: ["MemTotal:", "1234", "kB"]
 		parts := strings.Fields(scanner.Text())
@@ -48,6 +49,8 @@ func parseMemInfo(reader io.Reader) (*MemInfo, error) {
 			meminfo.MemTotal = bytes
 		case "MemFree:":
 			meminfo.MemFree = bytes
+		case "MemAvailable:":
+			memAvailable = bytes
 		case "SwapTotal:":
 			meminfo.SwapTotal = bytes
 		case "SwapFree:":
@@ -55,6 +58,9 @@ func parseMemInfo(reader io.Reader) (*MemInfo, error) {
 		}
 
 	}
+	if memAvailable != -1 {
+		meminfo.MemFree = memAvailable
+	}
 
 	// Handle errors that may have occurred during the reading of the file.
 	if err := scanner.Err(); err != nil {

+ 6 - 5
pkg/system/meminfo_unix_test.go

@@ -14,8 +14,9 @@ func TestMemInfo(t *testing.T) {
 	const input = `
 	MemTotal:      1 kB
 	MemFree:       2 kB
-	SwapTotal:     3 kB
-	SwapFree:      4 kB
+	MemAvailable:  3 kB
+	SwapTotal:     4 kB
+	SwapFree:      5 kB
 	Malformed1:
 	Malformed2:    1
 	Malformed3:    2 MB
@@ -28,13 +29,13 @@ func TestMemInfo(t *testing.T) {
 	if meminfo.MemTotal != 1*units.KiB {
 		t.Fatalf("Unexpected MemTotal: %d", meminfo.MemTotal)
 	}
-	if meminfo.MemFree != 2*units.KiB {
+	if meminfo.MemFree != 3*units.KiB {
 		t.Fatalf("Unexpected MemFree: %d", meminfo.MemFree)
 	}
-	if meminfo.SwapTotal != 3*units.KiB {
+	if meminfo.SwapTotal != 4*units.KiB {
 		t.Fatalf("Unexpected SwapTotal: %d", meminfo.SwapTotal)
 	}
-	if meminfo.SwapFree != 4*units.KiB {
+	if meminfo.SwapFree != 5*units.KiB {
 		t.Fatalf("Unexpected SwapFree: %d", meminfo.SwapFree)
 	}
 }