Linux中怎样找到消耗内存最多的进程程序的多种办法

  • Linux中怎样找到消耗内存最多的进程程序的多种办法已关闭评论
  • 130 views
  • A+
所属分类:linux linux命令

ps命令

ps命令用于报告当前进程的快照,代表进程状态。这是一个标准的Linux应用程序,用于查找有关Linux系统上正在运行的进程的信息。

它用于列出当前正在运行的进程及其进程ID(PID),进程所有者名称,进程优先级(PR)以及正在运行的命令的绝对路径等。

下面的ps命令格式为您提供有关内存消耗最大过程的更多信息。

ps aux --sort -rss | head

结果如下:

[root@i~]# ps aux --sort -rss | head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 24631 0.1 12.4 4556916 481656 ? Sl Jun17 279:09 java -jar gongj-0.0.1-SNAPSHOT.jar
root 7168 0.0 7.2 344476 281640 ? S Oct28 1:29 nginx: worker process
root 7169 0.0 7.2 344312 281292 ? S Oct28 0:46 nginx: worker process
root 713 0.1 7.1 3521252 277296 ? Sl Oct24 14:03 java -jar baikedtools-0.0.1-SNAPSHOT.jar
polkitd 8895 0.0 5.4 1582840 211880 ? Ssl Apr28 166:31 mysqld
mysql 1171 0.2 3.8 1434316 150192 ? Sl Apr28 702:04 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
apache 18691 0.0 2.3 653088 92468 ? S Oct14 8:03 php-fpm: pool www
apache 18029 0.0 2.0 637904 80368 ? S Jul23 57:34 php-fpm: pool www
apache 18020 0.0 2.0 638424 80224 ? S Jul23 57:58 php-fpm: pool www

使用以下ps命令格式还可仅在输出中包括有关内存消耗过程的特定信息,如下:

ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head

结果如下:

[root@i ~]# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head
 PID PPID %MEM %CPU CMD
24631 1 12.4 0.1 java -jar gongj-0.0.1-SNAPSHOT.jar
 7168 2628 7.2 0.0 nginx: worker process
 7169 2628 7.2 0.0 nginx: worker process
 713 1 7.1 0.1 java -jar baikedtools-0.0.1-SNAPSHOT.jar
 8895 8880 5.4 0.0 mysqld
 1171 1005 3.8 0.2 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
18691 2617 2.3 0.0 php-fpm: pool www
18029 2617 2.0 0.0 php-fpm: pool www
18020 2617 2.0 0.0 php-fpm: pool www

如果您只想查看命令名称而不是命令的绝对路径,请使用下面的ps命令格式。

ps -eo pid,ppid,%mem,%cpu,comm --sort=-%mem | head

结果如下:

[root@i ~]# ps -eo pid,ppid,%mem,%cpu,comm --sort=-%mem | head
 PID PPID %MEM %CPU COMMAND
 24631 1 12.4 0.1 java
 7168 2628 7.2 0.0 nginx
 7169 2628 7.2 0.0 nginx
 713 1 7.1 0.1 java
 8895 8880 5.4 0.0 mysqld
 1171 1005 3.8 0.2 mysqld
18691 2617 2.3 0.0 php-fpm
18029 2617 2.0 0.0 php-fpm
18020 2617 2.0 0.0 php-fpm

top命令

top命令是用来监视Linux系统性能的最佳和最知名的命令

下面我们运行以下top命令以基于批处理模式下的内存使用情况对结果进行排序,如下命令

top -c -b -o +%MEM | head -n 20 | tail -15

结果如下:

[root@i ~]# top -c -b -o +%MEM | head -n 20 | tail -15
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24631 root 20 0 4556916 481656 4824 S 0.0 12.4 279:10.27 java -jar gongj-0.0.1-SNAPSHOT.jar
 7168 root 20 0 344476 281640 5532 S 0.0 7.3 1:29.25 nginx: worker process
 7169 root 20 0 344312 281292 5148 S 0.0 7.2 0:46.77 nginx: worker process
 713 root 20 0 3521252 277296 6524 S 0.0 7.1 14:04.29 java -jar baikedtools-0.0.1-SNAPSHOT.jar
 8895 polkitd 20 0 1582840 211880 2192 S 0.0 5.5 166:31.86 mysqld
 1171 mysql 20 0 1434316 150192 3772 S 0.0 3.9 702:06.36 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plu+
18691 apache 20 0 653088 92468 37876 S 0.0 2.4 8:03.89 php-fpm: pool www
18029 apache 20 0 637904 80488 40956 S 0.0 2.1 57:34.17 php-fpm: pool www
18020 apache 20 0 638424 80224 40224 S 0.0 2.1 57:58.97 php-fpm: pool www
18037 apache 20 0 633652 75716 40360 S 0.0 2.0 57:50.90 php-fpm: pool www
18038 apache 20 0 633224 75640 40708 S 0.0 1.9 57:33.38 php-fpm: pool www
18021 apache 20 0 631324 73612 40532 S 0.0 1.9 57:57.47 php-fpm: pool www
18028 apache 20 0 630804 72196 40460 S 0.0 1.9 58:19.73 php-fpm: pool www
[root@iZwz9bpg2u1r39ml9st8qzZ ~]# top -c -b -o +%MEM | head -n 20 | tail -f
 713 root 20 0 3521252 277296 6524 S 0.0 7.1 14:04.34 java -jar baikedtools-0.0.1-SNAPSHOT.jar
 8895 polkitd 20 0 1582840 211880 2192 S 6.7 5.5 166:31.89 mysqld
 1171 mysql 20 0 1434316 150192 3772 S 0.0 3.9 702:06.48 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plu+
18691 apache 20 0 653088 92468 37876 S 0.0 2.4 8:03.89 php-fpm: pool www
18029 apache 20 0 637904 80488 40956 S 0.0 2.1 57:34.17 php-fpm: pool www
18020 apache 20 0 638424 80224 40224 S 0.0 2.1 57:58.97 php-fpm: pool www
18037 apache 20 0 633652 75716 40360 S 0.0 2.0 57:50.90 php-fpm: pool www
18038 apache 20 0 633224 75640 40708 S 0.0 1.9 57:33.55 php-fpm: pool www
18021 apache 20 0 631324 73612 40532 S 0.0 1.9 57:57.47 php-fpm: pool www
18028 apache 20 0 630804 72196 40460 S 0.0 1.9 58:19.73 php-fpm: pool www

如果只想查看命令名称而不是命令的绝对路径,请使用下面的顶部命令格式,如下:

top -b -o +%MEM | head -n 20 | tail -15

结果如下:

[root@i ~]# top -b -o +%MEM | head -n 20 | tail -15
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24631 root 20 0 4556916 481656 4824 S 0.0 12.4 279:10.64 java
 7168 root 20 0 344476 281640 5532 S 0.0 7.3 1:29.35 nginx
 7169 root 20 0 344312 281292 5148 S 0.0 7.2 0:46.80 nginx
 713 root 20 0 3521252 277296 6524 S 0.0 7.1 14:04.68 java
 8895 polkitd 20 0 1582840 211880 2192 S 0.0 5.5 166:32.02 mysqld
 1171 mysql 20 0 1434316 150192 3772 S 0.0 3.9 702:07.22 mysqld
18691 apache 20 0 653088 92468 37876 S 0.0 2.4 8:03.89 php-fpm
18029 apache 20 0 637904 80488 40956 S 0.0 2.1 57:34.17 php-fpm
18020 apache 20 0 638424 80224 40224 S 0.0 2.1 57:59.09 php-fpm
18037 apache 20 0 633652 75716 40360 S 0.0 2.0 57:50.90 php-fpm
18038 apache 20 0 633224 75640 40708 S 0.0 1.9 57:33.55 php-fpm
18021 apache 20 0 631324 73612 40532 S 0.0 1.9 57:57.58 php-fpm
18028 apache 20 0 630804 72196 40460 S 0.0 1.9 58:19.93 php-fpm

ps_mem

ps_mem 是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单 python 脚本。虽然在 Linux 上有很多可用于查看内存使用情况的工具,比如 free、vmstat、smem、top 等,但这个工具和其它的区别在于其精确显示核心内存使用情况。

它会分别计算一个程序私有内存总量和共享内存总量,并以更准确的方式给出了总的内存使用量。很明显的,它将帮助大家知道系统中哪个程序正在占用更多的内存。

你可以通过包管理器、pip 、或直接运行 ps_mem.py 脚本等多种方式来安装 ps_mem 工具。需要注意的是:需要有 root 权限。

基于 RHEL 的系统默认仓库就包含 ps_mem 工具,所以我们可以简单地通过包管理器进行安装。

对于 RHEL/CentOS ,使用yum包管理器安装 ps_mem 包:

sudo yum install ps_mem

对于Fedora ,使用 dnf 包管理器 安装 ps_mem 包:

sudo dnf install ps_mem

对于 Arch Linux ,使用 pacman 包管理器 安装 ps_mem 包:

sudo pacman -S ps_mem

或者通过github下载文件直接运行:

git clone https://github.com/pixelb/ps_mem.git && cd ps_mem
sudo python ps_mem.py

ps_mem 使用方法

不带任何参数直接运行 ps_mem 以精确获取每个程序的的核心内存使用情况。

$ sudo ps_mem
 Private + Shared = RAM used Program

 1.9 MiB + 1.7 MiB = 3.6 MiB systemd (2)
 3.4 MiB + 172.5 KiB = 3.6 MiB deja-dup-monitor
 2.9 MiB + 685.0 KiB = 3.6 MiB zeitgeist-datahub
 2.9 MiB + 848.0 KiB = 3.7 MiB python2.7
 3.5 MiB + 442.0 KiB = 4.0 MiB dbus-daemon (3)
 3.2 MiB + 951.0 KiB = 4.1 MiB evolution-addressbook-factory
 3.9 MiB + 435.0 KiB = 4.3 MiB lightdm (2)
 3.7 MiB + 826.5 KiB = 4.5 MiB polkit-gnome-authentication-agent-1
 3.7 MiB + 853.0 KiB = 4.6 MiB unity-fallback-mount-helper
 3.7 MiB + 884.0 KiB = 4.6 MiB ibus-x11
 4.1 MiB + 590.5 KiB = 4.6 MiB indicator-sound-service
 4.5 MiB + 167.0 KiB = 4.7 MiB udisksd
 4.3 MiB + 571.0 KiB = 4.9 MiB gnome-session-binary
 4.5 MiB + 519.0 KiB = 5.0 MiB zeitgeist-fts
286.2 MiB + 11.8 MiB = 298.0 MiB firefox
---------------------------------
 1.3 GiB
=================================

输出中打印出全路径:

$ sudo ps_mem -s
 Private + Shared = RAM used Program

 4.5 MiB + 519.0 KiB = 5.0 MiB /usr/lib/x86_64-linux-gnu/zeitgeist-fts
 4.2 MiB + 900.5 KiB = 5.1 MiB /usr/lib/x86_64-linux-gnu/indicator-printers/indicator-printers-service
 4.1 MiB + 1.0 MiB = 5.1 MiB bash (2)
 3.9 MiB + 1.2 MiB = 5.2 MiB update-notifier
 4.8 MiB + 426.0 KiB = 5.2 MiB /usr/bin/pulseaudio --start --log-target=syslog
 5.0 MiB + 863.0 KiB = 5.9 MiB /usr/lib/evolution/evolution-calendar-factory-subprocess --factory local --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx2573x3 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/2573/3
 4.5 MiB + 1.5 MiB = 6.0 MiB /usr/lib/x86_64-linux-gnu/url-dispatcher/url-dispatcher
 4.3 MiB + 1.7 MiB = 6.0 MiB python3 -v
 5.2 MiB + 856.5 KiB = 6.1 MiB /usr/lib/evolution/evolution-addressbook-factory-subprocess --factory local --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx2637x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/2637/2
 5.6 MiB + 494.5 KiB = 6.1 MiB /usr/lib/colord/colord
 286.2 MiB + 11.8 MiB = 298.1 MiB /usr/lib/firefox//compfirefox
---------------------------------
 1.3 GiB
=================================

只显示特定的 PID 列表的内存使用情况:

$ sudo ps_mem -p 2886,4386
 Private + Shared = RAM used Program

13.5 MiB + 2.9 MiB = 16.4 MiB gnome-terminal-server
286.2 MiB + 11.8 MiB = 298.0 MiB firefox
---------------------------------
 314.4 MiB

每 N 秒打印进程内存。以下命令每 2 秒报告一次内存使用情况:

$ sudo ps_mem w 2

只显示内存总量:

$ sudo ps_mem -t
1329884160
  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar