Browse Source

[2297] use the size of free-list to identify free memory for FreeBSD

total - active-VM isn't reliable as the former is physical while the latter
is virtual, and sometimes results in a negative value.
JINMEI Tatuya 12 years ago
parent
commit
07085635d4

+ 2 - 2
src/lib/python/isc/sysinfo/sysinfo.py

@@ -405,11 +405,11 @@ class SysInfoFreeBSD(SysInfoFreeBSDOSX):
             pass
 
         try:
+            # We use the size of free-list from the vmstat result.
             s = subprocess.check_output(['vmstat', '-H'])
             lines = s.decode('utf-8').split('\n')
             v = re.split('\s+', lines[2])
-            used = int(v[4]) * 1024
-            self._mem_free = self._mem_total - used
+            self._mem_free = int(v[5]) * 1024
         except (subprocess.CalledProcessError, OSError):
             pass
 

+ 1 - 1
src/lib/python/isc/sysinfo/tests/sysinfo_test.py

@@ -417,7 +417,7 @@ class SysInfoTest(unittest.TestCase):
 
         self.assertEqual((0.2, 0.4, 0.6), s.get_loadavg())
         self.assertEqual(543214321, s.get_mem_total())
-        self.assertEqual(543214321 - (343434 * 1024), s.get_mem_free())
+        self.assertEqual(123456 * 1024, s.get_mem_free())
         self.assertEqual(1037533184, s.get_mem_swap_total())
         self.assertEqual(1037533184, s.get_mem_swap_free())