在出现与TCP关闭套接字相关的nfsd错误后,NFS会失去响应
原文:https://access.redhat.com/solutions/28104
环境
- Red Hat Enterprise Linux 5,其RPM
nfs-utils版本早于1.0.9-47。 - Red Hat Enterprise Linux 6及更高版本
问题
- 在控制台上看到关于NFS滚动的错误几分钟后,系统变得无响应
- 在NFS客户端上观察到以下错误消息
kernel: nfs: server server.hostname not responding, still trying
kernel: nfs: server server.hostname OK
- 在NFS服务器上观察到以下错误消息。
kernel: rpc-srv/tcp: nfsd: got error -104 when sending 140 bytes - shutting down socket
决议
- 对于RHEL 5:将RPM
nfs-utils更新到版本1.0.9-47或更高版本
# umount /nfs/share
# yum update nfs-utils
# mount nfs.example.com:/share /nfs/share
# rpm -q nfs-utils ==> shows the upgraded version of nfs-utils
- 对于RHEL 6及更高版本:尝试扩展NFS服务器的TCP套接字缓冲区。请参阅如何调整TCP套接字缓冲区?
根本原因
- 出现此问题的原因是NFS线程无法以比客户端更快的速度处理请求。
诊断步骤
- 检查
/var/log/messages文件中的以下错误:
kernel: rpc-srv/tcp: nfsd: got error -104 when sending 140 bytes - shutting down socket
kernel: rpc-srv/tcp: nfsd: got error -104 when sending 140 bytes - shutting down socket
last message repeated 3 times
kernel: rpc-srv/tcp: nfsd: got error -104 when sending 140 bytes - shutting down socket
last message repeated 2 times
last message repeated 13 times
- 我们需要找出是什么让
nfsd进入循环。在这个问题发生后,我们能得到一个内核转储吗?了解nfsd线程挂起的位置可能会很有趣。有关如何在RHEL上启用kexec/kdump的详细步骤,请使用以下文章中的步骤:
Redhat Enterprise Linux下如何配置kexec/kdump - 在系统上启用SysRq功能,并在
nfsd挂起时收集sysrq -t跟踪,然后将结果附加到日志中。在nfsd停止挂起后,再次运行sysrq -ttrace。
什么是SysRq工具以及如何使用它? - 当此问题发生时,请在服务器上捕获网络转储,有关如何捕获网络转储的详细信息,请参阅以下文章中的步骤:
如何使用tcpdump捕获网络数据包?

浙公网安备 33010602011771号