![当 Windows 8 客户端连接时,SMBD 守护进程的 CPU 使用率达到 100%](https://linux22.com/image/606487/%E5%BD%93%20Windows%208%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%BF%9E%E6%8E%A5%E6%97%B6%EF%BC%8CSMBD%20%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E7%9A%84%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87%E8%BE%BE%E5%88%B0%20100%25.png)
我有一台运行 Ubuntu 12.04 的服务器,它作为 Samba 服务器运行。文件系统是物理驱动器 LVM 池上的 XFS 格式的虚拟驱动器。
我最近将我们的客户端升级到了 Windows 8,我注意到客户端连接 Ubuntu 服务器上的 SMB 共享时有 6-8 秒的延迟。使用 Windows 7 时,不会出现这种延迟。在 Ubuntu 服务器上,在首次连接共享时,SMBD 进程的 CPU 使用率会在几秒钟内达到 100%。
strace
显示 smbd 在该连接期间反复打开 /etc/passwd。我的客户端应以访客身份连接(无需身份验证)。
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 28
_llseek(28, 0, [0], SEEK_CUR) = 0
fstat64(28, {st_mode=S_IFREG|0644, st_size=1568, ...}) = 0
mmap2(NULL, 1568, PROT_READ, MAP_SHARED, 28, 0) = 0xb6de2000
_llseek(28, 1568, [1568], SEEK_SET) = 0
fstat64(28, {st_mode=S_IFREG|0644, st_size=1568, ...}) = 0
munmap(0xb6de2000, 1568) = 0
close(28) = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 28
_llseek(28, 0, [0], SEEK_CUR) = 0
fstat64(28, {st_mode=S_IFREG|0644, st_size=1568, ...}) = 0
mmap2(NULL, 1568, PROT_READ, MAP_SHARED, 28, 0) = 0xb6de2000
_llseek(28, 1568, [1568], SEEK_SET) = 0
fstat64(28, {st_mode=S_IFREG|0644, st_size=1568, ...}) = 0
munmap(0xb6de2000, 1568) = 0
close(28)
... repeats over and over ...
我知道 Windows 8 中的 SMB 实现自 Windows 7 以来已经发生了变化。我可以对 smb.conf 进行哪些更改来解决 CPU 使用率激增的问题?
答案1
通过在 smb.conf 中进行以下更改,我可以解决从 Windows 8 登录的延迟问题:
encrypt passwords = yes