Linux查看最消耗内存的进程
了解RSS、PSS、USS等相关概念:
- VSS – Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS – Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PSS – Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
- USS – Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
RSS(Resident set size),使用top命令可以查询到,是最常用的内存指标,表示进程占用的物理内存大小。但是,将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。
PSS(Proportional set size)所有使用某共享库的程序均分该共享库占用的内存时,每个进程占用的内存。显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存的大小进行平均后,再分摊到各进程上去。
USS(Unique set size )进程独自占用的内存,它是PSS中自己的部分,它只计算了进程独自占用的内存大小,不包含任何共享的部分。
ps命令
CPU占用最多的前10个进程
1 | ps auxw|head -1;ps auxw|sort -rn -k3|head -10 |
内存消耗最多的前10个进程
1 | ps auxw|head -1;ps auxw|sort -rn -k4|head -10 |
虚拟内存使用最多的前10个进程
1 | ps auxw|head -1;ps auxw|sort -rn -k5|head -10 |
也可以试试
1 2 | ps auxw --sort=rss ps auxw --sort=%cpu |
5.看看几个参数含义
- %MEM 进程的内存占用率
- MAJFL is the major page fault count,
- VSZ 进程所使用的虚存的大小
- RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the "resident set size" meaning physical memory used)
- TTY 与进程关联的终端(tty)
top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:
1 | top -u mysql |
为了查看哪个进程使用着最多的内存,一个简单的办法就是启动 top
,然后按下 shift+m
,这样便可以查看按照内存占用百分比从高到底排列的进程。当你按下了 shift+m
,你的 top
应该会得到类似于下面这样的输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $top top - 09:39:34 up 5 days, 3 min, 3 users, load average: 4.77, 4.43, 3.72 Tasks: 251 total, 3 running, 247 sleeping, 1 stopped, 0 zombie %Cpu(s): 50.6 us, 35.9 sy, 0.0 ni, 13.4 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 5944.4 total, 128.9 free, 2509.3 used, 3306.2 buff/cache MiB Swap: 2048.0 total, 2045.7 free, 2.2 used. 3053.5 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 400 nemo 20 0 3309580 550188 168372 S 0.3 9.0 1:33.27 Web Content 32469 nemo 20 0 3492840 447372 163296 S 7.3 7.3 3:55.60 firefox 32542 nemo 20 0 2845732 433388 140984 S 6.0 7.1 4:11.16 Web Content 342 nemo 20 0 2848520 352288 118972 S 10.3 5.8 4:04.89 Web Content 2389 nemo 20 0 1774412 236700 90044 S 39.7 3.9 9:32.64 vlc 29527 nemo 20 0 2735792 225980 84744 S 9.6 3.7 3:02.35 gnome-shell 30497 nemo 30 10 1088476 159636 88884 S 0.0 2.6 0:11.99 update-manager 30058 nemo 20 0 1089464 140952 33128 S 0.0 2.3 0:04.58 gnome-software 32533 nemo 20 0 2389088 104712 79544 S 0.0 1.7 0:01.43 WebExtensions 2256 nemo 20 0 1217884 103424 31304 T 0.0 1.7 0:00.28 vlc 1713 nemo 20 0 2374396 79588 61452 S 0.0 1.3 0:00.49 Web Content 29306 nemo 20 0 389668 74376 54340 S 2.3 1.2 0:57.25 Xorg 32739 nemo 20 0 289528 58900 34480 S 1.0 1.0 1:04.08 RDD Process 29732 nemo 20 0 789196 57724 42428 S 0.0 0.9 0:00.38 evolution-alarm 2373 root 20 0 150408 57000 9924 S 0.3 0.9 10:15.35 nessusd |
注意 %MEM
排序。列表的大小取决于你的窗口大小,但是占据着最多的内存的进程将会显示在列表的顶端。
内容解释:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
常用的命令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
pmap命令
可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看),如下所示:
1 | pmap - report memory map of a process(查看进程的内存映像信息) |
用法
1 2 | pmap [ -x | -d ] [ -q ] pids... pmap -V |
选项含义
1 2 3 4 | -x extended Show the extended format. 显示扩展格式 -d device Show the device format. 显示设备格式 -q quiet Do not display some header/footer lines. 不显示头尾行 -V show version Displays version of program. 显示版本 |
扩展格式和设备格式域:
- Address: start address of map 映像起始地址
- Kbytes: size of map in kilobytes 映像大小
- RSS: resident set size in kilobytes 驻留集大小
- Dirty: dirty pages (both shared and private) in kilobytes 脏页大小
- Mode: permissions on map 映像权限: r=read, w=write, x=execute, s=shared, p=private (copy on write)
- Mapping: file backing the map , or '[ anon ]' for allocated memory, or '[ stack ]' for the program stack. 映像支持文件,[anon]为已分配内存 [stack]为程序堆栈
- Offset: offset into the file 文件偏移
- Device: device name (major:minor) 设备名
1 2 3 4 5 6 7 8 9 10 | [root@lhrblog ~]# pmap -d 1759 1759: /www/server/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/www/server/mysql --datadir=/www/server/data --plugin-dir=/www/server/mysql/lib/plugin --user=mysql --log-error=lhrblog.err --open-files-limit=65535 --pid-file=/www/server/data/lhrblog.pid --socket=/tmp/mysql.sock --port=3306 Address Kbytes Mode Offset Device Mapping 0000000000400000 52844 r-x-- 0000000000000000 0fd:00001 mysqld ....... 00002b22fc609000 59356 ----- 0000000000000000 000:00000 [ anon ] 00007fff4dee9000 132 rw--- 0000000000000000 000:00000 [ stack ] 00007fff4df5f000 8 r-x-- 0000000000000000 000:00000 [ anon ] ffffffffff600000 4 r-x-- 0000000000000000 000:00000 [ anon ] mapped: 1986332K writeable/private: 550388K shared: 540896K |
mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz
writeable/private 表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小
shared 表示进程和其他进程共享的内存大小