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 不输出内存相关的内容,可以添加要显示的字段
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查询内存或CPU占用最多的几个进程
一、可以使用以下命令查使用内存最多的10个进程
方法1:
ps -aux | sort -k4nr | head -10
如果是最高的三个,10改为3即可
命令解释:
1. ps:参数a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分。ps -aux的输出格式如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2. sort -k4nr中(k代表从根据哪一个关键词排序,后面的数字4表示按照第四列排序;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。-k3表示按照cpu占用率排序。
方法2:top (然后按下M,注意大写)
参数解释
- PID:进程的ID
- USER:进程所有者
- PR:进程的优先级别,越小越优先被执行
- NInice:值
- VIRT:进程占用的虚拟内存
- RES:进程占用的物理内存
- SHR:进程使用的共享内存
- S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
- %CPU:进程占用CPU的使用率
- %MEM:进程使用的物理内存和总内存的百分比
- TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
- COMMAND:进程启动命令名称
方法3:按内存大小排序,打印出所有的进程
ps aux --sort -rss
二、可以使用下面命令查使用CPU最多的3个进程
方法1:
ps -aux | sort -k3nr | head -3
方法2:top (然后按下P,注意大写)
以上就是Linux 查看进程内存占用的 6 种方法,建议点赞收藏备用,排查问题好帮手的详细内容,更多相关资料请阅读主机测评网其它文章!
本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https://zhuji.jb51.net/linux/8664.html