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

作者:

文章目录
  • 首先想到的肯定是 top 命令,直接输入 top 回车即可 输出参数介绍: PID:进程的ID USER:进程所有者 VIRT:进程占用的虚拟内存 RES:进程占用的物理内存 SHR:进程使用的共享内存 S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 %CPU:进程占用CPU的使用率 %MEM:进程使用的物理内存和总内存的百分比 TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值 top命令默认是以CPU排序输出的,按字母「****M****」,可以按内存占用大小进行排序显示 显示的有整体内存占用情况和各个进程占用的内存情况。
  • 默认的 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 也是进程的一个属性,可以通过 cat smaps 获得 cat /proc/7576/smaps | grep Rss | awk ‘{sum +=$2} END{print sum}’ 需要将他们进行加起来
  • 使用 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 即内存占用。
  • 一般系统没有自带,需要安装一下,根据你的系统选择合适的安装工具 apt-get update apt-get install -y smem smem –help 自带排序,直接输出排好序的数据,可以使用 -r 参数从大到小排列 smem smem -r
  • 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 就表示占用的内存大小。
  • 到此这篇关于Linux查看进程内存占用的六种方法的文章就介绍到这了,更多相关Linux查看进程内存占用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: linux下如何查看java进程内存占用情况 Linux系统下利用C程序输出某进程的内存占用信息 详解Linux如何查看当前占用CPU或内存最多的几个进程 Linux系统rsyslogd占用内存过高的问题排查及解决 Linux解决rsyslog服务占用内存过高的办法
  • 目录
    • top
    • ps
    • smaps
    • pmap
    • smem
    • status
    • END

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

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

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

    输出参数介绍:

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

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

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

    默认的 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 也是进程的一个属性,可以通过 cat smaps 获得

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

    需要将他们进行加起来

    使用 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 即内存占用。

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

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

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

    smem
    smem -r

    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 就表示占用的内存大小。

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

    您可能感兴趣的文章:

    • linux下如何查看java进程内存占用情况
    • Linux系统下利用C程序输出某进程的内存占用信息
    • 详解Linux如何查看当前占用CPU或内存最多的几个进程
    • Linux系统rsyslogd占用内存过高的问题排查及解决
    • Linux解决rsyslog服务占用内存过高的办法

    站内搜索