smbd 程序處於不間斷睡眠狀態
我有執行 FreeBSD 10.1 的文件伺服器。伺服器的儲存由鏡像 ZFS 池中的兩個 HDD 組成。
該伺服器作為域成員執行 Samba 4.1。域控制器正在另一台伺服器 (Windows Server 2012) 上執行。我使用 winbind 進行 AD 集成。
問題是有時(實際上經常)smbd 會鎖定。從客戶的角度來看,Samba 共享沒有響應。
真正奇怪的是,在這種情況下,有問題的 smbd 程序會陷入 D 狀態:不間斷睡眠。我不明白是什麼原因造成的。我不在此伺服器上使用 NFS 掛載,所有 Samba 共享都位於本地 ZFS 池中。
這個問題特別煩人,因為我無法通過重新啟動 Samba 來解決它:凍結的 smbd 程序不響應 SIGKILL。唯一的解決方法是重新啟動。
以下是一些
ps aux
可以提供幫助的資訊:root 628 0.0 0.7 295348 22688 - Is 10:50AM 0:05.09 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf root 641 0.0 0.7 295856 22832 - I 10:50AM 0:01.66 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf p######### 812 0.0 0.9 326684 27132 - I 11:04AM 0:03.33 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 839 0.0 0.9 329220 27064 - D 11:07AM 0:07.86 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 939 0.0 0.8 324996 26208 - I 11:37AM 0:01.22 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 946 0.0 0.9 324988 26504 - I 11:40AM 0:02.12 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1077 0.0 0.8 325016 26232 - I 11:46AM 0:02.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1084 0.0 0.8 325640 26268 - I 11:49AM 0:01.17 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1107 0.0 0.9 326200 26864 - I 11:55AM 0:01.73 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1141 0.0 0.9 325960 26964 - I 12:02PM 0:02.20 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1167 0.0 0.9 326004 26608 - I 12:08PM 0:01.14 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1188 0.0 0.9 326192 27044 - I 12:11PM 0:01.03 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1195 0.0 0.9 326240 27080 - I 12:15PM 0:01.15 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1209 0.0 0.9 326256 26948 - I 12:20PM 0:01.62 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1250 0.0 0.8 322384 25768 - D 12:25PM 0:00.39 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf c######### 1257 0.0 0.8 322384 25908 - I 12:29PM 0:00.68 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf p######### 1773 0.0 0.8 322752 26004 - I 2:57PM 0:00.45 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf p######### 1805 0.0 0.8 322752 25188 - I 3:02PM 0:00.33 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf p######### 1809 0.0 0.8 322752 26040 - I 3:04PM 0:00.74 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf p######### 1819 0.0 0.8 326980 26276 - I 3:06PM 0:00.47 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf p######### 1825 0.0 0.8 322752 25952 - I 3:08PM 0:00.72 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf root 2134 0.0 0.9 323208 26608 - I 4:58PM 0:02.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf root 2160 0.0 0.8 322684 24588 - I 5:06PM 0:00.78 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf root 2236 0.0 0.9 332140 28256 - I 5:34PM 0:06.50 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
可以看出,在D-state有兩個smbd程序。使用 procstat 進一步檢查:
# procstat -t 1250 PID TID COMM TDNAME CPU PRI STATE WCHAN 1250 100817 smbd - 0 120 sleep zfs # procstat -k 1250 PID TID COMM TDNAME KSTACK 1250 100817 smbd - mi_switch sleepq_wait sleeplk __lockmgr_args vop_stdlock VOP_LOCK1_APV _vn_lock vacl_get_acl sys___acl_get_file amd64_syscall Xfast_syscall # procstat -t 839 PID TID COMM TDNAME CPU PRI STATE WCHAN 839 100819 smbd - 1 120 sleep filedesc 839 100820 smbd - 0 120 sleep zfs# # procstat -k 839 PID TID COMM TDNAME KSTACK 839 100819 smbd - mi_switch sleepq_wait _sx_slock_hard namei vn_open_cred zfs_getextattr VOP_GETEXTATTR_APV extattr_get_vp sys_extattr_get_file amd64_syscall Xfast_syscall 839 100820 smbd - mi_switch sleepq_wait sleeplk __lockmgr_args vop_stdlock VOP_LOCK1_APV _vn_lock knlist_remove_kq filt_vfsdetach knote_fdclose closefp amd64_syscall Xfast_syscall
procstat -f 839
無限期掛…我不知道可以從中得出什麼結論。我很確定我的 ZFS 池是乾淨的,因為我最近清理了它:
scan: scrub repaired 0 in 3h10m with 0 errors on Fri Apr 17 13:36:50 2015
兩個 HDD 都處於良好狀態。也許一些文件系統級別的損壞是擦洗無法檢測/修復的?有沒有辦法讓我看到 smbd 凍結的文件?
我有一個類似的配置,從 zfs 加入了 AD 共享伺服器,並且在 FreeBSD 10.1 和 11.0 以及 Samba 3 和 4 的幾個版本中遇到了“睡眠”問題。我開始注意到鎖定主要發生在現有的更改上文件,而不是創建或刪除。在執行了非常高的 samba 調試級別並在它們變成殭屍時擷取了幾個程序之後,我發現了一些導致我在 inotify 中查看問題的東西。將它添加到 samba 配置中已經結束了我一年半的問題。“核心更改通知 = 否”