第三篇:性能优化及踩坑
优化工作
1.采用基于线程池管理的定时任务ScheduledThreadPoolExecutor
2.所有的异步操作统一走线程池管理
3.监控信息查询优化(降低复杂度)
4.增加失败重试机制
5.网页抓取以及图片下载多线程异步进行,并严格控制并发数量(界面配置爬取速度)
6.选择速度最快的jackson序列化以及反序列化
7.添加网络ping监控、内存监控
8.代码优化,降低耦合度,增加可扩展性。
踩过的坑
1.phantomjs设置了超时时间,但是一直处在运行状态无法结束。原因:个别网站js运行报错,影响phantomjs嵌入的js代码运行 。解决方案:通过定时任务去自动清理这些假死的phantomjs进程
2.未注意set遍历和添加同时进行的线程安全问题,意外导致抓取任务挂掉。 解决方案:检查代码所有多线程操作的地方,有必要的地方进行加锁,保证线程安全。
3.操作swt视图内控件报错。原因:swt只允许自己的守护线程调用。 解决方案:增加数据的中转仓库,由守护线程自己主动取数据。
4.图片下载出现各种异常。原因:网络状态不好,偶尔会失败或者超时。解决方案:增加失败重试机制