微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确测量Linux上的进程内存使用情况?

我想测量Linux上进程的内存使用情况,特别是Ubuntu 15.04,但我不确定如何正确执行此操作。 我希望测量结果与free命令相关联,以便发现使用的内存总量与free报告(sans buffers / cache)相对应。

到目前为止,我已经编写了这个Python脚本 ,但是它没有与free协议,因为它报告总内存使用量较低:

#!/usr/bin/env python from collections import OrderedDict import os.path import re def parse_mem_file(filename): data = OrderedDict() with open(filename,'rb') as f: for line in f: splittage = line.split(':') data[splittage[0]] = splittage[1].strip() return data def get_process_mem_usage(): re_pid = re.compile(r'^d+$') re_mem = re.compile(r'^(d+) .+$') pid2usage = {} for pid in [d for d in os.listdir('/proc') if re_pid.match(d)]: fpath = os.path.join('/proc',pid,'status') try: data = parse_mem_file(fpath) except IOError: continue try: pid2usage[pid] = int(re_mem.match(data['VmHWM']).group(1)) / 1024. except KeyError: continue return OrderedDict( sorted(pid2usage.iteritems(),key=lambda x: x[1],reverse=True)) pid2usage = get_process_mem_usage() total_usage = sum(pid2usage.values()) print('Total memory usage: {:.2f}'.format(total_usage)) for pid,usage in pid2usage.iteritems(): print('{}: {:.2f} MB'.format(pid,usage))

我怎样才能调整这个程序来报告与free程序报告的内存使用情况?

对于上下文,问题是我的服务器上的内存使用量随着时间的推移正在增加,直到大量的交换内存被使用,并因此导致大量的减速。 我想知道这个原因。

无法为对象堆预留足够的空间来启动JVM

了解.NET应用程序内存大小

内存使用率在免费调用时不会减less

从地址查找堆或堆块或段

为什么我的结构元素带有填充字节?

PHP的海量内存使用SQL查询

摆脱基于文件的通信

连续调用mmap,任何caching?

什么会导致java进程大大超过Xmx或Xss限制?

在Windows上检测进程内存注入(防黑客)

在Linux上free读取/proc/meminfo文件(请参阅proc(5) )。 你可以通过调用strace free来保证它strace free ,输出不是很长。

PS由于你的评论而更新。

free显示有关物理内存的信息。 它计算使用的物理内存的数量MemTotal - MemFree 。 所以我们对系统中进程使用的物理内存感兴趣。

首先,您正在使用/proc/<pid>/status文件的VmHWM字段。 来自proc(5) :

VmHWM:高峰居民套装大小(“高水位”)。

也就是说,给定进程在其生命周期中使用的最大物理内存量。 这不是当前进程的内存使用情况。 如果你想获得当前的物理内存使用情况,请看VmRSS

VmRSS:驻地设置大小。

第二件事。 文件/proc/<pid>/status设计为人类可读的。 对于程序员来说,解析/proc/<pid>/statm并且在第二列中得到值是/proc/<pid>/statm容易的,这与/proc/<pid>/status VmRSS是一样的。

现在是最重要的部分。 当我们考虑物理记忆时,我们应该记住它是一个系统的事物。 由于多种原因,物理内存量不能计算为系统中所有进程驻留集大小的总和。 首先,不仅是系统中使用物理内存的用户空间进程,还有内核 – 所有的设备驱动程序,内核线程以及谁知道什么。 其次,进程可以在彼此之间共享内存。

总而言之, proc(5)是一个很好的阅读。

PPS关于:

对于上下文,问题是我的服务器上的内存使用量随着时间的推移正在增加,直到大量的交换内存被使用,并因此导致大量的减速。 我想知道这个原因。

如果要诊断哪些进程占用了所有内存,则可以通过共享使用的物理内存(类型“M”)来调用top和排序进程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐