来谈谈:Linux的历程利用内存剖析
初学阶段只要把上课时候学习过的命令练熟就可以了.单靠学习各种命令而成为高手是不可能的。历程XXX占用了几内存?这是个常常被问到,也常常被答错的成绩。Linux历程的内存分派是个对照庞大的话题,而Linux上的工具常常把这个成绩太过复杂化,因而引出很多曲解和狐疑。起首把ps,top这类工具抛弃,然后看这么一个复杂程序: #cat./prog.c
#include<stdio.h>
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#defineONEM(1024*1024)
intfunc()
{
chars;
char*p;
p=malloc(32*ONEM);
pause();
return0;
}
intmain()
{
printf("pid:%d
",getpid());
func();
return0;
}
个中func()这个函数分派了32MB的内存,和16MB的仓库。
运转一下这个prog程序,prog会停在pause()的地位,看看ps怎样说:
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root42380.00.052396352pts/0S21:290:00./prog
VSZ指的是历程内存空间的巨细,这里是52396KB;
RSS指的是驻留物理内存中的内存巨细,这里是352KB。
一样平常体系办理员晓得VSZ其实不代表历程真正用到的内存,由于有些空间会仅在页表中挂个名,也就是说只是假造存在着,只要真正用到的时分内核才会把假造页面和真实的物理页面映照起来。好比,prog.c顶用malloc()分派的32MB内存,因为程序中并没有效到这些内存,没有物理内存被分派,也就不该算到历程的帐上。
历程的内存利用情形对照庞大,这是由于:
历程所请求的内存纷歧定真正会被用到
真正用到了的内存也纷歧定是只要该历程本人在用(好比静态共享库)
以是酒足饭饱结帐的时分,饭店打出的帐单中常常毛病百出,不是计进了没上的菜,就是一个菜算了两份钱。而ps给出的就是如许的“懵懂”帐单,不足为据。
算分明帐的独一举措是把每一个菜都细心过一遍,看看有无上,有无反复。上面的帐单要分明多了:
Virtualmemory:52396KB
EffectiveVM:52120KB
Mapped:352KB
Effectivemapped:76.6KB
Soleuse:72KB
Perfilememoryuse
ld-2.3.4.so:VM94208B,M90112B,S8192B
prog:VM8192B,M8192B,S8192B
libc-2.3.4.so:VM1180KB,M221184B,S16384B
能够看出,固然假造地点空间是52396KB,实践映照(a.k.a.分派)的空间是352KB,这和ps给出的了局分歧。再看"EffectiveMapped"这个值,仅为76.6KB。这个值的盘算办法是:
无效的实践利用内存=该历程独有的内存+共享的内存A/共享A的历程数量+共享的内存B/共享B的历程数量+...
好比关于一个kde使用程序kontact,它用的Qt库的假造地点空间为7M,而实践映照的空间有4.5M,也就是说真正给Qt分派物理内存巨细为4.5M。假定有10个KDE使用正在运转,那末记到kontact帐上的就不该该是4.5M,而是A-A以后的0.45M。这么清算计帐固然其实不非常正确,但"EffectiveMapped"已足以申明历程所占用内存的实践巨细了。
OK,最初用这个办法给体系中一切历程都“结下帐”:
12下一页
功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。
来谈谈:Linux的历程利用内存剖析
安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh从下面的统计了局能够看出:
固然firefox的占用假造空间是最年夜的,但实在际占用的内存却比XServer要少。
firefox的实践占用的内存和其RSS(a.k.a.mapped)不同不年夜,占RSS的99%;而kontact的实践占用内存却仅占RSS的63%,有27%的内存是共享的。由此能够大略看出我用的窗口办理器是KDE而非Gnome,why?由于Qt之类的共享库被良多KDE历程分管了。
sole值能够了解为"privatemapped",也就是这个历程加入后大概被开释的内存(关于非匿名的映照页面大概还会存留一段工夫)。
</p>上一页12
虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行。 再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。? 查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。 熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种: 对于英语不是很好的读者红旗 Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。 Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。 然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。 未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。
页:
[1]