【Linux经典面试题(如何查看一个进程的内存占用)】沉舟侧畔千帆进,病树前头万木春。这篇文章主要讲述Linux经典面试题:如何查看一个进程的内存占用相关的知识,希望能为你提供帮助。
这个问题本质上是想查看一下面试者对于Linux常用命令以及操作系统内存模型的认识情况。如果面试者能答上来一些常用的命令譬如:
- top
- pidstat
- ps
- pmap
- /proc/$PROC/statm
文章图片
又譬如常用ps命令里面。vsz、rss分别代表啥意思?
ps -o pid,user,vsz,rss,comm,args
这里涉及到Linux操作系统的内存模型和地址映射,每个用户态进程都只能看到操作系统分配的虚拟内存空间,从而完成进程的内存隔离,操作系统负责将进程看到虚拟地址映射到真实的物理地址。每个进程的虚拟空间又可以细分出堆、栈、代码段和数据段以及mmap映射段。
文章图片
这些虚拟内存并不是进程创建的时候就直接分配的,而是操作系统懒加载的,用的时候通过缺页异常临时分配的。这里最重要的有两个概念RSS和VSZ,其中RSS是常驻内存,代表真实分配的物理页,包括了堆、栈以及共享库,但不包括swap。而VSZ代表分配的虚拟页,只要是向操作系统申请的空间都算,即便被swap出去的也算。
举个例子:一个进程本身的二进制有500K,加载内存400K,链接共享库2500K,但加载了1000K, 堆+栈分配了200K,但真实使用了100K。那么它的计算方式如下:
RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K
可以看到RSS代表真实使用的,而VSZ代表分配的。这里还有个小坑,如果面试官问你所有进程的RSS求和,是不是代表所有进程内存使用总和,答案是否定的,原因就是共享库,它是可以在多个进程之间共享的,共享库只会加载一次。
推荐阅读
- Linux下查看占用CPU与内存最高的进程
- TCP为什么需要三次握手(用最通俗的话解释给你听)
- Linux|Mmap的实现原理和应用
- 剑指offer-11-数值的整数次方
- 如何访问子主题模板页面()
- 如何更改WordPress主题的所有按钮,图标和其他元素颜色()
- 如何在WooCommerce中更改”添加到购物车”()
- 如何仅在台式机/笔记本电脑的Rehub主题中居中主菜单()
- 如何从自定义页面模板调用WordPress插件函数()