linux进程内存空间
① linux下查看进程内存的方法
现有一个进程id为“11529”,想要查询该进程占用的内存大小。
方法一:cat /proc/11529/status
方法二:pmap -x 11529
方法三:top -n 1 | grep 11529 | awk '{print $5}'
方法四:ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep 11529 | awk '{print $5}'
现有一个进程name为“sensechess-app”,想要查询该进程占用的内存大小。
自开发的的脚本工具 - sysMonitor.zip,可监控系统或者某个进程的CPU、MEM、DISK的使用情况.
示例:
② linux怎么查看每个进程占用的内存
ps
aux
user
pid
%cpu
%mem
vsz
rss
tty
stat
start
time
command
●
user,进程所有者的用户名。
●
pid,进程号,可以唯一标识该进程。
●
%cpu,进程自最近一次刷新以来所占用的cpu时间和总时间的百分比。
●
%mem,进程使用内存的百分比。
●
vsz,进喊谨绝程使用的虚拟内存大小,以k为单位。
●
rss,进程占用的物理内存的总数量,以k为单位。
●
tty,进程相关的终端名。
●
stat,进程状态,用(r--运行或准备郑姿运行;s--睡眠状态;i--空闲;z--冻结;d--不间断睡眠;w-进程没有驻留页;t停止或跟踪晌备。)这些字母来表示。
●
start,进程开始运行时间。
●
time,进程使用的总cpu时间。
●
command,被执行的命令行。
③ 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.shiwu.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
COMMANDroot
4238
0.0
0.0
52396
352
pts/0
S
21:29
0:00
./progVSZ指的是进程内存空间的大小,这里是52396KB;RSS指的是驻留物理内存中的内存大小,这里是352KB。一般系统管理员知道VSZ并不代表进程真正用到的内存,因为有些空间会仅在页表中挂个名,也就是说只是虚拟存在着,只有真正用到的时候内核才会把虚拟页面和真正的物理页面映射起来。比如,prog.c中用malloc()分配的32MB内存,由于程序中并没有用到这些内存,没有物理内存被分配,也就不应算到进程的帐上。
www.shiwu.com
进程的内存使用情况比较复杂,这是因为:进程所申请的内存不一定真正会被用到真正用到了的内存也不一定是只有该进程自己在用
(比如动态共享库)所以酒足饭饱结帐的时候,饭馆打出的帐单中往往漏洞百出,不是计入了没上的菜,就是一个菜算了两份钱。而ps给出的就是这样的糊涂帐单,不足为凭。算清楚帐的唯一办法是把每个菜都仔细过一遍,看看有没有上,有没有重复。下面的帐单要清楚多了:Virtual
memory
:
52396
KBEffective
VM
:
52120
KBMapped
:
352
KBEffective
mapped:
76.6
KBSole
use
:
72
KBPer
file
memory
useld-2.3.4.so
:
VM
94208
B,
M
90112
B,
S
8192
Bprog
:
VM
8192
B,
M
8192
B,
S
8192
Blibc-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.shiwu.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
④ 64位的linux上单个进程可以使用的最大内存数量是多少
对于64位Linux允许多达128个TB单个进程的虚拟地址空间,并且能够解决大约64 TB的物理存储器,但是受处理器和系统的限制。原话:64-bit Linux allows up to 128 TB of virtual address space for indivial processes, and can address approximately 64 TB of physical memory, subject to processor and system limitations.只要你的机器有足够的内存统统可以给你放倒。连银河曙光都能放下你的机器肯定不在话下:)而理论值更高,一个64位的微处理器可寻址存储器16 EB(1TB=1024GB,1PB=1024TB,1EB=1024PB自己换算)。顺便说一下64位的windows企业服务器最大2TB内存。
⑤ Linux进程内存如何管理
内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。
虚拟地址的作用
如果用户进程直接操作物理地址会有以下的坏处:
1、 用户进程可以直接操作内核对应的内存,破坏内核运行。
2、 用户进程也会破坏其他进程的运行
CPU中寄存器中存储的是逻辑地址,需要进行映射才能转化为对应的物理地址,然后获取对应的内存。
通过引入逻辑地址,每个进程都拥有单独的逻辑地址范围。
当进程申请内存的时候,会为其分配逻辑地址和物理地址,并将逻辑地址和物理地址做一个映射。
⑥ linux 下怎么查看一个进程占用内存大小
这里介绍下查看一个进程占用内存大小的方法。
1、首先单击桌面左上角的应用程序,选择系统工具选项,如下图所示。
⑦ linux如何查看每个进程使用内存大小
我不知道如何查看。但记得linux(32位)中每个进程独享4gb的进程空间,需要注意的是这4g指的是虚拟内存,而非物理内存。可以查阅一下linux虚拟内存机制相关资料。
要定制的话难度大啊!内核文件里用进程描述符(thread_info)表示一个进程,它是一个结构体,里面有个关于进程内存分配的字段(addr_limit)。具体自己研究研究吧!
如果只是对某个进程分配空间的话就简单多了。假如你要为当前进程设置2m的内存上限,可以通过current->addr_limit=2048实现。
⑧ linux 怎么查看进程 内存占用
ps
aux
USER
PID
%CPU
%MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMAND
●
USER,进程所有者的用户名。
●
PID,进程号,可以唯一标识该进程。
●
%CPU,进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。
●
%MEM,进程使用内存的百分比。
●
VSZ,进程使用的虚拟内存大小,以K为单位。
●
RSS,进程占用的物理内存的总数量,以K为单位。
●
TTY,进程相关的终端名。
●
STAT,进程状态,用(R--运行或准备运行;S--睡眠状态;I--空闲;Z--冻结;D--不间断睡眠;W-进程没有驻留页;T停止或跟踪。)这些字母来表示。
●
START,进程开始运行时间。
●
TIME,进程使用的总CPU时间。
●
COMMAND,被执行的命令行。