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

linux 下怎么查看一个进程占用内存大小,第1张

你好,方法如下:

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:

 (1)top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:

$

top

-u

oracle

内容解释:

PID:进程的ID

USER:进程所有者

PR:进程的优先级别,越小越优先被执行

NInice:值

VIRT:进程占用的虚拟内存

RES:进程占用的物理内存

SHR:进程使用的共享内存

S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数

%CPU:进程占用CPU的使用率

%MEM:进程使用的物理内存和总内存的百分比

TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

COMMAND:进程启动命令名称

常用的命令:

P:按%CPU使用率排行

T:按MITE+排行

M:按%MEM排行

(2)pmap

可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:

$

pmap

-d

14596

 (3)ps

如下例所示:

$

ps

-e

-o

'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'

其中rsz是是实际内存

$

ps

-e

-o

'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'

|

grep

oracle

|

sort

-nrk5

其中rsz为实际内存,上例实现按内存排序,由大到小

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

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个线程。

可以直接输入top

然后 按P – 以 CPU 占用率大小的顺序排列进程列表

按M – 以内存占用率大小的顺序排列进程列表

另外,查看某一应用占用内存大小

方法一:通过进程号查看

# 例如查看kafka资源使用情况

# 查看kafka进程号

ps -ef | grep kafka

# 查看进程号占用资源(159156为ps得到的进程号)

top -p 159156

# 或者查看进程的status文件(159156为ps得到的进程号) ,VmRSS对应的值就是物理内存占用

cat /proc/159156/status

方法2:ps命令直接使用任务名

# 显示的第六个参数就是物理内存占用

ps -aux | grep kafka

# 查看内存占用前10名的程序

ps aux | sort -k4,4nr | head -n 10

3)对free -h 查看到的buff/cache 进行回收

# 在系统中除了内存将被耗尽的时候可以清缓存以外,我们还可以使用下面这个文件来人工触发缓存清除的 *** 作

cat /proc/sys/vm/drop_caches

# 这个文件可以设置的值分别为1、2、3。它们所表示的含义为:

# 表示清除 page cache。

echo 1 >/proc/sys/vm/drop_caches

# 表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 page cache。

echo 2 >/proc/sys/vm/drop_caches

# 表示清除 page cache 和 slab 分配器中的缓存对象。

echo 3 >/proc/sys/vm/drop_caches


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7475186.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存