Linux查看高内存进程方法大全 (linux查看内存高进程)
随着计算机技术的发展,内存容量越来越大,但是在运行过程中,仍然会出现内存不足的情况。其中,高内存进程占用内存较高,是造成内存不足的主要原因之一。因此,了解如何查看高内存进程非常重要。本篇文章将介绍多个查看高内存进程的方法,供大家参考。
一、使用top命令
top是一个Linux系统资源监视器,可以在终端中查看系统的实时运行情况。其中,可以通过top命令查看系统中最耗费内存的进程。具体操作如下:
1. 打开终端,输入以下命令:
top
2. 在终端中显示类似下面的信息:
“`
top – 10:16:25 up 43 min, 1 user, load average: 0.41, 0.46, 0.47
Tasks: 183 total, 2 running, 181 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.7 us, 0.7 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 16044.2 total, 11352.1 free, 1989.9 used, 1702.1 buff/cache
MiB Swap: 16384.0 total, 16284.0 free, 100.0 used. 13736.8 avl Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
75855 root 20 0 1979864 1.1g 39772 S 0.0 7.3 0:20.77 java
67774 root 20 0 1051520 717392 22872 S 0.0 4.4 0:32.19 docker
75475 tomcat 20 0 19.046g 829700 30380 S 0.0 5.1 0:02.17 java
“`
3. 在Processes中,按下shift+m键,会按照内存使用量从高到低排序,可以查看使用内存最多的进程。其中,RES表示进程占用物理内存大小(不包括共享内存和虚拟内存)。
二、使用ps命令
ps命令是一个Linux系统中用于查看进程信息的命令。可以通过ps命令查看系统中进程的详细信息,包括进程ID和占用内存大小等。具体操作如下:
1. 打开终端,输入以下命令(其中,-e选项表示显示所有进程):
ps -e -o pid,user,%mem,command –sort=-%mem | head
2. 在终端中显示类似下面的信息:
“`
PID USER %MEM COMMAND
81816 root 9.9 /usr/bin/python3 /usr/bin/gunicorn –config /etc/gunicorn.d/ga –env DJANGO_SETTINGS_MODULE=ga_core.settings ga_core.wsgi:application
17846 mongodb 5.5 /usr/bin/mongod –config /etc/mongodb.conf
18592 redis 3.3 /usr/bin/redis-server *:6379
76947 root 3.3 /usr/bin/java -Xms256m -Xmx3072m -XX:MaxPermSize=128m -Djava.awt.headless=true -cp /usr/share/t-launcher-packaging/bin/t-launch.jar xt.boot.Boot run
81096 root 2.9 /usr/bin/dockerd -H fd:// –contnerd=/run/contnerd/contnerd.sock
17847 mongodb 2.4 /usr/bin/mongod –config /etc/mongodb.conf
35387 root 1.6 /usr/bin/dockerd -H fd:// –contnerd=/run/contnerd/contnerd.sock
16091 root 1.3 /usr/in/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib/mysql/plugin –user=mysql –log-error=/var/log/mysqld.log –pid-file=/run/mysqld/mysqld.pid –socket=/var/lib/mysql/mysql.sock –port=3306
23488 www-data 1.3 php-fpm: pool www
“`
3. 在命令中添加–sort=-%mem选项,可以将结果按照内存使用量从高到低排序。其中,%MEM表示进程占用物理内存大小占总内存大小的百分比。
三、使用em命令
em是一个Linux系统中用于查看进程和内存使用情况的命令,可以根据进程和用户等多种方式进行分类和过滤。具体操作如下:
1. 打开终端,输入以下命令(其中,-r选项表示以内存使用量为基准进行排序):
em -r
2. 在终端中显示类似下面的信息:
“`
PID User Command Swap USS PSS RSS
12355 root /usr/bin/mongod –quiet –cfi 0 403.03M 410.61M 523.85M
29859 mysql /usr/in/mysqld –daemonize- 0 237.89M 244.01M 297.78M
14872 root /usr/bin/dockerd –host=fd:// 0 710.93M 781.37M 922.35M
23271 root /in/iptables -w2 -t nat -A 0 6.77M 8.69M 28.09M
25732 root /usr/bin/dockerd –host=unix: 0 34.08M 36.16M 55.73M
12378 mongodb /usr/bin/mongod –quiet –cfi 0 134.24M 189.43M 243.47M
29777 mysql /usr/in/mysqld –daemonize- 0 2.66M 3.08M 31.49M
15257 root /usr/bin/dockerd -H fd:// –v 0 11.86M 13.37M 26.02M
15261 root /usr/lib/snapd/snapd –no-fork 0 13.01M 13.55M 23.11M
26128 syslog /usr/in/rsyslogd -n 0 5.56M 11.02M 22.22M
26403 root /usr/bin/dockerd –host=fd:// 0 7.42M 8.91M 18.81M
29523 root /usr/bin/dockerd –host=unix: 0 6.56M 8.81M 18.37M
11607 root /usr/bin/dockerd -H fd:// –v 0 9.17M 10.04M 16.31M
28414 root /usr/bin/docker-proxy –proto 0 4.08M 4.66M 10.62M
29626 root /usr/bin/dockerd –host=unix: 0 4.05M 4.56M 10.04M
32234 root /usr/in/nginx -g daemon off 0 3.80M 4.84M 9.85M
29700 root /usr/bin/dockerd -H fd:// –v 0 7.51M 8.32M 9.66M
16980 root /usr/lib/snapd/snapd –n 0 6.80M 7.63M 9.62M
29795 root /usr/bin/dockerd –host=unix: 0 5.16M 5.80M 9.20M
“`
3. 在命令中添加–sort=USS选项,可以将结果根据进程实际使用的内存大小从高到低排序。其中,USS表示进程占用物理内存大小(不包括共享内存和虚拟内存)。
四、使用pidstat命令
pidstat是Linux系统中一个用于查看指定进程的CPU、内存和IO等性能数据的命令。具体操作如下:
1. 打开终端,输入以下命令(其中,-r选项表示查看内存使用情况):
pidstat -r [PID]
2. 在终端中显示类似下面的信息:
“`
Linux 4.4.0-62-generic () 05/18/2023 _x86_64_ (2 CPU)
05:14:55 PM pid uid tgid total_vm rss softirq majflt minflt pswpin pswpout swapused uname %usr %system %guest %CPU CPU %mem minflt/s majflt/s VSZ RSS LTP
05:14:55 PM 67 1000 67 34070 164 3171 0 50 0 0 0 root 0.15 0.07 0.00 0.22 1 0.00 0.02 0.00 3.74M 172.0K chronyd
05:14:55 PM 88 0 88 12659 166 579 0 8 0 0 0 syslog 0.03 0.02 0.00 0.05 0 0.00 0.00 0.00 1.47M 168.0K rsyslogd
05:14:55 PM 97 0 97 75533 1016 13882 0 163 0 0 0 root 0.49 0.25 0.00 0.74 1 0.05 0.49 0.01 411.82M 1.02M systemd-journal
05:14:55 PM 150 0 150 25291 102 2 0 27 0 0 0 root 0.00 0.01 0.00 0.01 1 0.00 0.00 0.00 8.80M 100.0K systemd-udevd
05:14:55 PM 2977 0 2977 56659 1280 41 6 7 0 0 0 www-data 0.04 0.01 0.00 0.05 1 0.05 0.00 0.00 218.35M 1.24M nginx
“`
3. 修改命令中的[PID]为具体进程ID,即可查看指定进程的内存使用情况。
五、使用pmap命令
pmap命令可以显示进程的内存映射信息,包括虚拟地址、权限、映射文件等。从而可以分析进程的内存使用情况。具体操作如下:
1. 打开终端,输入以下命令(其中,[PID]表示进程ID):
pmap -d [PID]
2. 在终端中显示类似下面的信息:
“`
Address Kbytes RSS Dirty Mode Mapping
00007f69a5585000 920 520 0 r-xp /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
00007f69a5ec7000 2023 664 208 rw-p /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
00007f69a6c9f000 24 24 24 rw-p [heap]
00007f69a6ca7000 196 108 108 rw-p [heap]
00007f69a8e0e000 132 80 80 rw-p /usr/lib/x86_64-linux-gnu/libnettle.so.6.4
00007f69a901d000 96 44 44 rw-p /usr/lib/x86_64-linux-gnu/libhogweed.so.4.3
00007f69a91a0000 32 20 20 rw-p /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
…
“`
3. 在命令中查找RSS(即常驻内存大小)更大的模块,即可得知占用内存较多的代码位置。
六、使用psutil库
psutil是一个跨平台的Python第三方库,可以提供系统信息和进程运行情况等详细信息。可以通过psutil库查看内存使用量较高的进程。具体操作如下:
1. 安装psutil库(可以通过pip命令进行安装):
pip install psutil
2. 在Python脚本中,输入以下代码:
“`
import psutil
for process in psutil.process_iter(attrs=[‘pid’, ‘name’, ‘memory_info’]):
rss = process.info[‘memory_info’].rss / 1024 / 1024 # 获取进程常驻内存大小(MB)
if rss > 100: # 显示常驻内存大小大于100MB的进程
print(‘PID: {}, Name: {}, Mem: {:.2f} MB’.format(process.info[‘pid’], process.info[‘name’], rss))
“`
3. 运行Python脚本,即可查看常驻内存超过100MB的进程信息。
综上所述,Linux查看高内存进程有多种方法,每种方法都有其特点和优缺点。可以根据具体情况选择合适的方法。同时,为了避免出现内存不足的情况,建议优化程序,减少不必要的内存占用。