Python3.5多线程爬虫越爬越慢的解决方法

系统环境

Ubuntu 16.04 Server
Python3.5

爬虫情况

1、从Mysql数据库获取任务
2、任务导入列表后开始http请求,将数据以文件形式保存到硬盘
3、开80线程

遇到的问题

1、家用路由器频繁死机(一天两三次)
2、爬虫开始时爬取速度很快,但是越来越慢

解决思路

查看爬虫日志发现路由器死机前,爬虫速度基本都在峰值,看来是路由器是累晕的,爬虫开始时速度快然后越来越慢,说明爬虫本身问题不大,应该是运行后消耗的系统资源越来越多,直到消耗殆尽而导致速度上不去。查看内存和cpu的消耗情况发现,在爬虫速度降低之后内存cpu的占用也有降低,看来问题不在硬件资源,那是不是网络资源内,使用netstat命令查看发现有大量“TIME_WAIT”状态的TCP连接,使用命令

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

查看发现TIME_WAIT状态的连接近2w,看来是资源tcp连接过多!此时想是不是爬虫http头部信息中Connection的问题呢,把Keep-Alive改为close并未解决问题!那Ubuntu有没有设置tcp连接控制方面的选项呢?通过搜索得知,tcp连接可以设置回收时间和是否可以复用,命令如下:

echo “1” > /proc/sys/net/ipv4/tcp_tw_reuse
#设置TIME_WAIT状态可以重用
echo “1” > /proc/sys/net/ipv4/tcp_tw_recycle
#设置TCP连接尽快回收

使用以上命令后问题果然解决!

未经允许不得转载:国外便宜VPS » Python3.5多线程爬虫越爬越慢的解决方法

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址