Remote
RSH延遲關閉stderr套接字?
環境:CentOS 6.6
執行這個簡單的測試時(來自
myclient
):while true; do rsh myserver "echo OK"; done
大約 500 次迭代後,伺服器的埠用完了。
netstat -anp
伺服器上顯示:tcp 0 0 myserver:1008 myclient:922 TIME_WAIT - tcp 0 0 myserver:975 myclient:922 TIME_WAIT - tcp 0 0 myserver:998 myclient:922 TIME_WAIT - tcp 0 0 myserver:991 myclient:922 TIME_WAIT - tcp 0 0 myserver:1007 myclient:922 TIME_WAIT - tcp 0 0 myserver:1000 myclient:922 TIME_WAIT - tcp 0 0 myserver:990 myclient:922 TIME_WAIT - tcp 0 0 myserver:979 myclient:922 TIME_WAIT - tcp 0 0 myserver:1003 myclient:922 TIME_WAIT - tcp 0 0 myserver:988 myclient:922 TIME_WAIT - tcp 0 0 myserver:984 myclient:922 TIME_WAIT - tcp 0 0 myserver:1002 myclient:922 TIME_WAIT - tcp 0 0 myserver:997 myclient:922 TIME_WAIT - tcp 0 0 myserver:1019 myclient:922 TIME_WAIT - tcp 0 0 myserver:995 myclient:922 TIME_WAIT - tcp 0 0 myserver:993 myclient:922 TIME_WAIT - tcp 0 0 myserver:1004 myclient:922 TIME_WAIT - tcp 0 0 myserver:1017 myclient:922 TIME_WAIT - tcp 0 0 myserver:1013 myclient:922 TIME_WAIT - tcp 0 0 myserver:1011 myclient:922 TIME_WAIT - tcp 0 0 myserver:1009 myclient:922 TIME_WAIT - tcp 0 0 myserver:994 myclient:922 TIME_WAIT - tcp 0 0 myserver:987 myclient:922 TIME_WAIT - tcp 0 0 myserver:986 myclient:922 TIME_WAIT - tcp 0 0 myserver:1012 myclient:922 TIME_WAIT - tcp 0 0 myserver:1010 myclient:922 TIME_WAIT - tcp 0 0 myserver:1014 myclient:922 TIME_WAIT - tcp 0 0 myserver:996 myclient:922 TIME_WAIT -
922
是 RSH 標準錯誤埠(來自使用 wireshark 監控)。大約一分鐘後,伺服器上的套接字關閉,可以建立新的連接。
因此,客戶端或伺服器似乎無法正確關閉這些套接字,它們只是超時。
這是 rsh 中的錯誤嗎?
有什麼想法可以解決這個問題嗎?我可以看到 BSD 的 rsh 有一個
--no-stderr
選項,但 Linux 似乎沒有。
在我的生活中遇到過這個…… TIME_WAIT 是 TCP/IP 的產物,所以你被它困住了。它可以通過 /proc 進行調整(參見serverfault 23385),但更好的方法是打開一個持久性套接字的解決方案,只要需要就可以工作。
generate_lots_of_lines | ssh myhost '同時讀取行;做迴聲“:$行”;完畢;'
這樣,您可以讓一個連接根據客戶端向伺服器發送的內容執行許多操作。