问题:
- 运行 sudo 命令最多需要 30 秒才能执行。所花费的时间并不一致,有时如果之前调用过该命令,该命令会很快返回,但大多数情况下它花费的时间比应有的时间长得多。此外,当 sudo 运行时离开网络上,它立即响应,但是一旦我将机器连接到我的WIFI,它就变得很慢。
环境
- 操作系统:Redhat7企业Linux
- 硬件:惠普 Zbook G3
- 智能卡身份验证已启用
sudo -V
:
Sudo version 1.8.6p7 Sudoers policy plugin version 1.8.6p7 Sudoers file grammar version 42 Sudoers I/O plugin version 1.8.6p7
尝试过但失败的解决方案:
- 主机名位于 /etc/hosts 的两行中
- 运行
sudo strace -f -t sudo echo
证明第一个sudo是挂起的,第二个sudo命令按预期正常执行。 - 我更改了 strace 的权限,这样我就可以作为我的用户名运行它,所以我运行
strace -f -t sudo echo
并发现命令立即返回,并且没有挂起。这是不幸的,因为我似乎无法在 sudo 命令上运行 strace 来查看我陷入困境的地方。
答案1
sudo
延迟通常是由 DNS 问题引起的。
http://forums.fedoraforum.org/showthread.php?t=210503
一名用户也因该问题而出现了类似的 2 分钟延迟:http://forums.fedoraforum.org/showpost.php?s=93387b186c8850e6837cea5f7a43457c&p=1194582&postcount=2
因此,这是我的第一线调查。您可以尝试检查一下time getent hosts $(hostname)
,看看是否有延迟。
注意:我的理解是这种情况不断发生的原因已在上游得到修复。如果您能记下sudo
您的发行版使用 的版本,那将非常有趣。https://bugzilla.redhat.com/show_bug.cgi?id=479464#c9
否则,确认问题发生在 的内部 sudo 上sudo time sudo echo
。然后你可以尝试跑步sudo strace -t -f sudo echo
。会有很多输出,但会带有时间戳。您将看到一些花费了延迟的系统调用,例如recvmsg(接收消息,可能等待超时,可能是DNS 响应)。完整的解释需要编程知识。如果某些东西通过 dbus 进行,那么我想它不会具体显示哪个 dbus 服务。 (随意将完整输出发布到某处并链接到它 - dropbox.com、gist.github.com 等)。