Gnome Shell 和高 CPU 使用率

ToX*_* 82 5 gnome cpu top strace

我在旧的(ish)笔记本电脑上运行 ubuntu 18.04,它是带有升级内存(16GB)和 SSD 的 hp dv7 6180sl。它很旧,但对于我的工作来说仍然足够快。

由于有几个 ubuntu 版本(我总是在每个版本中完全重新安装,所以我不是来自旧版本)看起来 cpu 从来没有真正空闲过,因此粉丝们一直在工作。今天我决定找出正在使用我的cpu的东西。

我在这里和谷歌上阅读了很多答案,但没有什么能真正解决我的问题。顶是这样说的:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
5501 tox       20   0 3911436 324668  68984 S  12,5  4,0  30:04.86 gnome-shell 
Run Code Online (Sandbox Code Playgroud)

以 gnome-shell 的 PID 为例,我试图做一个 strace 来看看幕后发生了什么,我看到有一个recvmsg系统调用会产生大量错误,几乎占用了 30% 的时间(这是大约一分钟后):

strace: Process 5501 attached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
29.71    0.100941           2     46612     39214 recvmsg
24.81    0.084290           5     17842           poll
22.21    0.075445           3     21796           ioctl
8.92    0.030304           4      7269           writev
3.72    0.012652           8      1583        53 futex
3.17    0.010771           2      5180           getpid
1.58    0.005380           1      3874           mprotect
1.58    0.005357           3      2003           write
1.46    0.004969           3      1958           read
0.51    0.001727           8       215         2 openat
0.48    0.001634           3       501           close
0.45    0.001533           5       288           timerfd_create
0.32    0.001098           4       288           timerfd_settime
0.32    0.001072           6       183           mmap
0.26    0.000887           7       132       114 stat
0.25    0.000838           2       426           fstat
0.11    0.000370           2       213           fcntl
0.08    0.000267          10        26           munmap
0.06    0.000191           1       146           getrusage
0.00    0.000001           0         4         1 recvfrom
0.00    0.000001           1         2           uname
0.00    0.000001           1         1           restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.339729                110542     39384 total
Run Code Online (Sandbox Code Playgroud)

这是我应该担心的事情吗?

小智 3

自从安装 18.04 以来,我在 gnome-shell 上一直有类似的高 CPU 负载,但没有明确的原因。我认为它只是模糊了引擎盖下的某些东西,例如 Firefox 视频渲染,但即使关闭每个程序并且不移动鼠标,它也不会真正下降到接近零的位置。

我尝试了相同的 strace 并得到了类似的结果:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 39.61    0.240174           3     87585     76642 recvmsg
 25.36    0.153778           6     27384           poll
  9.07    0.054990           3     17502           ioctl
  8.98    0.054434           3     18079           write
  7.98    0.048402           5      9702           writev
  3.29    0.019926           3      6640           read
  2.20    0.013369           1      8942           getpid
  1.32    0.008014           6      1352        59 futex
  0.91    0.005530           2      2634           mprotect
  0.23    0.001413          20        72           mmap
  0.21    0.001299           4       353           close
  0.21    0.001272           5       240           timerfd_create
  0.17    0.001043          10       101         2 openat
  0.17    0.001010           4       240           timerfd_settime
  0.09    0.000518           1       420       360 stat
  0.07    0.000432           2       198           fstat
  0.06    0.000374           9        41           munmap
  0.03    0.000192           2       124           getrusage
  0.03    0.000184           2        99           fcntl
  0.00    0.000006           2         4           recvfrom
  0.00    0.000004           1         7           sendmsg
  0.00    0.000004           1         7           ftruncate
  0.00    0.000004           1         7           memfd_create
  0.00    0.000003           2         2           uname
  0.00    0.000001           0         7           lseek
  0.00    0.000000           0         1           restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.606376                181743     77063 total
Run Code Online (Sandbox Code Playgroud)

这很糟糕,我的所有程序都以大约 1 秒的间隔出现口吃。它是如此一致,我已经习惯了补偿它。视频播放卡顿、游戏卡顿、火狐卡顿,相当烦人。不知道从哪里开始修复它,尽管杀死 gnome-shell 并重新启动它至少可以工作一段时间——仍然有错误,但响应更快。

左侧的侧栏经常也会出现重叠图标等问题,我怀疑 gnome-shell 会出现一些累积错误,并且在某些时候它会花费大量 CPU 时间来尝试解决某些配置或边缘之间的严重交互矛盾案子什么的。我想现在我只希望 18.10 能好一点。