不久前 sudo 在我们的服务器上开始表现得很慢。有时我们甚至必须等待几分钟才能执行。
我已经检查了论坛中所有主机名和 dns 原因,但问题仍然存在。我可以确认,服务器名称已在此服务器上正确解析。
使用 strace 调试 sudo 会得到以下有趣的结果:
0.000080 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
0.000153 lseek(3, 0, SEEK_CUR) = 0
0.000044 fstat(3, {st_mode=S_IFREG|0644, st_size=1809, ...}) = 0
0.000060 mmap(NULL, 1809, PROT_READ, MAP_SHARED, 3, 0) = 0x7f91b3dd3000
0.000042 lseek(3, 1809, SEEK_SET) = 1809
0.000057 munmap(0x7f91b3dd3000, 1809) = 0
0.000038 close(3) = 0
0.000077 getgroups(0, NULL) = 1
0.000039 getgroups(1, [0]) = 1
0.000045 getcwd("/home/myself", 4096) = 12
0.000053 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
0.000184 fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 6), ...}) = 0
0.000111 readlink("/proc/self/fd/0", "/dev/pts/6", 4095) = 10
0.000095 stat("/dev/pts/6", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 6), ...}) = 0
0.000079 uname({sys="Linux", node="OUR-SERVER", ...}) = 0
0.000072 ioctl(2, TIOCGWINSZ, {ws_row=65, ws_col=205, ws_xpixel=0, ws_ypixel=0}) = 0
0.000055 socket(PF_NETLINK, SOCK_RAW, 0) = 3
0.000044 bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
0.000042 getsockname(3, {sa_family=AF_NETLINK, pid=43381, groups=00000000}, [12]) = 0
0.000042 sendto(3, "\24\0\0\0\22\0\1\3T\373\206S\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
0.418298 recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$\2\0\0\20\0\2\0T\373\206Su\251\0\0\0\0\0\3\0\3339\0\321\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, ms
0.000160 recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\340\3\0\0\20\0\2\0T\373\206Su\251\0\0\0\0\376\377\0\2639\0\321\20\1\0\0\0\0\0"..., 4096}], msg_controll
...
最后 2 条 recvmsg 行重复了大约 4000 次!这个 4000 个套接字接收是造成这种减慢的原因(注意第一次调用的时间 - 这些只是前 2 个......)。
我们的服务器是 ubuntu 12.04,带有 sudo 1.8.3p1。
我什至检查了这个 sudo 版本的来源,并且这些套接字调用不存在......请帮助:)
答案1
这就是问题所在:https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1272414
我们的服务器上有很多 ipip 隧道,因此 sudo 尝试探测所有接口。
具有适当忽略的新版本解决了问题。