mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #39481 from KentaTada/use-memavailable
Use MemAvailable instead of MemFree to estimate actual available memory
This commit is contained in:
commit
44a3267912
2 changed files with 12 additions and 5 deletions
|
@ -27,6 +27,7 @@ func ReadMemInfo() (*MemInfo, error) {
|
||||||
func parseMemInfo(reader io.Reader) (*MemInfo, error) {
|
func parseMemInfo(reader io.Reader) (*MemInfo, error) {
|
||||||
meminfo := &MemInfo{}
|
meminfo := &MemInfo{}
|
||||||
scanner := bufio.NewScanner(reader)
|
scanner := bufio.NewScanner(reader)
|
||||||
|
memAvailable := int64(-1)
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
// Expected format: ["MemTotal:", "1234", "kB"]
|
// Expected format: ["MemTotal:", "1234", "kB"]
|
||||||
parts := strings.Fields(scanner.Text())
|
parts := strings.Fields(scanner.Text())
|
||||||
|
@ -48,6 +49,8 @@ func parseMemInfo(reader io.Reader) (*MemInfo, error) {
|
||||||
meminfo.MemTotal = bytes
|
meminfo.MemTotal = bytes
|
||||||
case "MemFree:":
|
case "MemFree:":
|
||||||
meminfo.MemFree = bytes
|
meminfo.MemFree = bytes
|
||||||
|
case "MemAvailable:":
|
||||||
|
memAvailable = bytes
|
||||||
case "SwapTotal:":
|
case "SwapTotal:":
|
||||||
meminfo.SwapTotal = bytes
|
meminfo.SwapTotal = bytes
|
||||||
case "SwapFree:":
|
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.
|
// Handle errors that may have occurred during the reading of the file.
|
||||||
if err := scanner.Err(); err != nil {
|
if err := scanner.Err(); err != nil {
|
||||||
|
|
|
@ -14,8 +14,9 @@ func TestMemInfo(t *testing.T) {
|
||||||
const input = `
|
const input = `
|
||||||
MemTotal: 1 kB
|
MemTotal: 1 kB
|
||||||
MemFree: 2 kB
|
MemFree: 2 kB
|
||||||
SwapTotal: 3 kB
|
MemAvailable: 3 kB
|
||||||
SwapFree: 4 kB
|
SwapTotal: 4 kB
|
||||||
|
SwapFree: 5 kB
|
||||||
Malformed1:
|
Malformed1:
|
||||||
Malformed2: 1
|
Malformed2: 1
|
||||||
Malformed3: 2 MB
|
Malformed3: 2 MB
|
||||||
|
@ -28,13 +29,13 @@ func TestMemInfo(t *testing.T) {
|
||||||
if meminfo.MemTotal != 1*units.KiB {
|
if meminfo.MemTotal != 1*units.KiB {
|
||||||
t.Fatalf("Unexpected MemTotal: %d", meminfo.MemTotal)
|
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)
|
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)
|
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)
|
t.Fatalf("Unexpected SwapFree: %d", meminfo.SwapFree)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue