这是一个shell脚本,它使用域及其参数来查找状态代码。由于线程运行速度更快,但是错过了很多请求。
while IFS= read -r url <&3; do
while IFS= read -r uri <&4; do
urlstatus=$(curl -o /dev/null --insecure --silent --head --write-out '%{http_code}' "${url}""${uri}" --max-time 5 ) &&
echo "$url $urlstatus $uri" >> urlstatus.txt &
done 4<uri.txt
done 3<url.txt
如果我正常运行它会处理所有请求,但速度非常低。有没有一种方法可以保持速度,也不会错过所有请求。
答案 0 :(得分:1)
您描述的症状听起来像程序之外的某些资源无法应对并行性,但您没有提供任何诊断来帮助解决此问题。如果您的本地网络带宽足够但远程服务器限制了您,那么您无法说服他们停止这样做,当然如果您的问题是由本地资源耗尽引起的,那么通过阻塞点(你的DNS服务器?)应该允许你继续进行而不需要任何实际的代码更改。
一个常见的解决方法是扼杀你的结果。使用xargs
或parallel
运行受控数量的并行进程,而不是同时释放它们,以便在有限的资源上激烈竞争。
参见例如Bash: limit the number of concurrent jobs?了解如何在实践中做到这一点。
如果单独行动不足,可以在两次运行之间添加一个小sleep
来平息事情。