今天早上:
# systemctl status udev
? systemd-udevd.service - udev Kernel Device Manager
Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
Active: active (running) since Sat 2021-03-13 12:08:58 CET; 5 days ago
Docs: man:systemd-udevd.service(8)
man:udev(7)
Main PID: 451 (systemd-udevd)
Status: "Processing..."
Tasks: 1
Memory: 4.5M
CPU: 6.038s
CGroup: /system.slice/systemd-udevd.service
└─451 /lib/systemd/systemd-udevd
刚才(同一系统 - 带有 Ubuntu16LTS 的 VM):
# systemctl status udev
? systemd-udevd.service - udev Kernel Device Manager
Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
Active: active (running) since Sat 2021-03-13 12:08:58 CET; 5 days ago
Docs: man:systemd-udevd.service(8)
man:udev(7)
Main PID: 451 (systemd-udevd)
Status: "Processing..."
CGroup: /system.slice/systemd-udevd.service
└─451 /lib/systemd/systemd-udevd
请注意省略了Tasks:
、Memory:
和CPU:
行。
这里有什么变化?(我并没有故意改变任何东西……)
编辑:ps
输出看起来不引人注目:
# ps l 451
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 451 1 20 0 45672 4732 ep_pol Ss ? 0:01 /lib/systemd/systemd-udevd
我认为这与此无关,udev
而是systemd
因为我也可以在其他服务中看到同样的效果(缺少 CPU 等)。
编辑#2:systemctl --version
报告 229。
# systemctl show udev | grep Accounting
CPUAccounting=no
BlockIOAccounting=no
MemoryAccounting=no
TasksAccounting=no
# cgmanager
The program 'cgmanager' is currently not installed.
输出摘录findmnt
:
/sys/fs/cgroup
├─/sys/fs/cgroup/systemd
├─/sys/fs/cgroup/memory
├─/sys/fs/cgroup/blkio
├─/sys/fs/cgroup/cpu,cpuacct
├─/sys/fs/cgroup/pids
├─/sys/fs/cgroup/net_cls,net_prio
├─/sys/fs/cgroup/freezer
├─/sys/fs/cgroup/devices
├─/sys/fs/cgroup/cpuset
├─/sys/fs/cgroup/hugetlb
└─/sys/fs/cgroup/perf_event
编辑#3:重新启动相关虚拟机后,我再次获得了测量结果,但会计功能仍然处于禁用状态:
# systemctl show udev | grep Accounting
CPUAccounting=no
BlockIOAccounting=no
MemoryAccounting=no
TasksAccounting=no
# systemctl status udev
...
Main PID: 444 (systemd-udevd)
Status: "Processing..."
Tasks: 1
Memory: 18.9M
CPU: 4.211s
CGroup: /system.slice/systemd-udevd.service
└─444 /lib/systemd/systemd-udevd
因此,这些值看起来不像是由会计设置生成的。
甚至全局默认值也是关闭的:
# systemctl show | grep Accounting
DefaultCPUAccounting=no
DefaultBlockIOAccounting=no
DefaultMemoryAccounting=no
DefaultTasksAccounting=no
答案1
内存使用情况通过选项报告MemoryAccounting=
,该选项从 v238 开始默认启用(除非发行版另有选择),当然也可以由需要设置内存限制的单个单元启用。此选项使用“内存”cgroup 控制器,似乎适用于 v1 和 v2 层次结构。
如果使用“统一”(仅限 v2)cgroup 层次结构,则从内核 v4.15 及更高版本上的 v240 开始,默认会报告 CPU 使用率。在旧版本中,可以使用CPUAccounting=
每个单元启用它,但影响更大,因为在 4.15 之前,“CPU”cgroup 控制器是获取此信息所必需的。
TasksAccounting=
使用“pids”cgroup 控制器的选项也会报告任务数量。
所有三个功能都可以全局启用(在 systemd/system.conf 中)或按单元启用。它们也可以针对正在运行的服务动态更改。当然,如果其他进程(例如 cgmanager)干扰 cgroup 控制器分配,或者这些控制器突然从 /sys 中消失(检查findmnt
),或者 pid1 被 LSM 拒绝访问它们(坏主意),它们将停止工作。