在计算集群上,我有数百个作业同时运行。
他们每个人都下载一个不同的文件(wget
)来自相同的远程 FTP 服务器,然后处理文件并将一些计算保存在某处。
问题: 如果远程服务器在短时间内从我的 IP 收到太多下载请求,它将拒绝我的所有请求,并以较慢的下载速度惩罚未来的请求。
问题: 有没有办法可以查询当前与特定远程服务器的连接数?
我的想法是:
在我的高度并行脚本中,我可以创建一个子句来检查当前来自同一远程服务器的同时下载数量。如果这个数字大于 20,那么脚本将等待一段时间,然后再检查并重试。
我目前的尝试: 我正在研究netstat
、lsof
和ss
,但我搞不懂。我有另一个终端正在从服务器下载,但当我使用lsof
或时ss
,我没有在列表中看到活动下载。也许我看错了?
例如:航站楼A:
wget ftp.remote.server/myfile.txt
它显示“正在解析 ftp.remote.server...123.45.678”
然后在下载时,我进入另一个终端并输入:
netstat -n | grep "123.45"
但却什么也没找到...
答案1
如果那是您的 ftp 服务器,您需要修复它。如果不是,请找到一种方法来停止滥用它。找出站点的限制,并更改您的代码以保持在这些限制之内。您的代码可以“自我感知”,即您不需要检查 netstat 等...让您的代码监视自己的行为。
您还可以通过 ftp 进行连接,并在持续连接中连续下载多个文件。这可能是 ftp 主机的首选,也是 ftp 的设计使用方式。
另一个选择可能是将 ftp 站点镜像到本地服务器并从那里下载。
我不知道为什么netstat -n
,朋友并不为你工作。他们为我工作。
$ netstat -n | grep 192.168.1.254
tcp 0 0 192.168.1.122:38868 192.168.1.254:80 ESTABLISHED