Samba 配置不当可能导致性能问题。
解决方法:
- Samba 配置优化:修改 Samba 配置文件
/etc/samba/smb.conf
,添加或调整以下参数:
[global]
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
min receivefile size = 16384
use sendfile = true
aio read size = 16384
aio write size = 16384
write cache size = 2097152
- 重启 Samba 服务:
sudo systemctl restart smbd
sudo systemctl restart nmbd
配置解释
-
[global]
- 这是 Samba 配置文件的全局设置部分,定义对整个服务器适用的设置。
-
socket options = **TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536**
- TCP_NODELAY:这个选项用于禁用 Nagle 算法,它将数据包立即发送而不是等待更多数据,减少延迟。
- IPTOS_LOWDELAY:设置 IP 头信息中的服务类型字段,告诉路由器和交换机尽可能低延迟地处理这个数据包。
- SO_RCVBUF=65536:设置套接字的接收缓冲区大小为 65536 字节(64KB),可以加快数据的接收速度。
- SO_SNDBUF=65536:设置套接字的发送缓冲区大小为 65536 字节(64KB),可以加快数据的发送速度。
-
min receivefile size = 16384
- 这个选项指定了使用
sendfile()
系统调用的最小文件大小。当文件大于等于这个大小时,Samba 会使用sendfile()
以减少内核空间和用户空间之间的数据复制,提高性能。
- 这个选项指定了使用
-
use sendfile = true
- 这个选项启用了
sendfile()
系统调用。sendfile()
直接从文件描述符将文件发送到套接字,绕过用户空间,减少了 CPU 开销,提高了数据传输效率。
- 这个选项启用了
-
aio read size = 16384
- 这个选项指定了异步 I/O 读取操作的最小请求大小。文件读取请求大于等于这个大小时,将会使用异步 I/O 操作,提高并发性能。
-
aio write size = 16384
- 这个选项指定了异步 I/O 写入操作的最小请求大小。文件写入请求大于等于这个大小时,将会使用异步 I/O 操作,提高并发性能。
-
write cache size = 2097152
- 这个选项设置了写缓存的大小为 2097152 字节(2MB)。增加写缓存的大小可以提高写操作的性能,但会占用更多的内存。
示例:Samba 配置文件
以下是一个完整的 Samba 配置文件示例,其中包含上述优化参数:
[global]
workgroup = WORKGROUP
server string = Samba Server
netbios name = ubuntuserver
security = user
map to guest = bad user
dns proxy = no
# 优化参数
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
min receivefile size = 16384
use sendfile = true
aio read size = 16384
aio write size = 16384
write cache size = 2097152
[shared]
path = /srv/samba/shared
browsable = yes
writable = yes
guest ok = yes
read only = no
在这个示例中,我们定义了一个名为 shared
的共享文件夹,并应用了全局优化参数。这些参数的设置可以显著提高 Samba 服务器的性能,特别是在高并发和大文件传输的情况下。
这些配置项的选择和调优应根据具体的硬件环境、网络环境和使用场景进行适当的调整和测试,以获得最佳性能。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于