FreeBSD: 삼바는 메모리를 먹는다

FreeBSD: 삼바는 메모리를 먹는다

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 - MacOS Sierra - 5ghz AC 무선 네트워크에 연결합니다. 기가비트 라우터(Netgear Nighthawk x4 r7500)에 연결된 파일 서버

방금 이전 우분투 파일 서버를 대체하기 위해 이 파일 서버를 구축했습니다(이 문제는 없었습니다).

하이퍼바이저(잘 작동함)에 NFS 공유를 제공하고 Mac에 Samba 공유를 제공하도록 했습니다.

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단일 3TB Western Digital 빨간색 드라이브가 있는 명명된 ZFS 풀입니다.

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여유 메모리가 남아 있는 것 같습니다.

top3 x 2GB 파일을 전송한 후의 모습입니다 .

    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가 메모리를 차지하는 근본 원인을 찾을 수 없는 것 같습니다. 어떤 통찰력이라도 대단히 감사하겠습니다.

편집하다: 나는 이것이 삼바 문제가 아니라 ZFS 문제라고 생각하기 시작했습니다. 추가 정보를 찾으면 업데이트하겠습니다.

답변1

문제 samba는 전혀 없습니다 ZFS arc cache.

ZFS 아크 캐시는 물리적 메모리를 사용하며 설정된 제한이 없기 때문에 ZFS는 파일을 전송할 때 모든 시스템 메모리를 캐시로 사용합니다(일부 30-60GB 파일을 포함하여 한 번에 약 200GB의 파일을 전송합니다). 이 문제를 해결하려면 arc cache사용할 수 있는 최대 메모리 양에 대한 제한을 설정하십시오.

루트로서 선호하는 텍스트 편집기를 사용하여 편집하세요 . loader.conf저는 를 사용하겠습니다 .nano

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

arc_max 제한을 설정하려면 다음 줄을 추가하세요.

vfs.zfs.arc_max="1G"

이는 ZFS가 아크 캐시에 최대 1GB를 사용하도록 지시합니다.

재부팅 후 문제가 해결되었고 전송 속도가 일정했으며 모든 것이 원활하게 실행되었습니다.

관련 정보