我使用的是 Linux Fedora 23,最近我注意到我的gnome-shell
进程一直占用 100% 的 CPU(报告者htop
,没有可见的应用程序在运行)。有一些提示涵盖了一些解决错误的解决方法gnome-shell
(停用背景徽标、重新对齐显示器),但都无济于事。
我试着跑
perf top
其中报告了以下符号中最多的工作:
22.55% [kernel] [k] acpi_ns_search_one_scope
11.41% [kernel] [k] acpi_ex_system_memory_space_h
5.27% [kernel] [k] _raw_spin_lock_irqsave
5.23% [kernel] [k] _raw_write_unlock_irqrestore
3.52% [kernel] [k] acpi_ut_update_object_referen
...
然后我尝试仔细观察这个gnome-shell
过程
perf record -g -p PID
perf report -g
但输出似乎没用:
Children Self Command Shared Object Symbol
- 29.08% 0.00% gnome-shell [unknown] [.] 000000000
- 0
+ 55.88% 0
+ 8.25% 0x85a81
+ 6.87% 0x2
+ 5.94% 0x4
+ 4.60% 0x889fc
3.32% 0x656c6261
+ 2.39% 0x8feab
2.23% 0x88467
+ 1.26% 0x190800002800
+ 1.24% 0xffad7fa800100008
1.23% 0xc82ca96051913c58
1.20% 0x5602c82afa00
+ 1.18% 0x1
1.16% 0x89e84
1.10% 0x5602c7c68830
1.08% 0x5602c900736e
+ 1.08% 0x7ffe4bfd1001
- 21.48% 0.00% gnome-shell [kernel.kallsyms] [k] entry_SYS
- entry_SYSCALL_64_fastpath
+ 43.62% __GI___ioctl
+ 18.92% 0xf6fdd
+ 12.90% __GI___libc_open
+ 5.21% 0xfb4d
+ 3.92% __GI___libc_recvmsg
+ 2.89% _IO_file_read
+ 2.75% __socket
+ 2.74% __GI___libc_read
+ 1.41% __GI___mmap64
+ 1.39% __GI___libc_recvmsg
1.30% 0x103b73
+ 0.77% __GI___writev
0.74% __statfs
+ 0.74% _IO_file_open
0.71% __GI___munmap
+ 9.37% 0.00% gnome-shell libc-2.22.so [.] __GI___io
+ 9.37% 0.00% gnome-shell [kernel.kallsyms] [k] sys_ioctl
您能提示我该怎么做才能检查我的系统上发生了什么吗?
我在 Skylake i5 6260u 上,搭载 Intel Iris 540,Fedora 运行内核 4.3.3-300.fc23.x86_64
答案1
也许尝试使用审计,大致如下:
sudo yum install auditd # sudo apt install auditd on Debian
sudo auditctl -a exit,always -S all -F pid=1234 & sleep 15
sudo auditctl -d exit,always -S all -F pid=1234
less /var/log/audit/audit.log
这将安装并启动 auditd,设置策略以捕获您的 PID(示例中为 1234)的系统调用信息,等待一小段时间以捕获大量信息,然后删除审计策略。仔细查看 gnome-terminal PID 的 auditd.log,您可能会更好地了解它正在忙着做什么。
另一个快速查看进程花费时间的工具是strace
,等待一小段时间,然后点击Ctrl + C:
$ sudo strace -c -p 1234
strace: Process 1234 attached
^Cstrace: Process 1234 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
56.98 0.003496 388 9 clone
17.19 0.001055 8 135 rt_sigprocmask
6.19 0.000380 21 18 9 wait4
4.58 0.000281 16 18 close
3.80 0.000233 26 9 read
3.47 0.000213 24 9 stat
3.37 0.000207 23 9 9 rt_sigsuspend
3.08 0.000189 21 9 pipe
1.34 0.000082 9 9 9 rt_sigreturn
------ ----------- ----------- --------- --------- ----------------
100.00 0.006136 225 27 total
然后,如果您想了解更多信息,请检查您正在查看的系统调用的相应手册页:
$ man -s2 clone
答案2
造成这种情况的原因可能有多种:
带秒针的时钟:
gsettings set org.gnome.desktop.interface clock-show-seconds false
indicator-multiload
(在栏目中监控 CPU 等的使用情况)进程可以在菜单中命名:系统负载指示器。
只需停止进程(或在停止之前)禁用自动启动选项。设置更长的探测时间也有帮助,但例如 10 秒会使整个应用程序变得毫无用处。
任何具有“实时”监控、磁盘、CPU、网络的东西。
答案3
对于遇到类似问题的人。请检查您正在使用。Xorg 或 wayland。如果将 wayland 更改为 xorg,则一切正常。
答案4
indicator-multiload
即使我将刷新时间设置为 10 秒,我也使用它来占用过多的 CPU。
我将其删除apt
,然后安装,gnome-system-monitor
它可以执行相同的操作,但效率更高。