linux查看进程_linux查看进程占用内存情况


此问题主要考察面试者对Linux操作系统中常用命令及其在内存管理方面的理解程度。若面试者能掌握如下的常用命令,则表明其已初步了解Linux的命令体系:

  • top
  • pidstat
  • ps
  • pmap
  • /proc/$$/statm

以上这些命令背后蕴丰富的信息细节,例如“top”命令中的RES参数含义。以“RES”为例,其代表着一种重要的系统资源利用情况。

同样地,对于常用的“ps”命令,你是否了解其中的vsz(虚拟大小)和rss(真实大小)所代表的具体含义呢?这些问题将考验面试者对Linux操作系统内存模型和地址映射的理解。

在Linux操作系统中,每个用户态进程都只能观察到系统为其分配的虚拟内存空间,以此来保证进程间的内存隔离。而操作系统的职责则是将这些虚拟地址映实际的物理地址上。每个进程的虚拟空间都被细致地划分为堆、栈、代码段、数据段以及mmap映射段等区域。

值得注意的是,这些虚拟内存并不会在进程创建之初就被直接分配,而是在实际使用时通过缺页异常机制进行临时分配。这其中涉及到两个关键概念:RSS(常驻内存)和VSZ(分配的虚拟内存)。RSS表示真实分配的物理页数,它包括了堆、栈以及共享库的占用,但不计入swap空间的使用。而VSZ则代表分配的虚拟页数,无论是向系统申请的空间还是已经被swap到磁盘的空间都会计入其中。

举个具体例子来进一步说明:当一个进程加载自身的二进制文件、链接共享库并分配堆栈空间时,其内存使用情况将如何计算。通过这个例子,我们可以更清晰地理解RSS与VSZ的区别与联系。

当面试官询问所有进程的RSS值相加是否等于系统总内存使用时,答案往往是否定的。因为共享库等资源可以在多个进程间共享,只会被加载一次,并不会在每个进程的RSS值中重复计算。