系统��新到17.04版本后,发现systemd-resolve占用CPU过高。

我最近将我的Xubuntu从16.10升级到17.04。
除了systemd-resolve之外,一切都运行正常。有时候它会导致CPU使用率过高,我不知道为什么会出现这个问题。
以下是top命令的输出:
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                               
  1114 systemd+  20   0   51532   6744   4504 R   100  0.0   9:51.67 systemd-resolve                       
  1152 dnsmasq   20   0   64360   2892   2480 R  38.9  0.0   4:05.53 dnsmasq                               
  1245 root      20   0  376644  89644  64436 S   1.7  0.5   0:35.69 Xorg                                  
  1624 asus      20   0  370160  45820  28488 S   0.7  0.3   0:00.90 python2                               
  2238 asus      20   0 2562816 553112 128492 S   0.7  3.4   2:41.20 firefox                               
    16 root      20   0       0      0      0 S   0.3  0.0   0:01.05 ksoftirqd/1                           
   708 root     -51   0       0      0      0 S   0.3  0.0   0:01.20 irq/95-ELAN1000                       
  1302 root     -51   0       0      0      0 S   0.3  0.0   0:03.68 irq/142-nvidia                        
  1734 asus      20   0  483388  11060   8560 S   0.3  0.1   0:05.45 conky                                 
  2820 root      20   0       0      0      0 S   0.3  0.0   0:00.14 kworker/5:1                           
  3420 asus      20   0   53384   3932   3200 R   0.3  0.0   0:00.76 top                                   

我不知道为什么会发生这个问题,但通常在运行一些命令时会出现,比如sudo apt update
(我正在使用tor和obfs4proxy,这可能对回答有帮助)
4个回答


5这个方法起作用了,但是后来我没有DNS,无法通过名称访问网站。 - abalter
@abalter 我的问题主要是systemd-resolve和dnsmasq之间出现了一个循环,所以关闭其中一个对我有用。如果你仍然遇到这个问题,我很好奇你的top命令显示的情况,是否揭示了systemd-resolve和其他实用程序之间的循环。 - MetricMike
是的,这个“resolved”和dnsmasq做的事情一样吗?我们应该永久禁用其中一个吗?因为拥有两个本地DNS解析器真的没有太多意义(说实话,我对一个都不太确定,但我决定顺其自然,不自定义我的配置)。 - Ivan Anishchuk
哇哦...感觉太好了。当我重新启动systemd-resolved时,我的CPU风扇安静下来了...但现在Chrome似乎占用了100%的资源? - Jonny Asmar
1是的 - 这个解决方案似乎有一些不良副作用(包括导致Thunderbird崩溃)... 参考MarkAckerman的回答,对我起了作用的技巧在下面。 - Jonny Asmar
这个改变之后,我无法访问任何网站。 - ubuntu_uk_user

导致其他应用程序出现问题(在我的情况下是TeamViewer)
另一个人建议的解决步骤
DNSMASQ_EXCEPT=lo这一行添加到/etc/default/dnsmasq文件中。
sudo nano /etc/default/dnsmasq

通过以下方式重新启动dnsmasq
sudo service systemd-resolved restart

如果我帮到你了,请说声谢谢。这个方法已经恢复正常,不会再对其他应用程序搞破坏,就像之前的方法那样。
祝好,马克

1sudo nano 不是编辑配置文件的正确方式,应该使用 sudoedit。而 systemctl 是使用 systemd 重新启动服务的方法。尽管如此,对我来说它并不起作用,我仍然看到 CPU 使用率达到了100%。 - Ivan Anishchuk
这样做不就有效地禁用了dnsmasq吗?为什么不彻底禁用它呢? - Ivan Anishchuk
@IvanAnishchuk 你说对了一半。它确实禁用了DNSMasq的DNS机制,但它也有一个DHCP机制。 - Moshe

systemd-resolved 在有人修改文件 /etc/resolv.conf 的时候会变得混乱,而该文件本应指向自己的监听地址 127.0.0.53。
那个人可以是任何由网络事件触发的脚本(如 VPN 连接、断开连接、DHCP 等)。
如果你将 nameserver 设置回 127.0.0.53,那么 systemd-resolved 几秒钟后就会"平静"下来。
假设每个人都遵守规则,并且只使用 resolvconf 来修改解析器的配置,你也可以这样做:
文件 /etc/resolvconf/interface-order 指定了使用名称服务器的顺序,取决于它们来自哪个网络接口。
如果你在文件顶部添加了一个 systemd-resolved 的条目,它将始终被优先考虑,文件将不会被修改。

2所以,上面的两个答案最终都让我失望了。但是这个答案表现得正如预期一样。它恢复了我的resolv.conf文件(nameserver被设置为127.0.0.1,原因不明)。甚至不需要重新启动systemd,一切都恢复平静了。现在我正在观察我的进程,dnsmasq再次消失在了视线之外,就像应该的那样!这个答案应该被接受。谢谢@xalkina! - Jonny Asmar
1这个问题在重启后似乎会再次出现... 有什么想法是什么在修改我的 resolv.conf 吗? - Jonny Asmar
1这个解决方案对我来说也行(而前面两个不行) - Alex Hoppus

我在18.04版本中遇到了同样的问题。systemd-resolved和dnsmasq倾向于循环。我是这样解决的:
在/etc/default/dnsmasq中添加或取消注释以下行:
IGNORE_RESOLVCONF=yes

创建您自己的resolv文件(/etc/resolv.personal),以定义名称服务器。您可以在此处使用任何名称服务器。我从OpenNIC中选择了两个。
nameserver 5.132.191.104
nameserver 103.236.162.119

/etc/dnsmasq.conf中添加或取消注释以下行:
resolv-file=/etc/resolv.personal

然后重新启动dnsmasq并禁用默认解析器:systemd-resolved
sudo service dnsmasq restart
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

这解决了我的问题:在Ubuntu 18上,systemd-resolved(高CPU)+ lxc-net - yurenchen