如何以Python分发无关的方式获取总物理内存?我不需要已使用的内存,只需要总物理内存。
mem = virtual_memory()
然后 # total physical memory
?听起来不错。 - Thomas Weller在Linux上使用 os.sysconf
:
import os
mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') # e.g. 4015976448
mem_gib = mem_bytes/(1024.**3) # e.g. 3.74
注意:
SC_PAGE_SIZE
通常为4096。SC_PAGESIZE
和SC_PAGE_SIZE
相等。man sysconf
。在Linux上使用/proc/meminfo
:
meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
mem_kib = meminfo['MemTotal'] # e.g. 3921852
os.sysconf('SC_PHYS_PAGES')
在OS X上似乎无法使用。虽然OS X的sysconf
man页面确实提到了_SC_PHYS_PAGES
,但是这在Python中似乎无法访问。您可以尝试使用psutil
。另外,您还可以参考此处的答案中使用的技术。 - Asclepiusos.sysconf()
方法在Python 3甚至Solaris 10下也适用。 - maxschlepzigos.sysconf('SC_PHYS_PAGES')
中出现了ValueError: unrecognized configuration name
的错误。 - Nick Korostelevpsutil
)的情况下解决这个问题。 - Nick Korostelev正则表达式对于这种情况非常有效,并且可能有助于处理各个发行版之间的任何小差异。
import re
with open('/proc/meminfo') as f:
meminfo = f.read()
matched = re.search(r'^MemTotal:\s+(\d+)', meminfo)
if matched:
mem_total_kB = int(matched.groups()[0])
这段代码在 Python 2.7.9 中没有使用任何外部库对我有效。
import os
mem=str(os.popen('free -t -m').readlines())
"""
Get a whole line of memory output, it will be something like below
[' total used free shared buffers cached\n',
'Mem: 925 591 334 14 30 355\n',
'-/+ buffers/cache: 205 719\n',
'Swap: 99 0 99\n',
'Total: 1025 591 434\n']
So, we need total memory, usage and free memory.
We should find the index of capital T which is unique at this string
"""
T_ind=mem.index('T')
"""
Than, we can recreate the string with this information. After T we have,
"Total: " which has 14 characters, so we can start from index of T +14
and last 4 characters are also not necessary.
We can create a new sub-string using this information
"""
mem_G=mem[T_ind+14:-4]
"""
The result will be like
1025 603 422
we need to find first index of the first space, and we can start our substring
from from 0 to this index number, this will give us the string of total memory
"""
S1_ind=mem_G.index(' ')
mem_T=mem_G[0:S1_ind]
print 'Summary = ' + mem_G
print 'Total Memory = ' + mem_T +' MB'
我们很容易地可以获取已使用内存和空闲内存
"""
Similarly we will create a new sub-string, which will start at the second value.
The resulting string will be like
603 422
Again, we should find the index of first space and than the
take the Used Memory and Free memory.
"""
mem_G1=mem_G[S1_ind+8:]
S2_ind=mem_G1.index(' ')
mem_U=mem_G1[0:S2_ind]
mem_F=mem_G1[S2_ind+8:]
print 'Used Memory = ' + mem_U +' MB'
print 'Free Memory = ' + mem_F +' MB'
/proc/meminfo
。 - Lee Duhem/proc/meminfo
应该在几乎所有的 Linux 安装中都可以使用。 - Marc B/proc/meminfo
,因为sysconf
已经有答案了。 - Asclepius/proc/meminfo
显示32GB而AWS实例只有16GB?这个话题上进行更详细的阐述吗? - Martin Thoma