Linux进程的内存使用解析

作者&投稿:闳米 (若有异议请与网页底部的电邮联系)
~   进程XXX占用了多少内存?这是个经常被问到,也经常被答错的问题。linux进程的内存分配是个比较复杂的话题,而linux上的工具往往把这个问题过分简单化,因此引出不少误解和困惑。首先把ps,
top这类工具扔掉,然后看这么一个简单程序:  [root@pczou
pczou]#
cat
./prog.c  #i
nclude  #i
nclude  #i
nclude  #i
nclude  #define
ONEM
(1024*1024)
www.zhishiwu.com
  int
func()  {  char
s[16*ONEM];  char*
p;  p
=
malloc(32*ONEM);  pause();  return
0;  }  int
main()  {  printf(pid:
%d/n,
getpid());  func();  return
0;  }  其中func()这个函数分配了32MB的内存,以及16MB的堆栈。  运行一下这个prog程序,prog会停在pause()的位置,看看ps怎么说:  USER
PID
%CPU
%MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMAND  root
4238
0.0
0.0
52396
352
pts/0
S
21:29
0:00
./prog  VSZ指的是进程内存空间的大小,这里是52396KB;  RSS指的是驻留物理内存中的内存大小,这里是352KB。  一般系统管理员知道VSZ并不代表进程真正用到的内存,因为有些空间会仅在页表中挂个名,也就是说只是虚拟存在着,只有真正用到的时候内核才会把虚拟页面和真正的物理页面映射起来。比如,prog.c中用malloc()分配的32MB内存,由于程序中并没有用到这些内存,没有物理内存被分配,也就不应算到进程的帐上。
www.zhishiwu.com
  进程的内存使用情况比较复杂,这是因为:  进程所申请的内存不一定真正会被用到  真正用到了的内存也不一定是只有该进程自己在用
(比如动态共享库)  所以酒足饭饱结帐的时候,饭馆打出的帐单中往往漏洞百出,不是计入了没上的菜,就是一个菜算了两份钱。而ps给出的就是这样的糊涂帐单,不足为凭。  算清楚帐的唯一办法是把每个菜都仔细过一遍,看看有没有上,有没有重复。下面的帐单要清楚多了:  Virtual
memory
:
52396
KB  Effective
VM
:
52120
KB  Mapped
:
352
KB  Effective
mapped:
76.6
KB  Sole
use
:
72
KB  Per
file
memory
use  ld-2.3.4.so
:
VM
94208
B,
M
90112
B,
S
8192
B  prog
:
VM
8192
B,
M
8192
B,
S
8192
B  libc-2.3.4.so
:
VM
1180
KB,
M
221184
B,
S
16384
B  可以看出,虽然虚拟地址空间是52396KB,实际映射(a.k.a.
分配)的空间是352KB,这和ps给出的结果一致。再看Effective
Mapped这个值,仅为76.6
KB。这个值的计算方法是:  有效的实际使用内存
=
该进程独占的内存
+
共享的内存A
/共享A的进程数目
+
共享的内存B
/共享B的进程数目
+
...  比如对于一个kde应用程序kontact,它用的Qt库的虚拟地址空间为
7M,而实际映射的空间有4.5M,也就是说真正给
Qt分配物理内存大小为4.5M。假设有10个KDE应用正在运行,那么记到kontact帐上的就不应该是4.5M,而是A-A之后的0.45M。这么算帐虽然并不十分准确,但Effective
Mapped已经足以说明进程所占用内存的实际大小了。
www.zhishiwu.com
  OK,最后用这个方法给系统中所有进程都结下帐:  从上面的统计结果可以看出:  虽然firefox的占用虚拟空间是最大的,但其实际占用的内存却比X
Server要少。  firefox
的实际占用的内存和其RSS
(a.k.a.
mapped)差别不大,占RSS的99%;而kontact的实际占用内存却仅占RSS的63%,有27%的内存是共享的。由此可以粗略看出我用的窗口管理器是KDE而非Gnome,why?
因为Qt之类的共享库被很多KDE进程分担了。  sole值可以理解为private
mapped,也就是这个进程退出后可能被释放的内存
(对于非匿名的映射页面可能还会存留一段时间)。作者
railon


linux查看进程占用的内存
1、打开linux系统,在linux的桌面的空白处右击。2、在弹出的下拉选项里,点击打开终端。3、在终端窗口中输入df-lh即可查看磁盘剩余空间。

Linux进程内存管理?
对于包含MMU的处理器而言,Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。在Linux系统中,进程的4GB内存空间被分为两个部分——用户空间与内核空间。用户空间的地址一般分布为0~3GB(即PAGE_OFFSET,在Ox86中它等于OxC0000000),这样,剩下的3~4GB为内核空间,用户进程通常只能访问...

浅谈Linux下查看某一进程占用的内存
在Linux系统中,分析进程占用内存的大小是编程开发过程中常见的需求。通常,我们可以借助top命令来获取进程占用的内存情况,其中包括VIRT、RES和SHR三个重要指标。VIRT表示进程虚拟内存空间的大小,RES是指已映射到物理内存的虚拟内存部分,而SHR表示进程占用的共享内存大小。了解这些概念有助于我们深入理解进程...

打工人杂记(一)Linux 如何查看进程内存占用情况?
在Linux系统中,要查看某个进程的内存占用情况,我们可以先通过ps命令找到该进程的ID。例如,使用命令“ps -ef | grep sender_main_test_strategy_newhot.py”可以看到,该进程对应的ID为30501。接下来,使用top命令并指定进程ID来查看其内存占用,命令为“top -p 30501”。在这里,RES的值代表了进程...

深入探究Linux进程的内存占用情况原理与实践linux进程内存占用
Linux进程在内存中的占用分为三大类:物理内存占用(驻留内存)、虚拟内存、伙伴系统。物理内存占用是指进程发起IO请求所走的实际内存,其占用的物理内存是系统可以直接利用的内存空间。虚拟内存是一种抽象化的过程内存空间(即逻辑地址空间),进程具有独立的虚拟空间,其可以不受物理内存的限制,每个进程的...

Linux操作系统的进程管理、调度和内存空间详解
Linux的核心功能深入到进程和线程管理,系统调用是关键接口,进程独立且可创建子进程(如通过fork)。进程间通信(IPC)通过多种机制如信号处理(包括SIGSTOP和SIGKILL)进行。内存空间按权限划分,`exec`系统调用用于替换进程映像,`exit`用于进程终止,`task_struct`是进程描述符,包含了调度参数和内存信息...

Linux进程内存用量分析之堆内存篇
深入Linux进程内存分析,我们聚焦于堆内存的管理与监控,特别是ptmalloc的内核。Esearch采用的glibc ptmalloc内存策略,其内存分配与回收机制灵活而高效。在内存管理的探索中,我们找到了关键的工具——core_analyzer,它由Michael Yan开发,针对glibc 2.3-223版本的ptmalloc提供了深度剖析功能。在core_analyzer...

查看linux进程内存占用查看linux进程内存
top命令可以查看系统内存,使用total可以查看物理内存大小。查看linux的内存使用情况?方法一:ps命令可以显示各个进程的内存使用情况、以及更详细的物理内存使用情况和虚拟内存使用情况。你可以使用“_sort”选项对进程进行排序,例如按RSS进行排序:用法示例:$psaux--sort-rss 方法二:top命令显示了每个进程...

linux怎么看进程占用的物理内存
(1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:top -u oracle 内容解释:PID:进程的ID USER...

Linux进程内存如何管理
1、 用户进程可以直接操作内核对应的内存,破坏内核运行。2、 用户进程也会破坏其他进程的运行 CPU中寄存器中存储的是逻辑地址,需要进行映射才能转化为对应的物理地址,然后获取对应的内存。通过引入逻辑地址,每个进程都拥有单独的逻辑地址范围。当进程申请内存的时候,会为其分配逻辑地址和物理地址,并将...

米东区15269549574: linux怎么看进程占用的物理内存 -
瞿初舍雷: 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)toptop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占...

米东区15269549574: Linux 怎么查看应用程序内存使用情况 -
瞿初舍雷: 输入:top PID:进程的IDUSER:进程所有 PR:进程的优先级别,越小越优先被执 NInice: VIRT:进程占用的虚拟内 RES:进程占用的物理内 SHR:进程使用的共享内 S:进程的状态.S表示休眠,R表示正在运行,Z表示僵死状态,N表示 该进程优先值为负 %CPU:进程占用CPU的使用 %MEM:进程使用的物理内存和总内存的百分 TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加 值 COMMAND:进程启动命令名称

米东区15269549574: linux 怎么查看内存使用情况 -
瞿初舍雷: 下面是一个可供选择的,但并不全面的图形或命令行工具列表,这些工具用来检查Linux平台中已用和可用的内存.1. /proc/meminfo 一种最简单的方法是通过“/proc/meminfo”来检查内存使用状况.这个动态更新的虚拟文件事实上是诸如free,...

米东区15269549574: Linux如何查看内存使用状况 -
瞿初舍雷: 1. 简单的方法是通过“/proc/meminfo”来检查内存使用状况.这个动态更新的虚拟文件事实上是诸如free,top和ps这些与内存相关的工具的信息来源. 2. 从可用/闲置物理内存数量到等待被写入缓存的数量或者已写回磁盘的数量,只要是你想要的关于内存使用的信息,“/proc/meminfo”应有尽有.特定进程的内存信息也可以通过“/proc//statm”和“/proc//status”来获取.

米东区15269549574: linux中怎么查看程序占用内存大小 -
瞿初舍雷: 你好,方法如下: 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源...

米东区15269549574: linux怎么看进程的资源使用 -
瞿初舍雷: linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|h...

米东区15269549574: 我想监视linux系统的内存使用情况,在linux下有哪些视图或者命令行工具可用 -
瞿初舍雷: 这方面的指令太多了,大体上整理一下12个吧.1. /proc/meminfo查看RAM使用情况最简单的方法是通过 /proc/meminfo.这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示./proc/meminfo列出了所有...

米东区15269549574: 如何用linux命令查询内存使用情况 -
瞿初舍雷: 直接用top命令看,能看到total,free,used,buffer四个,传统意义上来说,你算真正还能用的内存剩余,要看free+buffer,buffer吃掉的内存在本身内存不够用的时候会自动释放,因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache...

米东区15269549574: linux用什么命令可以查看内存使用的情况详细信息 -
瞿初舍雷: 1)查看RAM使用情况最简单的方法是通过 /proc/meminfo.这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free/ps/top)等的组合显示./proc/meminfo列出了所有你想了解的内存的使用情况. $ cat /proc/meminfo 2)free命令是一个快速查看...

米东区15269549574: linux怎么看哪个进程占用多少内存 -
瞿初舍雷: 使用top命令可以看到各个进程的详细信息,其中也包括了内存的使用百分比.PID:进程ID号 USER:进程的所有者 PR:优先级 NI:优先级(负值表示优先级更高) VIRT:虚拟内存使用量 RES:物理内存使用量 SHR:共享内存大小 S:进程状态(上文中有提到) %CPU:运算器的使用百分比 %MEM:内存的使用百分比 TIME+:使用CPU的时间(单位是1/100秒) COMMAND:命令名称初学者的话推荐看看“Linux就该这么学”这本书

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网