这个问题本质上是想查看一下面试者对于Linux常用命令以及操作系统内存模型的认识情况。如果面试者能答上来一些常用的命令譬如:

说明基本了解了linux的常用命令,但这些命令的输出里面都包含各种参数细节。譬如Top里面RES的含义,如下

又譬如常用ps命令里面。vsz、rss分别代表啥意思?

ps -o pid,user,vsz,rss,comm,args

这里涉及到Linux操作系统的内存模型和地址映射,每个用户态进程都只能看到操作系统分配虚拟内存空间,从而完成进程的内存隔离,操作系统负责将进程看到虚拟地址映射到真实的物理地址。每个进程的虚拟空间又可以细分出堆、栈、代码段和数据段以及mmap映射段。

linux查看内存占用前10_linux查看进程占用cpu_linux查看端口占用

这些虚拟内存并不是进程创建的时候就直接分配的,而是操作系统懒加载linux查看内存占用前10,用的时候通过缺页异常临时分配的。这里最重要的有两个概念RSS和VSZ,其中RSS是常驻内存,代表真实分配的物理页,包括了堆、栈以及共享库,但不包括swap。而VSZ代表分配的虚拟页,只要是向操作系统申请的空间都算,即便被swap出去的也算。

举个例子:一个进程本身的二进制有500K,加载内存400K,链接共享库2500K,但加载了1000K, 堆+栈分配了200K,但真实使用了100K。那么它的计算方式如下:

RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K

可以看到RSS代表真实使用的linux查看内存占用前10,而VSZ代表分配的。这里还有个小坑,如果面试官问你所有进程的RSS求和,是不是代表所有进程内存使用总和,答案是否定的,原因就是共享库,它是可以在多个进程之间共享的,共享库只会加载一次。

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: wxii2p22