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