linux 释放进程res_Linux进程的内存使用情况

本文详细解释了Linux下进程内存使用情况,重点分析了VIRT、RES和SHR的含义。VIRT反映虚拟内存大小,RES表示系统分配的物理内存,包括共享和匿名内存,SHR是与其他进程共享的内存。理解这些概念对于评估服务器能运行多少进程至关重要。pmap命令提供更详细的内存占用信息,而RSS(实际物理内存占用)通常是关注的重点。
摘要由CSDN通过智能技术生成

9d656b235faee008504b79f2aa5a00d4.gif

在linux下,使用top,ps等命令查看进程的内存使用情况时,经常看到VIRT,RES,SHR等,他们都代表什么意思呢?不同的大小对进程有什么影响呢?这篇文章将来聊一聊这个问题。阅读本篇前建议先阅读Linux内存管理,了解一些Linux下内存的基本概念,如什么是anonymous和file backed映射等。

查看进程所使用的内存

在进程的眼里,所有的内存都是虚拟内存,但是这些虚拟内存所对应的物理内存是多少呢?正如我们在Linux内存管理中所介绍的那样,并不是每块虚拟内存都有对应的物理内存,可能对应的数据在磁盘上的一个文件中,或者交换空间上的一块区域里。一个进程真正的物理内存使用情况只有内核知道,我们只能通过内核开放的一些接口来获取这些统计数据。

top

先看看top的输出(top用到的数据来自于/proc/[pid]/statm),这里只是摘录了几条数据:

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 2530 root      20   0       0      0      0 S  0.3  0.0   0:02.69 kworker/0:0
 2714 dev       20   0   41824   3700   3084 R  0.3  0.7   0:00.02 top
 3008 dev       20   0   22464   5124   3356 S  0.0  1.0   0:00.02 bash

VIRT:进程所使用的虚拟内存大小

RES:系统为虚拟内存分配的物理内存大小,包括file backed和anonymous内存,其中anonymous包含了进程自己分配和使用的内存,以及和别的进程通过mmap共享的内存;而file backed的内存就是指加载可执行文件和动态库所占的内存,以及通过private方式调用mmap映射文件所使用的内存(当在内存中修改了这部分数据且没有写回文件,那么这部分内存就变成了anonymous),这部分内存也可能跟别的进程共享。

SHR:RES的一部分,表示和别的进程共享的内存,包括通过mmap共享的内存和file backed的内存。当通过prive方式调用mmap映射一个文件时,如果没有修改文件的内容,那么那部分内容就是SHR的,一旦修改了文件内容且没有写回文件,那么这部分内存就是anonymous且非SHR的。

%MEM:等于RES/total*100%,这里total指总的物理内存大小。

注意:由于SHR可能会被多个进程所共享,所以系统中所有进程的RES加起来可能会超过总的物理内存数量,由于同样的原因,所有进程的%MEM总和可能超过100%。

从上面的分析可以看出,VIRT的参考意义不大,它只能反应出程序的大小,而RES也不能完全的代表一个进程真正占用的内存空间,因为它里面还包含了SHR的部分,比如三个bash进程共享了一个libc动态库,那么libc所占用的内存算谁的呢?三个进程平分吗?如果启动一个bash占用了4M的RES,其中3M是libc占用的,由于三个进程都共享那3M的libc,那么启动3个bash实际占用的内存将是3*(4-3)+3=6M,但是如果单纯的按照RES来算的话,三个进程就用了12M的空间。所以理解RES和SHR这两个数据的含义对我们在评估一台服务器能跑多少个进程时尤其重要,不要一看到apache的进程占用了20M,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值