跳转至

pidstat 内存相关选项

[root@VM-0-16-centos ~]# pidstat -r  -t | head -n 10
Linux 5.14.0-202.el9.x86_64 (VM-0-16-centos)    12/02/2024      _x86_64_        (4 CPU)

11:24:18 AM   UID      TGID       TID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
11:24:18 AM     0         1         -      2.74      0.00  169556   13612   0.18  systemd
11:24:18 AM     0         -         1      2.74      0.00  169556   13612   0.18  |__systemd
11:24:18 AM     0       527         -      0.00      1.77  418960  311196   4.09  systemd-journal
11:24:18 AM     0         -       527      0.00      1.77  418960  311196   4.09  |__systemd-journal
11:24:18 AM     0       540         -      0.00      0.00   31452    9184   0.12  systemd-udevd
11:24:18 AM     0         -       540      0.00      0.00   31452    9184   0.12  |__systemd-udevd
11:24:18 AM    32       745         -      0.00      0.00   13288    5448   0.07  rpcbind

输出字段说明:

  • UID:用户ID,指示哪个用户拥有该线程。
  • TGID:线程组ID,即进程ID(PID)。
  • TID:线程ID,如果为 - 表示这是一个进程,而非具体的线程。
  • minflt/s:每秒钟的轻页错误数(页面未在内存中,需要从磁盘加载)。
  • majflt/s:每秒钟的重页错误数(需要从磁盘读取页面,且对性能有较大影响)。
  • VSZ:进程/线程使用的虚拟内存的总大小(KB)。
  • RSS:进程/线程占用的实际物理内存大小(KB)。
  • %MEM:线程或进程占用的物理内存百分比。
  • Command:执行该进程或线程的命令。

minflt/smajflt/s 的正确含义:

  • minflt/s(轻页错误,minor page faults):
  • 这是 轻页错误 的数量,它表示进程请求的内存页面已经被缓存(即已经在内存中),但是没有找到在进程的本地虚拟内存空间中。因此,操作系统需要将页面从 页缓存(Page Cache) 或其他已经存在的内存区域中加载到进程的虚拟内存空间中。
  • 换句话说,轻页错误 通常不涉及磁盘 I/O,它只是内存中的重新定位或缓存命中。
  • majflt/s(重页错误,major page faults):
  • 这是 重页错误 的数量,它表示进程请求的内存页面不在内存中,也没有被缓存,操作系统需要从磁盘上的 交换空间(Swap) 或直接从磁盘读取文件数据(如果是文件映射到内存)来加载该页面。
  • 重页错误 需要进行磁盘 I/O,因此比轻页错误更昂贵,因为涉及到从磁盘读取数据。

何时认为是有问题?

  • 轻页错误minflt/s 较大并不一定意味着有问题,除非其数值异常高(如上千次每秒)。如果应用程序对大量数据进行随机访问或加载数据,这类错误可能会增多,但通常不会对性能产生显著影响。
  • 重页错误majflt/s 的值如果超过 10-20 次每秒,并且持续发生,就需要引起注意。这可能表明:
  • 系统内存不足,导致频繁的交换操作;
  • 需要优化程序的内存管理;
  • 需要增加物理内存或配置更多的交换空间。

  • 轻页错误(minflt/s:较高的数字通常不会影响性能,除非数值非常大。

  • 重页错误(majflt/s:如果频繁发生(例如每秒 10 次以上),通常表示系统内存不足,可能影响性能,应考虑增加内存或优化内存使用。