我必须尽可能快地抓取数千个不同的网站。我的应用程序在单个进程上运行,我能够每秒获取 10 个 url。虽然如果我将它分叉到 10 个工作进程,我可以达到 64 个请求/秒。
为什么会这样?为什么我在单个进程上被限制为 10 个请求/秒,并且必须产生工人以达到 64 个请求/秒
- 我没有达到最大套接字/主机限制:所有 url 都来自唯一主机。
- 我没有达到最大文件描述符限制(AFAIK):我的 ulimit -n 是 2560,并且 lsof 显示我的抓取工具从不使用超过 20 个文件描述符。
- 我在 sysctl.conf 中增加了 kern.maxfiles、kern.maxfilesperproc、kern.ipc.somaxconn 和 kern.ipc.maxsockets 的设置,然后重新启动。没有效果。
- 尝试增加 ulimit -n。没变。
有什么我不知道的限制吗?