Linux查看CPU和内存使用情况
2014-02-13 14:43
253 查看
Linux查看CPU和内存使用情况在Windows下面我们可以通过任务管理器来查看内存的使用情况。在Linux下面虽然没有任务管理器,但是我们同样可以查看内存使用,和监控系统进程。在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存。另一个我们常用的Linux下查看内存的专用工具是free命令。
第二列 Resident:正在使用的物理内存大小
第三列 Shared:共享页数
第四列 Trs:程序所拥有的可执行虚拟内存大小
第五列 Lrs:被映像倒任务的虚拟内存空间的库的大小
第六列 Drs:程序数据段和用户态的栈的大小
第七列 dt:脏页数量(5). vmstat这个命令据说也可以提供一些参考信息,具体还未研究 5.作为phper,尝试过使用php的函数memory_get_usage(),该函数也不能得到php当前运行的程序,实际的,真正占用的内存数量。如果真想得到,php真正占用的内存,大概只能在, 程序运行的开始,执行一次memory_get_usage().在程序运行结束,执行一次memory_get_usage()。将两者的值相减,得到的值,应该是一个相对比较准确的,内存占用数量了。这个方法还没有测试,考虑到,得到这个数量,也没有实际意义,加上平时又比较忙,懒得试了。 也许php还有一个方法,是使用shm_* 系列函数,这也我也未深入研究,详见这篇文章(http://duckweeds.blog.sohu.com/166663796.html) 6.另外还有一些文章可以参考,如下: (1)一个C程序员,眼中的Linux内存使用详解,写的比较详细,比较细致,也比较专业。 (2)对/proc/pid/statm的详细说明 (3)简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析 (4)php 共享内存的使用 (5)Memory Usage with smaps (6)Capturing Process Memory Usage Under Linux,这篇文章似乎是对一个产品的广告,但里面对USS,PSS,RSS 这几个概念有详细的解释 (7)ELC: How much memory are applications really using,跟(6)一样,是对同一个产品的广告,文章里有一些东西可以参考(8) Linux Check Memory Usage,文章对 free, vmstat,top ,gnome-system-monitor等命令有一些介绍(9)Console Monitoring Tools for SUSE Linux,对top,free,uptime,pmap,smartctl,iostat,strace等命令有所介绍,并且介绍的比较详细,目前只是粗略的看了一下,有时间还要再看看。(10)Solaris 9 Enhanced pmap,比较详细的介绍了pmap的应用,不过是基于Solaris 9的
用top命令查看CPU和内存使用
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。 操作实例: 在命令行中输入 “top” 即可启动 top top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。 第一部分 -- 最上部的 系统信息栏 : 第一行(top): “00:11:04”为系统当前时刻; “3:35”为系统启动后到现在的运作时间; “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程; 第二行(Tasks): “59 total”为当前系统进程总数; “1 running”为当前运行中的进程数; “58 sleeping”为当前处于等待状态中的进程数; “0 stoped”为被停止的系统进程数; “0 zombie”为被复原的进程数; 第三行(Cpus): 分别表示了 CPU 当前的使用率; 第四行(Mem): 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量; 第五行(Swap): 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。 第二部分 -- 中间部分的内部命令提示栏: top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表: s - 改变画面更新频率 l - 关闭或开启第一部分第一行 top 信息的表示 t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示 N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述) P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述) M - 以内存占用率大小的顺序排列进程列表 (第三部分后述) h - 显示帮助 n - 设置在进程列表所显示进程的数量 q - 退出 top s - 改变画面更新周期 第三部分 -- 最下部分的进程列表栏: 以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式Linux下内存查看命令free详解:
在Linux下查看内存我们一般用free命令: $ free total used free shared buffers cached Mem: 3266180 3250004 16176 0 110652 2668236 -/+ buffers/cache: 471116 2795064 Swap: 2048276 80160 1968116 下面是对内存查看free命令输出内容的解释: total:总计物理内存的大小。 used:已使用多大。 free:可用有多少。 Shared:多个进程共享的内存总额。 Buffers/cached:磁盘缓存的大小。 第三行(-/+ buffers/cached): used:已使用多大。 free:可用有多少。 第四行就不多解释了。 -/+ buffers/cache含义与区别: 第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别在于使用的角度来看: 第二行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached. 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。 所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。 如上例: 2795064=16176+110652+2668236 内存如何进行交换 接下来解释什么时候内存会被交换,以及按什么方交换。当可用内存少于额定值的时候,就会开会进行交换。如何看额定值: cat /proc/meminfo 输出为: $ cat /proc/meminfo MemTotal: 3266180 kB MemFree: 17456 kB Buffers: 111328 kB Cached: 2664024 kB SwapCached: 0 kB Active: 467236 kB Inactive: 2644928 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 3266180 kB LowFree: 17456 kB SwapTotal: 2048276 kB SwapFree: 1968116 kB Dirty: 8 kB Writeback: 0 kB Mapped: 345360 kB Slab: 112344 kB Committed_AS: 535292 kB PageTables: 2340 kB VmallocTotal: 536870911 kB VmallocUsed: 272696 kB VmallocChunk: 536598175 kB HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB 用free -m查看的结果: [root@scs-2 tmp]# free -m total used free shared buffers cached Mem: 3189 3173 16 0 107 2605 -/+ buffers/cache: 460 2729 Swap: 2000 78 1921 查看/proc/kcore文件的大小(内存镜像): $ ll -h /proc/kcore -r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore 备注: 占用内存的测量 测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。 /proc/meminfo 机器的内存使用信息 /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。 /proc/pid/statm 进程所占用的内存 $ cat /proc/self/statm 654 57 44 0 0 334 0 输出解释 CPU 以及CPU0……的每行的每个参数意思(以第一行为例)为: 参数解释 /proc/status Size (pages) 任务虚拟地址空间的大小 VmSize/4 Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4 Shared(pages) 共享页数 0 Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4 Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4 Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4 dt(pages) 04 查看机器可用内存 /proc/28248/>free total used free shared buffers cached Mem: 1023788 926400 97388 0 134668 503688 -/+ buffers/cache: 288044 735744 Swap: 1959920 89608 1870312 Linux查看内存及内存使用小结: 我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。Linux下,一个运行中的程序,究竟占用了多少内存
1. 在linux下,查看一个运行中的程序,占用了多少内存,一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列表示,程序占用了多少虚拟内存。 RSS列表示,程序占用了多少物理内存。虚拟内存可以不用考虑,它并不占用实际物理内存。 (2). top 命令也可以其中 VIRT(或VSS)列表示,程序占用了多少虚拟内存。同 ps aux 中的 VSZ列 RES列表示,程序占用了多少物理内存。同 ps aux 中的RSS列 2.在linux下,查看当前系统占用了多少内存,一般的命令是 free其中, free就是系统还有多少内存可以使用。但由于 linux 系统对内存使用有一个原则,就是,内存是宝贵的,能使用多少就使用多少。所以, linux会把已经调用过的包缓存起来,放在内存里。这样,实际上,可以使用的内存,就可以理解为, free+buffers+cached 3.当你了解完这些命令以后,再去使用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值,并不能真实反映物理内存的使用情况。 4. 如果查看更详细的内存使用情况,可用以下几种方法,或者几种方法结合使用:这几种方法,都需要root账户的权限 (1). pmap -d $pid $pid 是正在运行的程序的pid (2). cat /proc/$pid/smaps smaps的数据比较详细,可简单的归纳一下,归纳的命令如下: cat /proc/$pid/smaps | awk '/Size|Rss|Pss|Shared|Private|Referenced|Swap/{val_name=gensub(/([a-zA-Z_]*).*/,"\\1",1,$1); list[val_name]+=$2; }END{for(val in list)print val,list[val];}' (3). cat /proc/$pid/maps (4). cat /proc/$pid/statm输出解释第一列 size:任务虚拟地址空间大小第二列 Resident:正在使用的物理内存大小
第三列 Shared:共享页数
第四列 Trs:程序所拥有的可执行虚拟内存大小
第五列 Lrs:被映像倒任务的虚拟内存空间的库的大小
第六列 Drs:程序数据段和用户态的栈的大小
第七列 dt:脏页数量(5). vmstat这个命令据说也可以提供一些参考信息,具体还未研究 5.作为phper,尝试过使用php的函数memory_get_usage(),该函数也不能得到php当前运行的程序,实际的,真正占用的内存数量。如果真想得到,php真正占用的内存,大概只能在, 程序运行的开始,执行一次memory_get_usage().在程序运行结束,执行一次memory_get_usage()。将两者的值相减,得到的值,应该是一个相对比较准确的,内存占用数量了。这个方法还没有测试,考虑到,得到这个数量,也没有实际意义,加上平时又比较忙,懒得试了。 也许php还有一个方法,是使用shm_* 系列函数,这也我也未深入研究,详见这篇文章(http://duckweeds.blog.sohu.com/166663796.html) 6.另外还有一些文章可以参考,如下: (1)一个C程序员,眼中的Linux内存使用详解,写的比较详细,比较细致,也比较专业。 (2)对/proc/pid/statm的详细说明 (3)简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析 (4)php 共享内存的使用 (5)Memory Usage with smaps (6)Capturing Process Memory Usage Under Linux,这篇文章似乎是对一个产品的广告,但里面对USS,PSS,RSS 这几个概念有详细的解释 (7)ELC: How much memory are applications really using,跟(6)一样,是对同一个产品的广告,文章里有一些东西可以参考(8) Linux Check Memory Usage,文章对 free, vmstat,top ,gnome-system-monitor等命令有一些介绍(9)Console Monitoring Tools for SUSE Linux,对top,free,uptime,pmap,smartctl,iostat,strace等命令有所介绍,并且介绍的比较详细,目前只是粗略的看了一下,有时间还要再看看。(10)Solaris 9 Enhanced pmap,比较详细的介绍了pmap的应用,不过是基于Solaris 9的
相关文章推荐
- 手动10 -Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况结果分析
- Linux查看CPU和内存使用情况
- LINUX下查看CPU和内存的使用情况
- LINUX查看CPU内存使用情况
- Linux查看CPU和内存使用情况 【转】
- Linux查看CPU和内存使用情况
- 【linux】查看内存和CPU使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况详解
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况