监控邮件显示rsh $host $command
命令失败,错误提示为“poll: protocol failure in circuit setup"
怀疑是网络连接数过多所引起。
命令rsh $host
连接远程主机的513端口。
命令rsh $host $command
则连接远程主机的514端口,并随后发送一个本地端口号给远程主机,要求远程主机建立一个新的TCP连接到这个端口(还不清楚这个新的连接有什么作用)。然后才是传送命令和等待命令结束。
这样做的结果就是在rsh $host $command
进程过多时,本地开放的端口资源被消耗完了,从而导致新的rsh $host $command
失败。
这是rsh $host
的使用则依然正常。
这里提到的rsh的缺陷,也是建议尽量使用ssh
的原因之一。
在远程主机上kill掉相关的rsh进程后,会导致TCP连接没有完全关闭。
netstat
命令显示CLOSE_WAIT
状态,端口资源并没有释放出来。
根据配置文件/proc/sys/net/ipv4/tcp_keepalive_time
显示,需要等待2个小时,那些端口才会因为超时而被真正关闭,从而释放出来。
%> netstat -a | grep localhost tcp 0 0 localhost:933 localhost:935 CLOSE_WAIT %> cat /proc/sys/net/ipv4/tcp_keepalive_time 7200 ;# in seconds. = 2 hours %> echo "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.con