如何查找 gnome-shell CPU 使用率高的原因?

如何查找 gnome-shell CPU 使用率高的原因?

我使用的是 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

造成这种情况的原因可能有多种:

  1. 带秒针的时钟:

    gsettings set org.gnome.desktop.interface clock-show-seconds false
    
  2. indicator-multiload(在栏目中监控 CPU 等的使用情况)

    进程可以在菜单中命名:系统负载指示器

    只需停止进程(或在停止之前)禁用自动启动选项。设置更长的探测时间也有帮助,但例如 10 秒会使整个应用程序变得毫无用处。

  3. 任何具有“实时”监控、磁盘、CPU、网络的东西。

答案3

对于遇到类似问题的人。请检查您正在使用。Xorg 或 wayland。如果将 wayland 更改为 xorg,则一切正常。

答案4

indicator-multiload即使我将刷新时间设置为 10 秒,我也使用它来占用过多的 CPU。

我将其删除apt,然后安装,gnome-system-monitor它可以执行相同的操作,但效率更高。

相关内容