这个问题本质上是想查看一下面试者对于Linux常用命令以及操作系统内存模型的认识情况。如果面试者能答上来一些常用的命令譬如:
说明基本了解了linux的常用命令,但这些命令的输出里面都包含各种参数细节。譬如Top里面RES的含义,如下
又譬如常用ps命令里面。vsz、rss分别代表啥意思?
ps -o pid,user,vsz,rss,comm,args
这里涉及到Linux操作系统的内存模型和地址映射,每个用户态进程都只能看到操作系统分配的虚拟内存空间,从而完成进程的内存隔离,操作系统负责将进程看到虚拟地址映射到真实的物理地址。每个进程的虚拟空间又可以细分出堆、栈、代码段和数据段以及mmap映射段。
这些虚拟内存并不是进程创建的时候就直接分配的,而是操作系统懒加载的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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。