当前位置:首页 » 操作系统 » 进程大小linux

进程大小linux

发布时间: 2022-05-19 10:25:47

linux 怎么查进程占用内存大小

root@localhost:~# top -bn 1 |grep nginx
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11749 root 20 0 86008 1632 300 S 0.0 0.0 0:00.00 nginx
11750 root 20 0 86984 2932 1052 S 0.0 0.0 2:33.99 nginx
11751 root 20 0 86680 2932 1048 S 0.0 0.0 2:36.48 nginx
11753 root 20 0 86960 2932 1052 S 0.0 0.0 2:31.39 nginx
11754 root 20 0 86680 2932 1044 S 0.0 0.0 2:41.62 nginx
root@localhost:~#
root@localhost:~# top
top - 15:00:52 up 44 days, 5:53, 3 users, load average: 0.46, 0.67, 0.72
Tasks: 221 total, 1 running, 220 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.9 us, 3.4 sy, 0.1 ni, 88.0 id, 0.6 wa, 0.1 hi, 0.0 si, 0.0 st
KiB Mem: 24590068 total, 23478864 used, 1111204 free, 779016 buffers
KiB Swap: 15625212 total, 1400 used, 15623812 free. 18608024 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

㈡ Linux每个进程的HEAP SIZE限制是多少

网上看到的分析:
32位意味着4G的寻址空间,Linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3G。当然,实际的空间大小收到物理存储器大小的限制。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。

可是经自己测试:
堆区最多开2G - 1大小空间
栈区能开1G多,当接近2G就会报错

[html] view plain print?
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
const long long MAXN = 1073741824;//2^30即1G
using namespace std;

char s[MAXN * 2 - 1];//开2G内存,多1个都会编译错误(提示:整数溢出之类的错误)
int main()
{
char t[MAXN + 1000];//之内开1G多的空间,2G会编译不通过
memset(t, 0, sizeof(t));
memset(s, 0, sizeof(s));
return 0;
}

㈢ 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

㈣ 精确度量Linux下进程占用多少内存的方法

ps aux:
其中
RSS列:"Resident Set Size", 实际驻留"在内存中"的内存数. 不包括已经交换出去的代码. 举一个例子: 如果你有一个程序使用了100K内存, 操作系统交换出40K内存, 那么RSS为60K. RSS还包括了与其它进程共享的内存区域. 这些区域通常用于libc库等.

VSZ(或VSS)列:“Virtual Set Size” 一个进程占用的总的地址空间大小. 它包括了没有映射到内存中的页面。

如果查看更详细的内存使用情况, 可用以下几种方法, 或者几种方法结合使用,都需要root权限
(1). pmap -d $pid

$pid 是正在运行的程序的pid

2). cat /proc/$pid/smaps

smaps的数据比较详细,可简单的归纳一下,归纳的命令如下:
cat /proc/$pid/smaps | awk '/Size|Rss|Pss|Shared|Private|Referenced|Swap/{val_name=gensub(/([a-zA-Z_]*).*/,"\\1",1,$1); list[val_name]+=$2; }END{for(val in list)print val,list[val];}'
(3). cat /proc/$pid/maps

(4). cat /proc/$pid/statm
输出解释
第一列 size:任务虚拟地址空间大小
第二列 Resident:正在使用的物理内存大小
第三列 Shared:共享页数
第四列 Trs:程序所拥有的可执行虚拟内存大小
第五列 Lrs:被映像倒任务的虚拟内存空间的库的大小
第六列 Drs:程序数据段和用户态的栈的大小
第七列 dt:脏页数量

㈤ linux 下怎么查看一个进程占用内存大小

这里介绍下查看一个进程占用内存大小的方法。

1、首先单击桌面左上角的应用程序,选择系统工具选项,如下图所示。

㈥ 在linux怎么限制一个进程运行内存大小

我不知道如何查看。但记得Linux(32位)中每个进程独享4GB的进程空间,需要注意的是这4G指的是虚拟内存,而非物理内存。可以查阅一下Linux虚拟内存机制相关资料。
要定制的话难度大啊!内核文件里用进程描述符(thread_info)表示一个进程,它是一个结构体,里面有个关于进程内存分配的字段(addr_limit)。具体自己研究研究吧!
如果只是对某个进程分配空间的话就简单多了。假如你要为当前进程设置2M的内存上限,可以通过current->addr_limit=2048实现。

㈦ Linux进程内存如何管理

Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。在Linux系统中,进程的4GB内存空间被分为两个部分——用户空间与内核空间。用户空间的地址一般分布为0~3GB(即PAGE_OFFSET,在Ox86中它等于OxC0000000),这样,剩下的3~4GB为内核空间,用户进程通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才可以访问到内核空间。每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的,内核的虚拟空间独立于其他程序。Linux中1GB的内核地址空间又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区这几个区域。对于x86系统而言,一般情况下,物理内存映射区最大长度为896MB,系统的物理内存被顺序映射在内核空间的这个区域中。当系统物理内存大于896MB时,超过物理内存映射区的那部分内存称为高端内存(而未超过物理内存映射区的内存通常被称为常规内存),内核在存取高端内存时必须将它们映射到高端页面映射区。Linux保留内核空间最顶部FIXADDR_TOP~4GB的区域作为保留区。当系统物理内存超过4GB时,必须使用CPU的扩展分页(PAE)模式所提供的64位页目录项才能存取到4GB以上的物理内存,这需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以后的CPU允许内存最大可配置到64GB,它们具备36位物理地址空间寻址能力。由此可见,对于32位的x86而言,在3~4GB之间的内核空间中,从低地址到高地址依次为:物理内存映射区隔离带vmalloc虚拟内存分配器区隔离带高端内存映射区专用页面映射区保留区。

㈧ 如何按占用内存大小查看Linux下的进程

那么如何按占用内存大小查看Linux下的进程呢?

ps

常用参数

-A 所有进程均显示出来
-a 不与terminal有关的所有进程
-u 有效使用者相关的进程
-x 通常与a一起用,可列出较完整信息

按内存大小排序

ps -aux默认是按PID从小到大显示的,若想按占用内存大小排序则需要借助另外sort命令针对第4列(内存所在列)排序:

ps -aux | sort -k4rn

如果我们只想看前n个进程, 还可以借助head命令,比如查看前10个占用内存最大的进程:

ps -aux | sort -k4rn | head -n 10

我们还可以借助awk来指定显示哪几列信息:

ps -aux |awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

注意:我们先用awk指定了要显示的列, 这时sort的参数也要变化了.

top

常用参数

-d: 后面加数字指定数据刷新的频率, 预设是5秒
-p: 指定某些个pid进行观察

top执行过程中可使用的按键命令

?: 显示top中可以输入的按键命令
P: 以cpu使用率排序显示

M: 以内存使用率排序显示

N: 以PID排序显示

㈨ linux如何查看每个进程使用内存大小

我不知道如何查看。但记得linux(32位)中每个进程独享4gb的进程空间,需要注意的是这4g指的是虚拟内存,而非物理内存。可以查阅一下linux虚拟内存机制相关资料。
要定制的话难度大啊!内核文件里用进程描述符(thread_info)表示一个进程,它是一个结构体,里面有个关于进程内存分配的字段(addr_limit)。具体自己研究研究吧!
如果只是对某个进程分配空间的话就简单多了。假如你要为当前进程设置2m的内存上限,可以通过current->addr_limit=2048实现。

㈩ linux正常进程数是多少.

不同发行版是不同的,而且同一发行版的不同安装(工作站、服务器、自定义等)默认启动的进程数也是不同的。

linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX
这个限制可以在 /usr/include/bits/local_lim.h 中查看
对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源。
这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M。
可以写一段简单的代码验证最多可以创建多少个线程。

试验显示,在 linuxthreads 上最多可以创建 381 个线程,之后就会返回 EAGAIN
在 nptl 上最多可以创建 382 个线程,之后就会返回 ENOMEM
这个值和理论完全相符,因为 32 位 linux 下的进程用户空间是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,但是实际上代码段和数据段等还要占用一些空间,这个值应该向下取整到 383,再减去主线程,得到 382。
那为什么 linuxthreads 上还要少一个线程呢?这可太对了,因为 linuxthreads 还需要一个管理线程。
为了突破内存的限制,可以有两种方法:
1) 用 ulimit -s 1024 减小默认的栈大小
2) 调用 pthread_create 的时候用 pthread_attr_getstacksize 设置一个较小的栈大小
要注意的是,即使这样的也无法突破 1024 个线程的硬限制,除非重新编译 C 库<=此处值得讨论,我在ubuntu 7.04+3G内存上用ulimit -s 1024,则可以得到3054个线程。

热点内容
pythonnumexpr 发布:2025-01-13 19:34:56 浏览:489
linuxpython版本查看 发布:2025-01-13 19:18:37 浏览:741
宝马三系的哪个配置走量 发布:2025-01-13 19:12:14 浏览:695
局域网如何访问服务器 发布:2025-01-13 18:56:24 浏览:189
javaarraylist访问 发布:2025-01-13 18:56:10 浏览:671
如何确定胶体是否配置成功 发布:2025-01-13 18:46:07 浏览:73
fgo缓存多大 发布:2025-01-13 18:42:13 浏览:972
能缓解压力的水果 发布:2025-01-13 18:15:36 浏览:391
怎么把文件压缩成文件 发布:2025-01-13 18:15:33 浏览:610
压缩机配件网 发布:2025-01-13 18:15:00 浏览:48