问题描述

基于phathomjs的token池项目,基本原理是,打开淘宝页,获取匿名cookie,再由cookie中提取有效token,调用方通过该token获取淘宝数据

为方便基他人应用,封装了部分功能为一个http api

功能是完备的,问题是服务运行个一天左右,就无响应了

问题1,phathomjs本身的问题,虽然早期phathomjs 有内存泄露的问题,但当前的版本已修复

问量2,自身代码的问题

时间有限就不啰嗦了,

几个排查点

1 服务是否中断

服务还在运行,进程还在,http api 端口 依然在监听,直觉是泄露,在是哪里泄露,是什么泄露,需要确认和排查。

2 查看网络请求

netstat -ntp

显示http api listen的端口,大量CLOSE_WAIT,这个原因是tcp层面服务端没有向客户端发送fin,就我的服务而言就是没有 调用http.response()

到这一步就已经找到线索,之后往上查http.response()的调用栈即可。

3 怀疑出现了泄露

因此 top

发现进程内存占用500m

重启服务进程 内存占用150m

泄露确主

4 查http.response()的调用栈

这个功能函数是打开某url,然后phathomjs,打开一个page(不显示页面,phathomjs内的page类型),会加载相关页面资源,在获取到某url后(http请求获取jsonp格式的数据)这个url是触发下一步的关键点,获取完成表示页面打开成功,当前页有效,之后获取当前页面的cookie,cookie提取token,token返回。

到这里很多人都已经猜到问题在哪了。

以上只是顺利运行的情况,其实考虑到对方反爬虫,网络不稳定等这种原因,打开page页后,这个页可能永远拿不到触发下一步的url

因此这个调用,在这一步阻塞,不会调用response,响应给客户端,也因此对应的连接一直保持CLOSE_WAIT,因为page占用的资源不能释放(代码内的逻辑是,取出token,调用response前释放 page.close())因此内存占用会增大。

问题找到,处理就简单了,处理方式在外部加了超时控制,超时后,page.close() 并向client response 异常信息。

问题解决。

基于phathomjs token 不定时无响应问题排查的更多相关文章

  1. PC监听鼠标和键盘事件,定时无响应退出

    直接上代码: window.onload = function () { initScreenSaver(); } //0912 add function ScreenSaver(settings){ ...

  2. VC中基于 Windows 的精确定时[转]

    在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ...

  3. SQL阻塞原因造成系统多功能无响应的分析解决思路

    最近遇到一个sqlserver项目,月底会出现多个财务相关功能出现不定期操作无响应问题 通过查询SQL阻塞信息,定位到阻塞源头spid.该会话的状态.等待事件及执行的SQL脚本 根据spid查询该会话 ...

  4. 基于PHP的crontab定时任务管理

    BY JENNER · 2014年11月10日· 阅读次数:6 linux的crontab一直是server运维.业务开展的利器.但当定时任务增多时,管理和迁移都变得非常麻烦,并且easy出问题.以下 ...

  5. VC中基于 Windows 的精确定时

    在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ...

  6. 一次Mysql连接池卡死导致服务无响应问题分析(.Net Mysql.Data 6.9.9)

    问题: 进程启动后,线程数迅速上升至最小线程数后,缓慢上升(线程池限制)到数千,然后由于线程过多,CPU飙升到90%. 对外表现为Api无响应或连接超时. 背景 有些数据存在于另一个机房,通过内网专线 ...

  7. ArcGIS Server浏览地图服务无响应原因分析说明

    1.问题描述 从4月17号下午5时起,至18号晚9点,客户单位部分通过ArcGIS Server发布的地图服务(该部分地图服务的数据源为数据库SJZX)无法加载浏览,表现为长时间无响应.同时,通过Ar ...

  8. [转]Oracle 11g 基于CentOS7静默安装教程(无图形界面,远程安装) --有部份地方有问题

    Oracle 11g 基于CentOS7静默安装教程(无图形界面,远程安装) [转载]原文地址:http://canonind.blog.51cto.com/8239025/1883066 一.安装前 ...

  9. 测试人员遇到Android APP崩溃和无响应手足无措?

    这2天,在测APP兼容性时,遇到APP奔溃闪退的情况.将问题反馈给开发后,开发自己调试后,没有复现.由于又是远程,base地不在一块,我总不能把手机寄过去吧,那也太费事了. 所以就想到,提供明确的报错 ...

随机推荐

  1. 吴裕雄--天生自然 JAVASCRIPT开发学习:Window - 浏览器对象模型

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. HDU 2094产生冠军(set思维题)

    Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛.球赛的规则如下:如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能 ...

  3. Red Hat、Fedora和Ubuntu软件包操作

    五.Red Hat.Fedora和Ubuntu软件包操作对比 最后总结: 在 /etc/yum.conf 的 [main] 后面添加以下配置即可! 复制代码 代码如下: exclude=kernel* ...

  4. Python笔记_第一篇_面向过程_第一部分_0.开场白

    *什么是Python? Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido(吉多) van Rossum于1989年发明,第一个公开版本发行于1991年.在国外应用非常的广泛,国 ...

  5. tomcat启动极慢在linux生产环境

    在window环境下不会出现启动极慢的问题.   Tomcat启动极慢在生产环境,跟Weblogic一样   此外由于Weblogic创建域的时候使用的JDK是自带的jrockit,所以要解决WebL ...

  6. geodjango七日学习笔记 (7.30整理本地笔记上传到网络)

    第一天进行到现在,在开端的尾巴,想起来写一个学习笔记, 开发环境已搭好,用的是pycharm 环境是本机已有的interpreter python3.7   接下来要做的是新建一个geodjango项 ...

  7. git 提交部分修改的文件,以及如何撤回已经add的文件

    命令 1.git status //查看修改文件状态 ,可以看到哪些add了哪些没add 注意:如果此时出现了有些文件不想添加到暂存区却添加进去了,需要撤回 git reset HEAD 全部撤销gi ...

  8. sklearn 缺失值填补(总结)

    首先查看数据形态: data.shape 再查看数据类型和非空值的个数与比例 data.info() 使用SimpleImputer进行填补 from sklearn.impute import Si ...

  9. centos7 安装gdb (调试nginx)

    首先卸载原有的gdb,sudo yum remove gdb 从gnu官网下载最新的gdb源文件,wget http://mirrors.ustc.edu.cn/gnu/gdb/gdb-7.9.1.t ...

  10. 数字转中文大写=> 1234=> 一千二百三十四

    # -*- coding: utf-8 -*- # 最大值:九兆九千九百九十九亿九千九百九十九万九千九百九十九 import re p = ['', '十', '百', '千', '万', '十', ...