工作中会经常遇到某个应用消耗了大量内存导致系统缓慢的情况,这个时候第一件事就是登上系统找出占用内存最多的进程并杀掉它恢复应用,那么如何才能快速地查找占用最大内存的进程呢?

使用top命令和ps命令可以快速地查找出当前系统内存使用情况,下面就来介绍如何使用top和ps命令。

ps命令用法

用法:ps [ 参数 ]

参数含义

  • -A 显示所有进程(等价于-e)(utility)
  • -a 显示一个终端的所有进程,除了会话引线
  • -N 忽略选择。
  • -d 显示所有进程,但省略所有的会话引线(utility)
  • -x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
  • -p pid 进程使用cpu的时间
  • -u uid or username 选择有效的用户id或者是用户名
  • -g gid or groupname 显示组的所有进程。
  • U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
  • -f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
  • -l 长格式(有F,wchan,C 等字段)
  • -j 作业格式
  • -o 用户自定义格式。
  • v 以虚拟存储器格式显示
  • s 以信号格式显示
  • -m 显示所有的线程
  • -H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
  • e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
  • h 不显示第一行

ps命令在Linux中查找内存消耗最大的进程

ps命令用于展示当前系统进程的快照。用于查找有关在Linux系统上运行进程的信息。

它用于列出当前在运行的进程及其进程ID,进程所有者,进程优先级和路径等

下面的ps命令展示消耗内存进程排序的信息

[root@localhost ~]# ps aux --sort -rss | head
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
redhat    15808  1.3 25.7 1658408 297724 ?      Rl   11:23   3:25 /usr/bin/gnome-shell
redhat    19740  0.0 12.3 1080168 142540 ?      Sl   12:28   0:11 /usr/lib64/firefox/firefox
root      15349  0.4  3.5 214348 40668 tty1     Ss+  11:23   1:16 /usr/bin/Xorg :0 -background none -verbose -auth /run/gdm/auth-for-gdm-gyP4e9/database -seat seat0 -nolisten tcp vt1
root      27024  0.0  1.3 104228 15668 ?        S    15:40   0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eno16777736.pid -lf /var/lib/NetworkManager/dhclient-dcb4d1bf-1d32-4d67-a5aa-876d8c50386d-eno16777736.lease -cf /var/lib/NetworkManager/dhclient-eno16777736.conf eno16777736
redhat    16409  0.0  1.2 621884 14364 ?        Sl   11:24   0:09 /usr/libexec/gnome-terminal-server
polkitd    1066  0.0  1.0 520636 11832 ?        Ssl  11:17   0:15 /usr/lib/polkit-1/polkitd --no-debug
redhat    15713  0.0  0.9 1077636 11336 ?       Sl   11:23   0:01 /usr/libexec/gnome-settings-daemon
redhat    15874  0.0  0.8 981720  9300 ?        Sl   11:23   0:00 /usr/bin/nautilus --no-default-window
redhat    15947  0.0  0.7 563408  8716 ?        Sl   11:23   0:00 /usr/libexec/tracker-store

ps 在输出时展示有关内存的特定信息

[root@localhost ~]# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem |head
   PID   PPID %MEM %CPU CMD
 15808  15532 25.7  1.3 /usr/bin/gnome-shell
 19740  15808 12.4  0.0 /usr/lib64/firefox/firefox
 15349  15344  3.5  0.5 /usr/bin/Xorg :0 -background none -verbose -auth /run/gdm/auth-for-gdm-gyP4e9/database -seat seat0 -nolisten tcp vt1
 27024   1140  1.3  0.0 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eno16777736.pid -lf /var/lib/NetworkManager/dhclient-dcb4d1bf-1d32-4d67-a5aa-876d8c50386d-eno16777736.lease -cf /var/lib/NetworkManager/dhclient-eno16777736.conf eno16777736
 16409      1  1.2  0.0 /usr/libexec/gnome-terminal-server
  1066      1  1.0  0.0 /usr/lib/polkit-1/polkitd --no-debug
 15713  15532  0.9  0.0 /usr/libexec/gnome-settings-daemon
 15874      1  0.8  0.0 /usr/bin/nautilus --no-default-window
 15947      1  0.7  0.0 /usr/libexec/tracker-store

ps只展示命令名称不展示绝对路径

[root@localhost ~]# ps -eo pid,ppid,%mem,%cpu,comm --sort=-%mem | head
   PID   PPID %MEM %CPU COMMAND
 15808  15532 25.7  1.3 gnome-shell
 19740  15808 12.4  0.0 firefox
 15349  15344  3.5  0.5 Xorg
 27024   1140  1.3  0.0 dhclient
 16409      1  1.2  0.0 gnome-terminal-
  1066      1  1.0  0.0 polkitd
 15713  15532  0.9  0.0 gnome-settings-
 15874      1  0.8  0.0 nautilus
 15947      1  0.7  0.0 tracker-store

top命令用法

用法:top[参数]

top参数含义

  • d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
  • p 通过指定监控进程ID来仅仅监控某个进程的状态。
  • q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  • S 指定累计模式。
  • s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  • i 使top不显示任何闲置或者僵死进程。
  • c 显示整个命令行而不只是显示命令名。

使用top命令查找Linux中内存消耗最大的进程

Linux的top命令是用来监视Linux系统性能的命令

top命令查找系统中消耗内存最多的进程

[root@localhost ~]# top -c -b -o +%MEM | head
top - 16:02:03 up  4:44,  3 users,  load average: 0.05, 0.06, 0.08
Tasks: 486 total,   3 running, 483 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.8 us,  0.9 sy,  0.0 ni, 95.5 id,  0.7 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  1154712 total,    83028 free,   694332 used,   377352 buff/cache
KiB Swap:  2097148 total,  1950656 free,   146492 used.   237924 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 15808 redhat    20   0 1658408 297748  21048 S 30.0 25.8   4:07.74 /usr/bin/gnome-shell
 19740 redhat    20   0 1080168 143536  15356 S  0.0 12.4   0:11.67 /usr/lib64/firefox/firefox
 15349 root      20   0  211880  37872   5020 S 10.0  3.3   1:29.12 /usr/bin/Xorg :0 -background none -verbose -auth /run/gdm/auth-for-gdm+

top命令只查看命令名称不展示绝对路径

[root@localhost ~]# top -b -o +%MEM |head
top - 16:01:20 up  4:43,  3 users,  load average: 0.01, 0.05, 0.08
Tasks: 487 total,   2 running, 485 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.7 us,  0.9 sy,  0.0 ni, 95.5 id,  0.7 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  1154712 total,    81600 free,   695700 used,   377412 buff/cache
KiB Swap:  2097148 total,  1950656 free,   146492 used.   236492 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 15808 redhat    20   0 1658408 297748  21048 S 18.2 25.8   4:03.52 gnome-shell
 19740 redhat    20   0 1080168 143536  15356 S  0.0 12.4   0:11.66 firefox
 15349 root      20   0  211880  37872   5020 S  4.5  3.3   1:27.58 Xorg