Linux程序运行占用内存,linux运行中的程序占用内存

在Linux系统中,可以使用`ps aux`和`top`命令来查看程序的内存使用情况。RSS和RES分别表示程序占用的物理内存,但它们可能会因内存共享机制而造成总和大于实际物理内存。Linux会缓存已调用的文件以提高效率,导致`ps aux`显示的RSS值可能不准确。理解Linux的内存管理机制,包括虚拟内存和物理内存的关系,对于监控系统资源至关重要。
摘要由CSDN通过智能技术生成

在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有

ps aux

其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存。

RSS列 表示, 程序占用了多少物理内存。

虚拟内存可以不用考虑,它并不占用实际物理内存。

top 命令

其中 VIRT(或VSS)列 表示,程序占用了多少虚拟内存。 同 ps aux 中的 VSZ列。RES列 表示, 程序占用了多少物理内存。同 ps aux 中的RSS列

在linux下, 查看当前系统占用了多少内存, 一般的命令是 free

其中, free就是系统还有多少内存可以使用。

但由于 linux 系统对内存使用有一个原则, 就是, 内存是宝贵的, 能使用多少就使用多少。 所以, linux会把已经调用过的包缓存起来,放在内存里。

这样,实际上,可以使用的内存,就可以理解为, free+buffers+cached

一个奇怪的现象

当你了解完这些命令以后, 再去使用ps aux 命令去查看的时候, 会发现一个奇怪的现象:所有的 RSS 列的数据,加起来, 比物理内存的数要大很多。

比如, 物理内存为2G, 而RSS列的数据加起来,可能有5个G之多, 这是怎么回事了?这是因为RSS列的值骗了我们。

linux的内存机制是这样的:

在运行一个程序时, linux会调用该程序依赖的链接库, 如lib.xx.so。 首先看该链接库是否被映射进内存中,如果没有被映射,则将代码段与数据段映射到内存中,否则只是将其加入进程的地址空间。

这样,当N个程序,依赖到lib.xx.so的时候, 实际上,内存中只有一个lib.xx.so ,而不是N个。 而RSS在显示一个程序占用的实际物理内存时, 将lib.xx.so也算了进来。

比如, X程序, 本身占用内存为5M, lib.xx.so 占用内存2M,lib.xx.so被N个程序共享依赖。 则RSS显示为,X程序运行,占用内存为7M。 实际上, X程序占用了5M空间。 多余的2m被讨入到RSS中了。

当你在用ps aux显示内存占用情况时, N个共享依赖lib.xx.so的N个程序,都把这2m空间,算在自己的RSS中了, 这样RSS的sum值,就比实际物理内存多了。

当然, linux的内存使用机制很复杂, 不是一句两句能说清楚的。这里只是简单的说明了一下, ps aux中的RSS值, 并不能真实反映物理内存的使用情况。

参考资料

1. http://blog.csdn.net/cherish_2012/article/details/41979679

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值