我正在使用 Ubuntu 20.04。我正在尝试获取 postgres 进程(及其所有子进程)的 IO 和 BlockIO。
`systemctl status [email protected]`
显示使用的内存和 CPU 时间,但没有输入输出:
[email protected] - PostgreSQL Cluster 14-main
Loaded: loaded (/lib/systemd/system/[email protected]; enabled-runtime; >
Active: active (running) since Tue 2021-12-14 17:13:19 WET; 2min 21s ago
Process: 1285 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 14>
Main PID: 1395 (postgres)
Tasks: 11 (limit: 37513)
Memory: 263.2M
CPU: 32.372s
CGroup: /system.slice/system-postgresql.slice/[email protected]
├─1395 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/>
├─1442 postgres: 14/main: checkpointer
├─1444 postgres: 14/main: background writer
├─1445 postgres: 14/main: walwriter
├─1446 postgres: 14/main: autovacuum launcher
├─1447 postgres: 14/main: stats collector
├─1448 postgres: 14/main: TimescaleDB Background Worker Launcher
├─1449 postgres: 14/main: logical replication launcher
├─1450 postgres: 14/main: TimescaleDB Background Worker Scheduler
├─1453 postgres: 14/main: TimescaleDB Background Worker Scheduler
└─5990 postgres: 14/main: postgres tsenergydata 127.0.0.1(55312) I>
首先,我尝试了以下方法:
- 在下
/etc/systemd/system.conf
,我将 IO 会计选项设置为是:
DefaultIOAccounting=yes
DefaultBlockIOAccounting=yes
- 然后重新启动系统。
但是,这似乎并没有什么区别。IO 没有显示。
然后,我尝试过:systemctl --all --full show [email protected]
- 输出实际上显示了 I/O 的值:
IOReadBytes=18446744073709551615
IOReadOperations=18446744073709551615
IOWriteBytes=18446744073709551615
IOWriteOperations=18446744073709551615
- 但是,这些值似乎没有任何意义(似乎在 PB 范围内)。我什么也没做,只是启动了 postgres。这肯定不会产生这么多的 IO。此外,读取、写入和操作的值都相同,这似乎很可疑。
systemctl show
CPU 和内存显示的值与使用systemctl status
命令显示的值相同。因此并非所有值都超出图表范围。
有没有办法获取特定服务的 IO(即使该服务使用多个进程)?
我正在寻找比循环proc/$pid/io
并添加每个相关过程的读/写更直接的方法。