方法三

我们还可以使用“pmap”来获取进程的交换内存使用情况的详细信息。
这个值将再次类似于我们上面计算的值

例如,获取“amsHelper”的交换使用情况

# pmap -X $(pgrep amsHelper)
2010:   /sbin/amsHelper -f
         Address Perm   Offset Device  Inode   Size  Rss  Pss Referenced Anonymous Swap Locked Mapping
        00400000 r-xp 00000000  fd:00  13670   1632  408  408        408         0    0      0 amsHelper
        00798000 r--p 00198000  fd:00  13670      4    4    4          4         4    0      0 amsHelper
        00799000 rw-p 00199000  fd:00  13670     52   16   16         12        16    0      0 amsHelper
        007a6000 rw-p 00000000  00:00      0    356   32   32         32        32   16      0
        021c6000 rw-p 00000000  00:00      0  11584 7280 7280       7268      7280 4240      0 [heap]
    7f4177075000 r-xp 00000000  fd:00   3119     48    0    0          0         0    0      0 libnss_files-2.17.so
    7f4177081000 ---p 0000c000  fd:00   3119   2044    0    0          0         0    0      0 libnss_files-2.17.so
    7f4177280000 r--p 0000b000  fd:00   3119      4    0    0          0         0    4      0 libnss_files-2.17.so
    7f41776a9000 r--p 00015000  fd:00   3111      4    0    0          0         0    4      0 libnsl-2.17.so
    7f41776aa000 rw-p 00016000  fd:00   3111      4    0    0          0         0    4      0 libnsl-2.17.so
    7f4181bb0000 r--s 00000000  fd:00 274663    264    0    0          0         0    0      0 modules.dep
    7f4181bf3000 r--s 00000000  00:13  20825    212    0    0          0         0  196      0 dbQN6MqZ (deleted)
    7f4181c28000 rw-p 00000000  00:00      0     56   24   24          4        24   32      0
    7f4181c36000 r--s 00000000  fd:00 132688     28    0    0          0         0    0      0 gconv-modules.cache
    7f4181c3d000 rw-p 00000000  00:00      0      4    4    4          0         4    0      0
    7f4181c3e000 r--p 00021000  fd:00   3094      4    4    4          0         4    0      0 ld-2.17.so
    7f4181c3f000 rw-p 00022000  fd:00   3094      4    4    4          0         4    0      0 ld-2.17.so
    7f4181c40000 rw-p 00000000  00:00      0      4    4    4          0         4    0      0
    7ffd33f16000 rw-p 00000000  00:00      0    132   16   16         16        16   20      0 [stack]
    7ffd33fce000 r-xp 00000000  00:00      0      8    4    0          4         0    0      0 [vdso]
ffffffffff600000 r-xp 00000000  00:00      0      4    0    0          0         0    0      0 [vsyscall]
                                             ====== ==== ==== ========== ========= ==== ======
                                             188208 8296 7934       8140      7516 4788      0 KB

这里的倒数第三列显示了此过程的交换使用情况

在 Linux 中如何查看进程的交换内存使用情况

使用下面命令,我们可以知道总的、已用的和可用的交换内存

# free -m
              total        used        free      shared  buff/cache   available
Mem:         128816       10014      117010         126        1791      117822
Swap:          4091        1821        2270

但它没有提供有关每个进程或者应用程序的交换内存使用情况

下面是检查进程的交换内存使用情况的方法:

方法四

现在有另一种方法可以找到交换内存使用情况,与上面相比,它是最好的并且可靠的,因为它将提供类似于上面但更详细的进程使用的每个库的交换使用情况。

例如检查“amsHelper”进程的细节

# cat /proc/$(pgrep amsHelper)/smaps

对于进程使用的每个库文件,它将具有如下信息

7ffd33f16000-7ffd33f37000 rw-p 00000000 00:00 0                          [stack]
Size:                132 kB
Rss:                  16 kB
Pss:                  16 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:        16 kB
Referenced:           16 kB
Anonymous:            16 kB
AnonHugePages:         0 kB
Swap:                 20 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mw me gd ac

如我们所见,它将为我们提供一个很长的列表,因此我们必须收集所需的输出,然后计算整个值以获得总体使用情况:

# cat /proc/$(pgrep amsHelper)/smaps | grep -i swap |awk '{s+=} END {print s}'
4788

方法二

我们还可以从每个进程的状态检查这个值,这将提供类似于我们使用“top”实用程序获得的值

例如,如果我希望获得“amsHelper”进程的交换使用详细信息

# grep -i VmSwap /proc/$(pgrep amsHelper)/status
VmSwap:     4592 kB

如果进程有多个关联的 PID,那么可以使用下面的命令

# for i in $(pidof postgres);do grep -i vmswap /proc/$i/status;done
VmSwap:     1560 kB
VmSwap:     1068 kB
VmSwap:      916 kB
VmSwap:      856 kB
VmSwap:     1020 kB
VmSwap:      816 kB
VmSwap:     1132 kB
VmSwap:      900 kB
VmSwap:      884 kB
VmSwap:      864 kB
VmSwap:      888 kB
VmSwap:      796 kB

计算总数

# for i in $(pidof postgres);do grep -i vmsw /proc/$i/status;done | awk '{s+=} END {print s}'
17324

方法一

我们有“top”实用程序,它可以用作获取每个进程的交换利用率值的第一个工具。
默认情况下,'top' 不显示 SWAP 利用率,因此我们需要添加添加字段“SWAP”,然后将显示此值。

'top' 使用以下公式显示相关信息:

VIRT = SWAP + RES
即
SWAP = VIRT - RES

top的输出看起来像下面这样

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                             SWAP
 6735 dbmrun    20   0 19.324g 3.178g   4868 S   0.7  2.5 151:06.86 java                                                              364288
 2216 ssrun     20   0 24.737g 1.639g   2588 S   0.0  1.3  24:59.10 jsvc                                                              211668
 2214 ne3suser  20   0 12.719g 1.055g   5672 S   0.3  0.8  22:04.87 jsvc                                                              284028                                      
 2168 postgres  20   0  280636  35828  35516 S   0.0  0.0   0:23.95 postgres                                                             796
  757 root      20   0   53220  16856  16532 S   0.0  0.0   0:22.14 systemd-journal                                                        0
 1954 root      20   0  568732  11504    400 S   0.0  0.0   1:05.69 tuned                                                               1676
 1143 root      20   0  359164  10224   8812 S   0.0  0.0   0:35.86 rsyslogd                                                             216
 2010 root      20   0  188204   8284    780 S   0.0  0.0   1:25.03 amsHelper                                                           4592

如我们所见,最后添加了一个新列,展示了 SWAP 内存使用情况。

日期:2020-06-02 22:18:24 来源:oir作者:oir