PhantomJs内存调优

项目背景

我们公司需要去爬取某网站的数据,但是某网站的反爬虫设置太牛逼了,经过调研现有的爬虫框架都无法满足需求。对方的反爬虫机制是这样的:第一次请求会检查你的cookie是否正确,如果不正确会返回一个html给你。找个html包含了一段加密的js脚本,通过这个脚本设置cookie信息,然后再次重复发送请求获取我们需要的数据。cookie本身有超时机制,js脚本也是随机变化的。
经过研究,我们决定采用java+PhantomJs的方式抓取该网站的数据信息。PhantomJs作为一个无界面浏览器,如果执行完请求不能正确关闭线程会导致内存急速消耗的。而我们正是遇到了这样的问题。部分线程因为超时或者其他异常原因,导致PhantomJs线程不能正确的关闭。达到一定的量时会导致系统崩溃。

解决方案

我们的目标就是通过kill掉这一部分不能正常关闭的线程,释放系统内存。
于是我们编写了一个.sh脚本,通过这个脚本定时的kill掉那些超过一定时间仍未关闭的线程。

.sh脚本

#!/bin/bash
p_name=phantomjs
pro="$(ps -A|grep "$p_name"|head -n1)"
time="$(echo $pro|awk '{
        split($3,tab,/:/); if (tab[2]+tab[1]*60>=1) {print 1}else{print 0}
}')"
pid="$(echo $pro|awk '{print $1}')"
echo $time
if [ $time = '1'  ]
then
kill -9 $pid
fi

备注

在执行脚本的过程中,有的同学也是会提示错误

-bash: ./killPhantomJs.sh: /bin/sh^M: bad interpreter: No such file or directory

这个问题的原因是由于我们的.sh文件是在win环境下编辑后上传到linux执行的。
在linux系统只能执行格式为unix格式的脚本,而win环境下编辑的.sh脚本默认格式为doc格式。
执行vi命令,通过:set ff命令查看文件格式为:fileformat =doc

:set ff

我们需要将脚本的格式改为linux系统能够识别的文件

:set ff=unix

保存退出后,再次执行就不会有错误提示了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值