由于公司做的Facebook爬虫涉及到模拟用户操作,selenium和webdriver操作。因为做的海外爬虫,一天的任务量也就在2000左右,但是最近突然告警,60秒堆积任务量超过10个没有处理,满满的20个。当时想着每个机器5个线程在跑,但是都用webdriver,每个机器不能超过7个,那就加机器了。但是没想到下面的路还是有很多坑。
在linux下没有前端页面展示,不能进行交互操作,更别提自动化操作了,必须安装xvfb虚拟化。
yum install Xvfb
//或者
apt-get install xvfb
然后启动xvfb
Xvfb :1 -screen 0 2560x1600x24&
在代码里使用:
String osName = System.getProperty("os.name");
if (osName.contains("Linux")) {
//lmportal.xvfb.id必须和开启的xvfb对应
String xPort = System.getProperty("lmportal.xvfb.id", ":1");
ChromeDriverService service = new ChromeDriverService.Builder().usingAnyFreePort().withEnvironment(ImmutableMap.of("DISPLAY", xPort)).build();
webDriver = new ChromeDriver(service, capabilities);
}
由于是服务器镜像打包过来的,肯定安装步骤是省掉的。但是项目一直说什么地址占用,最后发现我项目指定的端口和xvfb默认的6001冲突了,换了一个端口正常运行了。

但是另一个机器上的却是正常的很奇怪!!!
网友评论