Linux查看进程内存占用的六种方法

 更新时间:2025年06月19日 10:19:25   作者:祥子AI  
CPU和内存是机器性能好坏的关键部件,内存大了就能运行更多的程序,但是程序运行多了就会出现资源消耗竞争的关系,有时候系统出现负载过高的情况下,们如何去判断是那个程序导致的呢?这就可以用上今天分享的几个工具指令了,需要的朋友可以参考下

我这里整理了 6 种方式,应该足够用了吧,不够你可以再补充。

  • top 命令
  • ps 命令
  • smaps
  • pmap 命令
  • smem 命令
  • status

top

首先想到的肯定是 top 命令,直接输入 top 回车即可

输出参数介绍:

  • PID:进程的ID
  • USER:进程所有者
  • VIRT:进程占用的虚拟内存
  • RES:进程占用的物理内存
  • SHR:进程使用的共享内存
  • S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
  • %CPU:进程占用CPU的使用率
  • %MEM:进程使用的物理内存和总内存的百分比
  • TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值

top命令默认是以CPU排序输出的,按字母「****M****」,可以按内存占用大小进行排序显示

显示的有整体内存占用情况和各个进程占用的内存情况。

ps

默认的 ps 不输出内存相关的内容,可以添加要显示的字段

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'
  • -e 显示所有进程
  • -o 定制显示信息
  • pid 进程ID
  • comm 进程名
  • args 启动命令
  • pcpu 占用CPU 百分比
  • rsz 占用物理内存大小
  • vsz 占用虚拟内存大小
  • stime 进程启动时间
  • user 启动用户

RSZ: 954184 表示内存占用

更多操作指令,按内存排序

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -k5nr 

也可以使用 --sort -rsz 按 rsz 排序,效果一样

smaps

smaps 也是进程的一个属性,可以通过 cat smaps 获得

cat /proc/7576/smaps | grep Rss | awk '{sum +=$2} END{print sum}' 

需要将他们进行加起来

pmap

使用 pmap 也可以查看进程的详细内存占用情况

pmap -h
 
Usage:
 pmap [options] PID [PID ...]
 
Options:
 -x, --extended              show details
 -X                          show even more details
            WARNING: format changes according to /proc/PID/smaps
 -XX                         show everything the kernel provides
 -c, --read-rc               read the default rc
 -C, --read-rc-from=<file>   read the rc from file
 -n, --create-rc             create new default rc
 -N, --create-rc-to=<file>   create new rc to file
            NOTE: pid arguments are not allowed with -n, -N
 -d, --device                show the device format
 -q, --quiet                 do not display header and footer
 -p, --show-path             show path in the mapping
 -A, --range=<low>[,<high>]  limit results to the given range
 
 -h, --help     display this help and exit
 -V, --version  output version information and exit
 
For more details see pmap(1).

执行 pmap -x pid 可以查看详情

pmap -x 7576
7576:   /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djdk.io.File.enableADS=true -Djruby.compile.invokedynamic=true -Djruby.jit.threshold=0 -Djruby.regexp.interruptible=true -XX:+HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -Dlog4j2.isThreadContextMapInheritable=true -cp /usr/share/logstash/logstash-core/lib/jars/animal-sniffer-annotations-1.14.jar:/
Address           Kbytes     RSS   Dirty Mode  Mapping
...............
---------------- ------- ------- ------- 
total kB         3725156  626940  619032

RSS: 626940 即内存占用。

smem

一般系统没有自带,需要安装一下,根据你的系统选择合适的安装工具

apt-get update
apt-get install -y smem
 
smem --help

自带排序,直接输出排好序的数据,可以使用 -r 参数从大到小排列

smem
smem -r

status

Linux 中每个进程在 /proc 目录下都有对应的目录,其中某个进程目录下有一个 status 文件,通过 status 文件内容可以查看到当前占用资源的情况

cat /proc/7576/status 
Name:    java
Umask:    0022
State:    S (sleeping)
Tgid:    7576
Ngid:    0
Pid:    7576
PPid:    1
TracerPid:    0
Uid:    0    0    0    0
Gid:    0    0    0    0
FDSize:    256
Groups:    0 
VmPeak:     3724360 kB
VmSize:     3724360 kB
VmLck:           0 kB
VmPin:           0 kB
VmHWM:      638308 kB
VmRSS:      621528 kB
RssAnon:      613808 kB
RssFile:        7720 kB
RssShmem:           0 kB
VmData:     3524964 kB
VmStk:         136 kB
VmExe:           4 kB
VmLib:       22520 kB
VmPTE:        1604 kB
VmSwap:           0 kB
Threads:    34
SigQ:    0/14503
SigPnd:    0000000000000000
ShdPnd:    0000000000000000
SigBlk:    0000000000000000
SigIgn:    0000000000000000
SigCgt:    2000000181005ccf
CapInh:    0000000000000000
CapPrm:    00000000a80425fb
CapEff:    00000000a80425fb
CapBnd:    00000000a80425fb
CapAmb:    0000000000000000
Seccomp:    2
Speculation_Store_Bypass:    vulnerable
Cpus_allowed:    3
Cpus_allowed_list:    0-1
Mems_allowed:    00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:    0
voluntary_ctxt_switches:    22
nonvoluntary_ctxt_switches:    29

VmRSS: 621528 kB 就表示占用的内存大小。

END

到此这篇关于Linux查看进程内存占用的六种方法的文章就介绍到这了,更多相关Linux查看进程内存占用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ubuntu下常用apt命令介绍

    ubuntu下常用apt命令介绍

    这篇文章介绍了ubuntu的常用apt命令,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Linux用脚本实现“时分秒“倒计时功能

    Linux用脚本实现“时分秒“倒计时功能

    这篇文章主要介绍了Linux用脚本实现“时分秒“倒计时功能,本文图文实例相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • shell脚本中main函数中$#获取不到脚本传入参数个数浅析

    shell脚本中main函数中$#获取不到脚本传入参数个数浅析

    Linux的shell脚本,有时候我们在运行shell脚本时会给脚本传入参数,出于逻辑上的严谨,在脚本中可能会做一些逻辑判断或处理,例如判断脚本传入参数的个数,这篇文章主要介绍了shell脚本中main函数中$#获取不到脚本传入参数个数浅析,需要的朋友可以参考下
    2024-03-03
  • linux 使用NSF 映射远程磁盘目录的实现

    linux 使用NSF 映射远程磁盘目录的实现

    下面小编就为大家带来一篇linux 使用NSF 映射远程磁盘目录的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Shell脚本中字符串处理的实用技巧分享

    Shell脚本中字符串处理的实用技巧分享

    在 Linux 系统管理和自动化运维的世界中,Shell 脚本是不可或缺的工具,而字符串处理,则是 Shell 编程中最常用、最核心的功能之一,本文将深入探讨 Shell 脚本中各种实用的字符串处理技巧,需要的朋友可以参考下
    2026-03-03
  • bash提取字符串${string:position:length}的具体使用

    bash提取字符串${string:position:length}的具体使用

    本文主要介绍了bash提取字符串${string:position:length}的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 一个简洁的全自动安装LNMP服务器环境的Shell脚本分享

    一个简洁的全自动安装LNMP服务器环境的Shell脚本分享

    这篇文章主要介绍了一个简洁的全自动安装LNMP服务器环境的Shell脚本分享,本文脚本在生产环境上使用了一年多,脚本代码简单唯美,需要的朋友可以参考下
    2014-12-12
  • Shell iptales防火墙设置的方法步骤

    Shell iptales防火墙设置的方法步骤

    本文主要介绍了Shell iptales防火墙设置的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Linux Shell制作录制回放功能脚本

    Linux Shell制作录制回放功能脚本

    这篇文章主要为大家详细介绍了Linux Shell制作录制回放功能脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 简介Linux中cp和mv搭配{,}在shell当中的用法

    简介Linux中cp和mv搭配{,}在shell当中的用法

    这篇文章主要介绍了简介Linux中cp和mv搭配{,}在shell当中的用法,作者举了四个这样的大括号扩展示例,需要的朋友可以参考下
    2015-06-06

最新评论