我正在尝试学习基本的 systemd 用法,但遇到了用户服务单元令人困惑的问题。
当使用systemctl start some.service运行普通服务时,我可以通过运行sudo journalctl --unit some.service找到该服务的完整日志(包括它打印到 stdout / stderr 的内容,据我所知)。
考虑示例服务文件chatty.service:
[Service]
ExecStart=/usr/bin/echo "test from chatty.service"
Run Code Online (Sandbox Code Playgroud)
当我将此服务文件放在~/.config/systemd/user/chatty.service并使用systemctl --user start chatty.service运行它时,我无法在 journalctl 中找到发送到 stdout 的输出,无论是使用普通的journalctl还是使用journalctl - -用户。我只在两者中得到以下输出:
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Starting chatty.service...
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Started chatty.service.
Run Code Online (Sandbox Code Playgroud)
并且journalctl --unit chatty.service根本不返回任何内容(有或没有 --user 没有区别)。
如果我将相同的服务文件移动到/etc/systemd/system并使用sudo systemd start chatty.service运行它,那么当我运行sudo journalctl --unit chatty.service时,我会得到以下输出:
Jan 15 19:28:08 …Run Code Online (Sandbox Code Playgroud) 通过运行 top、htop、uptime 等,我们可以看到平均负载为三个值,表示过去 1/5/15 分钟的平均负载(实际上不是,但这不是这里的问题)。
有时我会注意到过去 15 分钟的平均负载相当高,但当前负载非常低。是否有实用程序/程序可以列出在过去 1/5/15 分钟(或其他类似时间段)内消耗最多 CPU 时间的进程(即使它们不再存在)?
我知道平均负载也可能是由等待 I/O 的进程引起的,但我最感兴趣的是看到最消耗 CPU 的应用程序(尽管能够看到历史 I/O 也很好)。
据我所知,运行 htop 并按时间排序在这里对我没有帮助,因为如果计算机已经运行了一段时间,那么最高值不一定与最近的过去有关。
以下三个输出基本上是同时进行的:
最佳:
top - 02:54:36 up 2 days, 13:50, 3 users, load average: 0.05, 0.05, 0.09
Tasks: 181 total, 1 running, 179 sleeping, 0 stopped, 1 zombie
%Cpu(s): 2.5 us, 0.8 sy, 0.0 ni, 96.6 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 16158632 total, 11234480 used, 4924152 free, 844 buffers
KiB Swap: 16777212 total, 0 used, 16777212 free, 10640832 cached
Run Code Online (Sandbox Code Playgroud)
免费-h:
total used free shared buffers cached
Mem: 15G 10G 4.7G 0B 844K 10G
-/+ buffers/cache: …Run Code Online (Sandbox Code Playgroud)