私はfreebsdファイルサーバーを持っています
root@vstorage:~ # freebsd-version
11.1-RELEASE-p1
ここにいくつかの追加情報があります。
root@vstorage:~ # dmesg | grep CPU:
CPU: AMD Phenom(tm) 9750 Quad-Core Processor (2400.05-MHz K8-class CPU)
root@vstorage:~ # dmesg | grep memory
real memory = 8589934592 (8192 MB)
avail memory = 8001138688 (7630 MB)
Sambaクライアント:MacBook Pro-MacOSSierra-5GHzのACワイヤレスネットワークに接続されています。ギガビットルーターに接続されたファイルサーバー(Netgear Nighthawk x4 r7500)
以前持っていたubuntuファイルサーバー(この問題はありませんでした)を置き換えるために、このファイルサーバーを構築しました
ハイパーバイザーにNFS共有を提供し(正常に動作)、MacにSamba共有を提供しています。
Portsコレクションからsamba46
をインストールしました。これが私のsmb4.confです。
root@vstorage:~ # cat /usr/local/etc/smb4.conf
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = vstorage
wins support = Yes
security = user
passdb backend = tdbsam
socket options = TCP_NODELAY IPTOS_LOWDELAY
read raw = yes
write raw = yes
[data]
path = /data
valid users = nullmeta
writable = yes
browsable = yes
read only = no
guest ok = no
public = no
create mask = 0775
directory mask = 0775
共有はdata
と呼ばれるZFSプールであり、3TBのウエスタンデジタルレッドドライブが1つあります。
root@vstorage:~ # zpool status
pool: data
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
ada1 ONLINE 0 0 0
errors: No known data errors
pool: zroot
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
問題:
共有に問題なく接続できます。しかし、何かを転送しようとすると、すべてのメモリが消費されます。 2GBのファイルの転送中にtop
を実行している場合、メモリ使用量が増加するのを見ることができます。上限があり、470M
の空きメモリが残っているようです。
3 x2GBファイルを転送した後のtop
は次のとおりです。
root@vstorage:~ # top
last pid: 23995; load averages: 0.30, 0.28, 0.25 up 0+00:40:35 19:56:12
33 processes: 1 running, 32 sleeping
CPU: 0.0% user, 0.0% Nice, 0.1% system, 0.0% interrupt, 99.9% idle
Mem: 59M Active, 23M Inact, 6099M Wired, 1503M Free
ARC: 5674M Total, 17M MFU, 5610M MRU, 35K Anon, 14M Header, 32M Other
5512M Compressed, 5675M Uncompressed, 1.03:1 Ratio
Swap: 2048M Total, 2048M Free
PID USERNAME THR PRI Nice SIZE RES STATE C TIME WCPU COMMAND
1122 root 1 20 0 228M 12544K select 1 0:00 0.07% nmbd
23994 root 1 20 0 20164K 2920K CPU3 3 0:00 0.04% top
338 root 1 20 0 9564K 4844K select 3 0:00 0.02% devd
411 root 1 20 0 10504K 1860K select 1 0:00 0.01% syslogd
734 jeff 1 20 0 85232K 5808K select 2 0:00 0.00% sshd
663 root 1 20 0 20640K 4600K select 1 0:00 0.00% sendmail
561 root 32 52 0 8332K 2112K rpcsvc 3 0:00 0.00% nfsd
1134 root 1 20 0 301M 17524K select 3 1:31 0.00% smbd
558 root 1 20 0 12548K 2760K select 0 0:00 0.00% mountd
786 root 1 20 0 19664K 3348K pause 3 0:00 0.00% csh
631 root 1 20 0 64540K 26268K select 0 0:00 0.00% Perl
1128 root 1 20 0 297M 16852K select 2 0:00 0.00% smbd
543 root 1 20 0 10452K 1920K select 0 0:00 0.00% rpcbind
560 root 1 23 0 10380K 2956K select 3 0:00 0.00% nfsd
1130 root 2 20 0 297M 16196K select 3 0:00 0.00% smbd
わからないなぜそれは記憶を食べている。完全に使用されると、転送はゆっくりとクロールします。クレイジーな部分は、それもメモリを解放しないということです。共有を切断してSambaをリロードしても、何も起こりません。メモリを再利用する唯一の方法は、サーバーを再起動することです。これは、ストレージがオンラインに戻るまでハイパーバイザーを一時停止する必要があることを意味するため、非常にイライラします。
これはSambaの問題だと思ったので、再インストールし、ソケットオプションを構成し、読み取り/書き込みを行い、ログを無効にしました。しかし、それが私の問題だとは思いません。転送時にサンバがメモリを消費する根本的な原因を見つけることができないようです。任意の洞察をいただければ幸いです。
編集:これはSambaの問題ではなくZFSの問題だと思い始めています。追加情報があれば更新します。
問題はsamba
にあるのではなく、ZFS arc cache
にあります。
ZFSアークキャッシュは物理メモリを使用し、制限が設定されていないため、ZFSはファイルを転送するときにすべてのシステムメモリをキャッシュとして使用します(30〜60 GBのファイルで一度に約200GBを転送していました)。これを修正するには、arc cache
が使用できるRAMの最大量に制限を設定します。
ルートとして、お気に入りのテキストエディタを使用してloader.conf
を編集します。nano
を使用します。
root@vstorage:~ # nano /boot/loader.conf
次の行を追加して、arc_max制限を設定します。
vfs.zfs.arc_max="1G"
これにより、ZFSはアークキャッシュに最大1GBを使用するようになります。
再起動後、問題は解決され、転送は一定の速度のままで、すべてがスムーズに実行されます。