0


Linux 查看进程内存占用的 6 种方法,建议点赞收藏备用,排查问题好帮手

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 不输出内存相关的内容,可以添加要显示的字段

  1. 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 表示内存占用

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

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

也可以使用

  1. --sort -rsz

按 rsz 排序,效果一样

smaps

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

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

需要将他们进行加起来

pmap

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

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

执行

  1. pmap -x pid

可以查看详情

  1. pmap -x 7576
  2. 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:/
  3. Address Kbytes RSS Dirty Mode Mapping
  4. ...............
  5. ---------------- ------- ------- -------
  6. total kB 3725156 626940 619032

RSS: 626940 即内存占用。

smem

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

  1. apt-get update
  2. apt-get install -y smem
  3. smem --help

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

  1. smem
  2. smem -r

status

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

  1. cat /proc/7576/status
  2. Name: java
  3. Umask: 0022
  4. State: S (sleeping)
  5. Tgid: 7576
  6. Ngid: 0
  7. Pid: 7576
  8. PPid: 1
  9. TracerPid: 0
  10. Uid: 0 0 0 0
  11. Gid: 0 0 0 0
  12. FDSize: 256
  13. Groups: 0
  14. VmPeak: 3724360 kB
  15. VmSize: 3724360 kB
  16. VmLck: 0 kB
  17. VmPin: 0 kB
  18. VmHWM: 638308 kB
  19. VmRSS: 621528 kB
  20. RssAnon: 613808 kB
  21. RssFile: 7720 kB
  22. RssShmem: 0 kB
  23. VmData: 3524964 kB
  24. VmStk: 136 kB
  25. VmExe: 4 kB
  26. VmLib: 22520 kB
  27. VmPTE: 1604 kB
  28. VmSwap: 0 kB
  29. Threads: 34
  30. SigQ: 0/14503
  31. SigPnd: 0000000000000000
  32. ShdPnd: 0000000000000000
  33. SigBlk: 0000000000000000
  34. SigIgn: 0000000000000000
  35. SigCgt: 2000000181005ccf
  36. CapInh: 0000000000000000
  37. CapPrm: 00000000a80425fb
  38. CapEff: 00000000a80425fb
  39. CapBnd: 00000000a80425fb
  40. CapAmb: 0000000000000000
  41. Seccomp: 2
  42. Speculation_Store_Bypass: vulnerable
  43. Cpus_allowed: 3
  44. Cpus_allowed_list: 0-1
  45. 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
  46. Mems_allowed_list: 0
  47. voluntary_ctxt_switches: 22
  48. nonvoluntary_ctxt_switches: 29

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

END

好了,今天的分享就到这里,关注我,和我一起学习成长。

感谢大家的阅读,如果有任何异议的地方,欢迎指正,也欢迎大家公号找到我与我做朋友!

标签: linux 服务器 bash

本文转载自: https://blog.csdn.net/radapp/article/details/143134688
版权归原作者 新质程序猿 所有, 如有侵权,请联系我们删除。

“Linux 查看进程内存占用的 6 种方法,建议点赞收藏备用,排查问题好帮手”的评论:

还没有评论