SMBFS err : Cannot allocate memory

多重因素下 , 一直以來都是用 Windows 7 來當作 File Server . 去年從淘寶淘了一組”洋垃圾” , E5-2680 + 128G REG ECC DDR4 RAM , 硬體整個升級後 , 就肆無忌憚地在上面同時執行了 4 個 VM (by VirtualBox) , 並各自配置了16GB 的 RAM / 6 core CPU . 為了提升 VM的速度, 也去搞了一個 1TB SSD , 專門跑 VM 的 virtual disk file for OS ; 至於動態產生的檔案, 則是另外透過網芳 , 連接到 Windows 7 分享出來的 HDD 空間了 ….

也就是這樣 , Windows 7 同時就得應付 4 個 VM 的 “USER” folder , 同時也提供硬碟空間來讓 FreeBSD 定期做異機備份 …. 就這樣 , 發生 FreeBSD 透過 smbfs 掛上系統時, 發生了報錯 :Cannot allocate memory  . 即便之前就已經掛上了 , 使用一陣子後, 也是會發生一樣的報錯 .

搜了許多方法 ,  包括修改 Registry 中的 IRPStackSize , MaxWorkItems , MaxMpxCt ..通通都沒有實際上的效果 . 而重啟網芳 service 這方式雖然有效 , 但卻也是使用一陣子後就又出現報錯 Cannot allocate memory 了 :
net stop lanmanserver /y
net start lanmanserver
真是開甚麼玩笑 , 我安裝了 128GB RAM , 包括本身需要的 memory , 啟動 4 個  VM 後 , 總共也才用掉了約 76GB 的  RAM , 怎可能會有這樣的問題 . 奇特的是 , 其它的 Windows 卻可以正常連上 . 唯獨透過 mount_smbfs 是 NG 的 . 當然, 同時 , mount_smbfs 去掛載其它的 Windows 分享出來的資源也是順利的 ! 雖然我很清楚 Windows 7 同時只能被 20 個 user 使用網芳 , 但事實上就沒那麼多連線阿 ! 透過 net session 看, 確實是就只有 4-5 個連線 .

最後找到 2 個參數可以修改 , 也有了具體的效果 !

1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size
類型: DWORD (32-bit)
可能值:
1(最小,適合一般桌面環境)
減少 Windows 7 分配給檔案共享(SMB 伺服器)的緩衝區與資源,將更多記憶體留給本機應用程式。
2(平衡模式,Windows 7 預設值)
讓系統在檔案共享和應用程式運行之間取得平衡,適合 中小型檔案共享環境。
3(最大,適合伺服器用途)
提高 SMB 服務的記憶體與緩衝資源,適合 大量檔案共享的環境,但會減少 Windows 7 分配給其他應用程式的記憶體。

—> 我從 1改成 3

2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache
類型: DWORD (32-bit)
可能值:
0(預設)➡ 適用於工作站模式(Workstation)
Windows 7 預設設定,表示系統主要將記憶體保留給應用程式使用,而非檔案系統快取。
1 ➡ 適用於伺服器模式(Server)
Windows 會將較多的 RAM 分配給檔案系統快取(System Cache),適合檔案伺服器用途。

–> 我從0 改成 1

這樣做, 就是把這台主機的運作從 Workstation 風格轉換成 Server 風格 ! 當然 , 20 個連線數的限制應該還是在的 !

Share your vote!


Do you like this post?
  • Fascinated
  • Happy
  • Sad
  • Angry
  • Bored
  • Afraid

Leave a Reply

Your email address will not be published. Required fields are marked *


Please help to input verification code