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/s 和 majflt/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 次以上),通常表示系统内存不足,可能影响性能,应考虑增加内存或优化内存使用。