您的位置:

Linux查看内存被谁占用

一、top命令

top是linux系统的一个基本命令,可以用来实时查看系统的进程状态和资源占用情况,包括CPU、内存、IO等。在top命令中,如果按下m键,则可以按内存占用率对进程进行排序。以下是查看当前内存使用情况的top命令示例:

$ top - 22:51:45 up  1:08,  1 user,  load average: 0.12, 0.19, 0.19
Tasks: 175 total,   1 running, 174 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.8 us,  0.9 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0
KiB Mem : 32921128 total, 17461632 free, 10835900 used,  4673596 buff/cache
KiB Swap:  524284 total,   524284 free,        0 used. 21302332 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                    
  5579 www-data  20   0  456124 401176   2724 S  0.0  1.2   0:38.92 apache2                                                                                                                    
  3317 root      20   0 1390520 183132   6372 S 16.2  0.6   9:17.72 dockerd                                                                                                                    
  2628 mysql     20   0 2850640 143500  16324 S  0.3  0.4   1:09.08 mysqld                                                                                                                     
  1231 root      20   0  228572  32888  14180 S  6.9  0.1   1:23.22 containerd                                                                                                                
  5454 root      20   0  608160  27248  18920 S  0.0  0.1   0:58.04 containerd-shim                                                                                                           
  2745 root      20   0  488412  23672  18392 S  0.0  0.1   0:07.50 containerd-shim                                                                                                           
  4848 root      20   0  602928  19052  12708 S  0.0  0.1   0:00.28 sshd                                                                                                                      
  4822 root      20   0  602944  19016  12684 S  0.0  0.1   0:00.28 sshd

可以看到,在top命令的输出中,有一个KiB Mem的行,显示了当前系统的总内存和可用内存,还有一个%MEM的列,显示了每个进程的内存占用率。

需要注意的是,top命令也可以查看CPU占用率,而且默认情况下是按CPU占用率排序,如果要按内存排序,则需要按下m键。同时,如果需要查看更详细的内存使用情况,则可以使用其他命令。

二、free命令

free命令可以查看系统内存和交换空间的使用情况。以下是查看当前内存使用情况的free命令示例:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:            31G         10G         19G        2.8M        1.4G         21G
Swap:          512M          0B        512M

可以看到,在free命令的输出中,有一个Mem行,显示了当前系统的总内存和可用内存。

如果需要查看更详细的内存使用情况,则可以添加参数“-m”来显示内存使用情况的详细信息:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:          32121       10472       19800           2        1432       21315
Swap:           511           0         511

可以看到,在添加“-m”参数后,输出中的内存使用情况信息都以MB为单位显示。

三、vmstat命令

vmstat命令可以查看系统的虚拟内存使用情况,包括页表、虚拟内存、磁盘IO等。以下是查看当前内存使用情况的vmstat命令示例:

$ vmstat -s
       32921128 K total memory
       10839992 K used memory
        5588880 K active memory
        1461684 K inactive memory
       17461632 K free memory
         467696 K buffer memory
         276580 K swap cache
        524284 K total swap
             0 K used swap
        524284 K free swap
      91498878 non-nice user cpu ticks
        184296 nice user cpu ticks
        910626 system cpu ticks
    190944925 idle cpu ticks
       3378952 IO-wait cpu ticks
            64 IRQ cpu ticks
           1878 softirq cpu ticks
              0 stolen cpu ticks
      37278728 pages paged in
    1397199226 pages paged out
            26 pages swapped in
             0 pages swapped out
    1538391014 interrupts
    1124942483 CPU context switches
       3310415 boot time
         984586 forks

可以看到,vmstat命令的输出非常详细,可以查看很多系统资源的使用情况,包括内存、CPU、IO等。其中,关于内存的信息包括了总内存、已用内存、活跃内存、未活跃内存、可用内存、缓存内存、交换缓存等。

四、ps命令

ps命令可以查看当前系统的进程状态和资源占用情况,包括CPU、内存、IO等。以下是查看当前进程内存使用情况的ps命令示例:

$ ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
0 MB            (sd-pam)
0 MB            /lib/systemd/systemd-journald
0 MB            /lib/systemd/systemd-udevd
0 MB            /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
0 MB            /usr/sbin/cron -f
0 MB            [kdevtmpfs]
0 MB            [kdmflush]
0 MB            [khugepaged]
0 MB            [khungtaskd]
0 MB            [ksmd]
0 MB            [ksoftirqd/0]
0 MB            [kswapd0]
0 MB            [kthreadd]
0 MB            [kworker/0:0]
0 MB            [kworker/0:0H]
0 MB            [kworker/0:1]
0 MB            [kworker/0:1H]
0 MB            [kworker/u256:0]
...

可以看到,ps命令的输出中,首先使用awk命令计算了每个进程占用的内存大小,并按照从小到大的顺序进行排序。这种方式可以很方便地查看每个进程的内存使用情况,并找出最耗内存的进程。

五、smem命令

与ps命令类似,smem命令也可以查看当前系统的进程状态和资源占用情况,包括CPU、内存、IO等。但是,通过smem命令可以更方便地查看进程占用的内存情况,并且可以根据内存使用情况进行排序。以下是查看当前进程内存使用情况的smem命令示例:

$ smem -t -k -n -c "pid command rss"
   PID COMMAND                         RSS
  3317 /usr/bin/dockerd                183132 kB
   633 /lib/systemd/systemd-journald   130080 kB
  1231 /usr/bin/containerd             107884 kB
  4309 /usr/sbin/apache2 -DFOREGROUND   99724 kB
  5579 /usr/sbin/apache2 -DFOREGROUND   95140 kB
  3892 /usr/sbin/apache2 -DFOREGROUND   87584 kB
  5014 /usr/sbin/apache2 -DFOREGROUND   84860 kB
  4753 /usr/sbin/apache2 -DFOREGROUND   83660 kB
  4912 /usr/sbin/apache2 -DFOREGROUND   83532 kB
  2533 /usr/sbin/apache2 -DFOREGROUND   83496 kB
  4822 sshd: root@pts/0                 19016 kB
  5454 containerd-shim -namespace moby   17492 kB
  2745 containerd-shim -namespace moby   17492 kB
...

可以看到,smem命令的输出中,按照RSS(常驻集大小)排序,列出了当前所有进程的占用内存情况,同时也显示了进程的PID和命令名称。

总结

通过本文的介绍,我们可以看到,Linux系统提供了很多命令来查看内存使用情况,包括top、free、vmstat、ps、smem等。每个命令都有其独特的优点和适用场景,可以根据实际需要进行选择和使用。