FreeBSD: Samba comendo memória

2

Eu tenho um servidor de arquivos freebsd

root@vstorage:~ # freebsd-version 
11.1-RELEASE-p1

Aqui estão algumas informações adicionais.

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)

Cliente Samba: MacBook Pro - MacOS Sierra - Conectado a uma rede sem fio de 5ghz AC. Servidor de arquivos conectado ao roteador gigabit (Netgear Nighthawk x4 r7500)

Eu apenas criei este servidor de arquivos para substituir um servidor de arquivos do Ubuntu que eu tinha anteriormente (que não tem esse problema)

Eu tenho que servir um compartilhamento NFS para um hipervisor (funcionando bem) e também servir um compartilhamento Samba para o meu Mac.

Eu instalei samba46 da coleção de ports. Aqui está o meu 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

O compartilhamento é um pool do ZFS chamado data que possui uma única unidade vermelha digital ocidental de 3 TB.

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

O problema:

Eu posso me conectar ao compartilhamento bem. No entanto, se eu tentar transferir alguma coisa para ele, ele consome toda a memória. Se eu tiver top em execução durante a transferência de um arquivo de 2 GB, posso observar o uso da memória aumentar, parece que limita e me deixa 470M de memória livre.

Veja top após a transferência de arquivos de 3 x 2 GB.

    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

Não faço ideia porque está comendo a memória. Depois de totalmente utilizada, as transferências ficam mais lentas. A parte louca é que também não irá liberar a memória. Desconectar o compartilhamento e recarregar o samba não faz nada. A única maneira de recuperar a memória é reinicializar o servidor, o que é bastante frustrante, pois isso significa que também preciso suspender o hipervisor até que o armazenamento volte a ficar online.

Eu achei que era um problema de samba, então eu o reinstalei, configurei opções de soquete, leia gravação / raw e desativei o log. No entanto, não acho que esse é o meu problema, não consigo encontrar a causa raiz do samba comer a memória durante a transferência. Qualquer insight seria apreciado.

EDITAR: Estou começando a pensar que isso é um problema do ZFS, e não um problema de samba. Eu atualizarei se eu descobrir alguma informação adicional.

    
por nullmeta 17.09.2017 / 22:08

1 resposta

4

O problema não é com samba , mas com o ZFS arc cache .

O cache de arquivamento do ZFS usa memória física e, como não havia limite definido, o ZFS usaria TODA a memória do sistema como cache ao transferir arquivos (eu estava transferindo cerca de 200 GB por vez com 30 a 60 GB de arquivos) . Para corrigi-lo, defina um limite para a quantidade máxima de RAM que o arc cache é capaz de usar.

Como root, use seu editor de texto favorito para editar loader.conf , usarei nano .

root@vstorage:~ # nano /boot/loader.conf

Adicione a seguinte linha para definir o limite de arc_max.

vfs.zfs.arc_max="1G"

Isso informa ao ZFS para usar no máximo 1 GB para seu cache de arco.

Após a reinicialização, o problema é resolvido, as transferências permanecem em uma velocidade consistente e tudo corre bem.

    
por 21.09.2017 / 00:23