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

张开发
2026/4/3 16:31:05 15 分钟阅读
Linux查看进程内存占用的六种方法
我这里整理了 6 种方式应该足够用了吧不够你可以再补充。top 命令ps 命令smapspmap 命令smem 命令statustop首先想到的肯定是 top 命令直接输入 top 回车即可输出参数介绍PID进程的IDUSER进程所有者VIRT进程占用的虚拟内存RES进程占用的物理内存SHR进程使用的共享内存S进程的状态。S表示休眠R表示正在运行Z表示僵死状态N表示该进程优先值为负数%CPU进程占用CPU的使用率%MEM进程使用的物理内存和总内存的百分比TIME该进程启动后占用的总的CPU时间即占用CPU使用时间的累加值top命令默认是以CPU排序输出的按字母「****M****」可以按内存占用大小进行排序显示显示的有整体内存占用情况和各个进程占用的内存情况。ps默认的 ps 不输出内存相关的内容可以添加要显示的字段1ps-e -opid,comm,args,pcpu,rsz,vsz,stime,user,uid-e 显示所有进程-o 定制显示信息pid 进程IDcomm 进程名args 启动命令pcpu 占用CPU 百分比rsz 占用物理内存大小vsz 占用虚拟内存大小stime 进程启动时间user 启动用户RSZ: 954184 表示内存占用更多操作指令按内存排序1ps-e -opid,comm,args,pcpu,rsz,vsz,stime,user,uid|sort-k5nr也可以使用--sort -rsz按 rsz 排序效果一样smapssmaps 也是进程的一个属性可以通过 cat smaps 获得1cat/proc/7576/smaps|grepRss |awk{sum $2} END{print sum}需要将他们进行加起来pmap使用 pmap 也可以查看进程的详细内存占用情况123456789101112131415161718192021222324pmap -hUsage:pmap [options] PID [PID ...]Options:-x, --extended show details-X show evenmoredetailsWARNING:formatchanges according to/proc/PID/smaps-XX show everything the kernel provides-c, --read-rcreadthe default rc-C, --read-rc-fromfilereadthe rc fromfile-n, --create-rc create new default rc-N, --create-rc-tofile create new rc tofileNOTE: pid arguments are not allowed with -n, -N-d, --device show the deviceformat-q, --quietdonot display header and footer-p, --show-path show pathinthe mapping-A, --rangelow[,high] limit results to the given range-h, --help display this help andexit-V, --version output version information andexitFormoredetails see pmap(1).执行pmap -x pid可以查看详情123456pmap -x 75767576:/usr/share/logstash/jdk/bin/java-Xms1g -Xmx1g -XX:UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction75 -XX:UseCMSInitiatingOccupancyOnly -Djava.awt.headlesstrue-Dfile.encodingUTF-8 -Djdk.io.File.enableADStrue-Djruby.compile.invokedynamictrue-Djruby.jit.threshold0 -Djruby.regexp.interruptibletrue-XX:HeapDumpOnOutOfMemoryError -Djava.security.egdfile:/dev/urandom-Dlog4j2.isThreadContextMapInheritabletrue-cp/usr/share/logstash/logstash-core/lib/jars/animal-sniffer-annotations-1.14.jar:/Address Kbytes RSS Dirty Mode Mapping...............---------------- ------- ------- -------total kB 3725156 626940 619032RSS: 626940 即内存占用。smem一般系统没有自带需要安装一下根据你的系统选择合适的安装工具1234apt-get updateapt-getinstall-y smemsmem --help自带排序直接输出排好序的数据可以使用 -r 参数从大到小排列12smemsmem -rstatusLinux 中每个进程在 /proc 目录下都有对应的目录其中某个进程目录下有一个 status 文件通过 status 文件内容可以查看到当前占用资源的情况123456789101112131415161718192021222324252627282930313233343536373839404142434445464748cat/proc/7576/statusName: javaUmask: 0022State: S (sleeping)Tgid: 7576Ngid: 0Pid: 7576PPid: 1TracerPid: 0Uid: 0 0 0 0Gid: 0 0 0 0FDSize: 256Groups: 0VmPeak: 3724360 kBVmSize: 3724360 kBVmLck: 0 kBVmPin: 0 kBVmHWM: 638308 kBVmRSS: 621528 kBRssAnon: 613808 kBRssFile: 7720 kBRssShmem: 0 kBVmData: 3524964 kBVmStk: 136 kBVmExe: 4 kBVmLib: 22520 kBVmPTE: 1604 kBVmSwap: 0 kBThreads: 34SigQ: 0/14503SigPnd: 0000000000000000ShdPnd: 0000000000000000SigBlk: 0000000000000000SigIgn: 0000000000000000SigCgt: 2000000181005ccfCapInh: 0000000000000000CapPrm: 00000000a80425fbCapEff: 00000000a80425fbCapBnd: 00000000a80425fbCapAmb: 0000000000000000Seccomp: 2Speculation_Store_Bypass: vulnerableCpus_allowed: 3Cpus_allowed_list: 0-1Mems_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,00000001Mems_allowed_list: 0voluntary_ctxt_switches: 22nonvoluntary_ctxt_switches: 29VmRSS: 621528 kB 就表示占用的内存大小。

更多文章