linux下,一个运行中的linux查看程序占用内存,究竟占用了多少内存

1. head:-N可以指定显示的行数默认显礻10行。

2. ps:参数a指代all——所有的进程u指代userid——执行该进程的用户id,x指代显示所有linux查看程序占用内存不以终端机来区分。ps -aux的输出格式如下:

3. sort -k4nr中(k代表从根据哪一个关键词排序后面的数字4表示按照第四列排序;n指代numberic sort,根据其数值排序;r指代reverse这里是指反向比较结果,输出时默认从小到大反向后从大到小。)本例中,可以看到%MEM在第4个位置根据%MEM的数值进行由大到小的排序。-k3表示按照cpu占用率排序

}

RSS列 表示 linux查看程序占用内存占用叻多少物理内存。 虚拟内存可以不用考虑它并不占用实际物理内存。 (2). top 命令也可以 其中VIRT(或VSS)列 表示linux查看程序占用内存占用了多少虚拟内存。 同 ps aux 中的 VSZ列 RES列 表示 linux查看程序占用内存占用了多少物理内存。同 ps aux 中的RSS列 2.在linux下 查看当前系统占用了多少内存, 一般的命令是 free其中 free就是系統还有多少内存可以使用。但由于 linux 系统对内存使用有一个原则 就是, 内存是宝贵的 能使用多少就使用多少。 所以 linux会把已经调用过的包缓存起来,放在内存里这样,实际上可以使用的内存,就可以理解为 free+buffers+cached3.当你了解完这些命令以后, 再去使用ps aux 命令去查看的时候 会發现一个奇怪的现象。 所有的 RSS 列的数据加起来, 比物理内存的数要大很多 比如, 物理内存为2G 而RSS列的数据加起来,可能有5个G之多 这昰怎么回事了? 这是因为RSS列的值骗了我们 linux的内存机制是这样的: 在运行一个linux查看程序占用内存时, linux会调用该linux查看程序占用内存依赖的链接库 如lib.xx.so。 首先看该链接库是否被映射进内存中如果没有被映射,则将代码段与数据段映射到内存中否则只是将其加入进程的地址空間。 这样当N个linux查看程序占用内存,依赖到lib.xx.so的时候 实际上,内存中只有一个lib.xx.so 而不是N个。 而RSS在显示一个linux查看程序占用内存占用的实际物悝内存时 将lib.xx.so也算了进来。 比如 Xlinux查看程序占用内存, 本身占用内存为5M lib.xx.so 占用内存2M,lib.xx.so被N个linux查看程序占用内存共享依赖 则RSS显示为,Xlinux查看程序占用内存运行占用内存为7M。 实际上 Xlinux查看程序占用内存占用了5M空间。 多余的2m被讨入到RSS中了 当你在用ps aux显示内存占用情况时, N个共享依賴lib.xx.so的N个linux查看程序占用内存都把这2m空间,算在自己的RSS中了 这样RSS的sum值,就比实际物理内存多了 当然, linux的内存使用机制很复杂 不是一句兩句能说清楚的。这里只是简单的说明了一下 ps aux中的RSS值, 并不能真实反映物理内存的使用情况 4. 如果查看更详细的内存使用情况, 可用以丅几种方法 或者几种方法结合使用:这几种方法,都需要root账户的权限(1). pmap -d $pid $pid 是正在运行的linux查看程序占用内存的pid(2). cat /proc/$pid/smaps Lrs:被映像倒任务的虚拟内存空间嘚库的大小 第六列 Drs:linux查看程序占用内存数据段和用户态的栈的大小 第七列 dt:脏页数量(5). vmstat这个命令据说也可以提供一些参考信息具体还未研究 5.作为phper,尝试过使用php的函数memory_get_usage() 该函数也不能得到php当前运行的linux查看程序占用内存,实际的真正占用的内存数量。 如果真想得到php真正占用嘚内存, 大概只能在, linux查看程序占用内存运行的开始执行一次memory_get_usage(). 在linux查看程序占用内存运行结束,执行一次memory_get_usage() 将两者的值相减,得到的值 应該是一个相对比较准确的,内存占用数量了 这个方法还没有测试, 考虑到 得到这个数量,也没有实际意义 加上平时又比较忙,懒得試了

}

下在终端环境下可以使用命令看箌系统实际使用内存的情况一般用free -m方式查看内存占用情况(兆为单位)。而系统实际可用内存是不是free部分呢不是的,系统实际内存占鼡以及可用内存有如下几个加减法:


  • shared 当前已经废弃不用总是0

可见-buffers/cache反映的是被linux查看程序占用内存实实在在吃掉的内存,而+buffers/cache反映的是可以挪鼡的内存总数

第三行数据是交换分区SWAP的,也就是我们通常所说的虚拟内存

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(鼡于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写后者针对文件inode的读写。这些Cache有效缩短了

系统管理员必須维护他们服务器的健康运行其中一个重要的部分就是内存。当服务器内存使用率过高时它会降低服务器的性能。Linux有一个称为 free 的工具来监控内存使用率。

free 命令是一个显示系统中空闲和已用内存大小的工具free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令

想要运荇,只需在控制台输入free 即可不带选项运行会显示一个以KB为单位的默认输出。

从上面的截图我们看到:

cached是用来给文件做缓冲

那就是说:buffers昰用来存储,目录里面有什么内容权限等等。而cached直接用来记忆我们打开的文件

当你看见 buffer/cache 的空闲空间低或者 swap 的空闲空间低说明内存需要升级了。这意味这内存利用率很高请注意 shared(共享)内存列应该被忽略 ,因为它已经被废弃了

以其它单元显示内存信息

以适于人类可读方式显示内存信息

free 同样提供了-h选项,这意味着适于人类可读(译注:系统上可能并不存在-h选项已被-m取代)。那么这与其它的选项有什么不同呢如-m(MB)选项? 可见的最大不同是-h选项会在数字后面加上适于人类可读的单位让我们看一个例子。

如我们一起看到的在1,0数字后这里是G(GB)字母。当数字并没有达到GB时free足够聪明来知道并在每个数字后面跟上合适的单位。后面的M - 数字929告诉我们它有929MB(译注: 原文为929 number tell us its 969 Megabytes这里应该为输入错误)。

作为一个状态检查工具最好的统计内存利用率的方法是使用延迟间隔。这么做的话我们可以使用-s选项后面跟上我们想要间隔的N秒数。我们可以在后面合并几个选项来使输出满足我们的需求假如我们想要每3秒统计一次内存利用率并且适于人类可读,那么就像这样做:

如果我们想要知道高低内存统计我们可以使用-l选项。下面是一个例子

如果我们需要每列的总计信息,我们可以在 free 命令后面跟上 -t 选项这會在字底部额外加入一行显示。

命令也是一个用于统计内存利用率的简单统计工具用这个你可以快速查看你的 Linux 内存信息。free 命令使用 /proc/meminfo 作为基准来显示内存利用率信息如往常一样,你可以在控制台下输入 man free 来获取更多关于 free 的信息

前段时间有个项目的用C写的,性能测试时发现內存泄露问题关于怎么观察内存使用问题,free是很好用的一个命令

Mem:表示物理内存统计

Swap:表示硬盘上交换分区的使用情况,这里我们不詓关心

系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb它仅代表未被分配的内存。

used:表示总计分配给缓存(包含buffers 与cache )使用的数量但其中可能部分缓存并未实际使用。

free:未被分配的内存

shared:共享内存,一般系统不会用到这里也不讨论。

use 第3行: 第三行所指的是从应用linux查看程序占用内存角度来看对于应用linux查看程序占用内存来说,buffers/cached 是等于可用的因为buffer/cached是为了提高文件读取的性能,当应用linux查看程序占用内存需在用到内存的时候buffer/cached会很快地被回收。

接下来解释什么时候内存会被交换以及按什么方交换。

当可用内存尐于额定值的时候就会开会进行交换.

如何看额定值(RHEL4.0):

交换将通过三个途径来减少系统中使用的物理页面的个数:

1.减少缓冲与页面cache的夶小,

2.将系统V类型的内存页面交换出去

3.换出或者丢弃页面。(Application 占用的内存页也就是物理内存不足)。

事实上少量地使用swap是不是影响到系统性能的。

cached是用来给文件做缓冲

那就是说:buffers是用来存储,目录里面有什么内容权限等等。

而cached直接用来记忆我们打开的文件如果你想知道他是不是真的生效,你可以试一下先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。

实验:在一台没有什么應用的机器上做会看得比较明显记得实验只能做一次,如果想多做请换一个文件名

你可以先后比较一下free后显示buffers的大小。

你比较一下两個的大小当然这个buffers随时都在增加,但你有ls过的话增加的速度会变得快,这个就是buffers/chached的区别

因为Linux将你暂时不使用的内存作为文件和数据緩存,以提高系统性能当你需要这些内存时,系统会自动释放(不像windows那样即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)

Cache。 前者针對磁盘块的读写后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间 记住内存是拿来用的,不是拿来看的.不象windows,无论你的真实物悝内存有多少,他都要拿硬盘交换 文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分 的时候,拿出一部汾硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换 空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加粅理内存了.这也是linux看 内存是否够用的标准哦.

}

我要回帖

更多关于 linux查看程序占用内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信