系统环境
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连接尽快回收
使用以上命令后问题果然解决!