nfs故障排查

1. 检查当前 nfsd 线程状态

# 查看当前 nfsd 线程数
cat /proc/net/rpc/nfsd | grep th

# 查看 NFS 服务器状态
nfsstat -s

# 查看当前 NFS 连接
ss -tnp | grep :2049

2. 临时增加 nfsd 线程数

# 查看当前线程数(默认通常是 8)
echo $(cat /proc/fs/nfsd/threads)

# 增加线程数(例如增加到 64)
echo 64 > /proc/fs/nfsd/threads

# 验证修改结果
cat /proc/fs/nfsd/threads

3. 永久修改 nfsd 线程数

方法一:使用 systemd 服务配置(推荐)

# 创建或编辑 nfs-server 的配置文件
sudo mkdir -p /etc/systemd/system/nfs-server.service.d/
sudo nano /etc/systemd/system/nfs-server.service.d/override.conf
添加以下内容:

ini
[Service]
ExecStart=
ExecStart=/usr/sbin/rpc.nfsd -N 2 -N 3 -N 4 128

方法二:在 /etc/sysconfig/nfs 中配置(RHEL/CentOS)

# 编辑 nfs 配置文件
sudo nano /etc/sysconfig/nfs

# 添加或修改以下行
RPCNFSDCOUNT=64

方法三:在 /etc/default/nfs-kernel-server 中配置(Debian/Ubuntu)

# 编辑 nfs 配置文件
sudo nano /etc/default/nfs-kernel-server

# 添加或修改以下行
RPCNFSDCOUNT=64

4. 重启 NFS 服务使配置生效

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 重启 NFS 服务
sudo systemctl restart nfs-server  # 或 nfs-kernel-server

# 检查服务状态
sudo systemctl status nfs-server

5. 优化内核参数(可选)

如果连接数非常大,可能还需要调整相关内核参数:

# 临时修改
echo 65536 > /proc/sys/net/core/somaxconn
echo 2097152 > /proc/sys/net/ipv4/tcp_max_syn_backlog

# 永久修改,在 /etc/sysctl.conf 中添加:
sudo nano /etc/sysctl.conf

添加以下内容:

net.core.somaxconn = 65536
net.ipv4.tcp_max_syn_backlog = 2097152
fs.file-max = 65536

应用修改:

sudo sysctl -p

6. 监控和诊断

# 监控 nfsd 线程使用情况
watch -n 1 'cat /proc/net/rpc/nfsd | grep th'

# 查看 NFS 性能统计
nfsstat -o all

# 监控 NFS 连接数
watch -n 1 'ss -tnp | grep :2049 | wc -l'

建议的线程数设置

  • 小型环境:16-32 个线程
  • 中型环境:32-64 个线程
  • 大型/高并发环境:64-256 个线程

根据你的实际负载情况逐步调整,监控系统资源使用情况(CPU、内存),避免设置过高导致资源浪费。

完成上述配置后,建议观察一段时间,确认错误信息是否消失,并根据实际性能表现进行进一步优化。

posted @ 2025-09-26 15:38  龍龍小宝  阅读(36)  评论(0)    收藏  举报