python故障查找:超时未设置
最近一台基于python的应用服务总是出现问题。需求是用户可以在页面上提交批量处理任务,后台把这些任务入到一个Queue里排队处理,然后通过一个线程专门处理。现在总是偶尔出现假死状态,任务处理中断执行。开始总是以为是哪里出错了,导致程序中断。可以检查程序,任务处理过程全部try了,并打印日志。但是查找日志没有任何出错。首先要排查的线程到底有没有活着,如果活着,是在哪里阻塞了,所以想对任务处理线程执行dump,然后分析。本以为是python中有像jvm中的jstack的工具,但是上网查找没有结果,并提问了相关问题求救别人:http://segmentfault.com/q/1010000000506442 . 所以只能分析调试程序运行时的线程状态:
查找出python运行的进程id是3125, 运行:
gdb -p 3125
...
gdb info threads
发现一个很明显的问题,recv阻塞了。而且fd=9. 所以怀疑是读流在哪里卡住了,因为我的应用主要是抓取互联网上其它网站的信息,所以先查看是否有连接没有释放。
ls -l /proc/3125/fd
果然是一个socket连接没有释放, 然后想查看下这个fd=9的详细信息:
lsof -p 3125
python 23243 tony 9u IPv4 912004 0t0 TCP XXXXXX.linode.com:59047->205.204.96.104:http
然后这个ip就是抓取网站的ip。所以基本可以肯定是卡在这里了。因为我用的requests组件,本以为其默认会有一个读超时时间,但是查看文档没有发现, 所以手动加上:
requests.get('http://github.com', timeout=0.001)
python故障查找:超时未设置的更多相关文章
- urllib2.urlopen超时未设置导致程序卡死
没有设置timeout参数,结果在网络环境不好的情况下,时常出现read()方法没有任何反应的问题,程序卡死在read()方法里,搞了大半天,才找到问题,给urlopen加上timeout就ok了,设 ...
- session的工作原理、django的超时时间设置及session过期判断
1.session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 session服务端中存在的数据为: session = { 随机字符串1:{ 用户1的相关信 ...
- Python面向对象基础:设置对象属性
用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构.当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性.在这一点上,它和其它语言的struct ...
- 基于rabbitMQ 消息延时队列方案 模拟电商超时未支付订单处理场景
前言 传统处理超时订单 采取定时任务轮训数据库订单,并且批量处理.其弊端也是显而易见的:对服务器.数据库性会有很大的要求,并且当处理大量订单起来会很力不从心,而且实时性也不是特别好 当然传统的手法还可 ...
- Socket超时时间设置
你知道在 Java 中怎么对 Socket 设置超时时间吗?他们的区别是什么?想一想和女朋友打电话的场景就知道了,如果实在想不到,那我们就一起来来看一下是咋回事吧 设置方式 主要有以下两种方式,我们来 ...
- Python+request超时和重试
Python+request超时和重试 一.什么是超时? 1.连接超时 连接超时指的是没连接上,超过指定的时间内都没有连接上,这就是连接超时.(连接时间就是httpclient发送请求的地方开始到连接 ...
- session超时时间设置方法
session超时时间设置方法 由于session值之前没有设置,以至于刚登录的网站,不到一分钟就超时了,总结了一下,原来是session过期的原因,以下是设置session时间的3个方法: 1. 在 ...
- 实时错误 '91' :对象变量或with块变量未设置
大家这几天在做学生信息管理系统的时候,出现最多的应该就是这个问题了,“实时错误‘91’:对象变量或with块变量未设置”.如右图: 遇到这个问题,我们首先应该去参考MSDN,不过这时候MSDN似乎没有 ...
- c# webConfig中的session超时详细设置
webConfig中的session超时详细设置 我们在webConfig中设置Session超时的时候,如果最后发行的地址是远程服务器,我们很多不是必须的属性并不用设置,如果设之后,倒不能让 ses ...
随机推荐
- Mac 配置环境变量
系统:mac OS 10.10.3 or later 1.如果不能使用一些常用终端命令,如ls,open.可能是环境变量配置不当导致的.尤其是手动修改 输入以下命令: export PATH=/us ...
- [办公自动化]skydrive onedrive
国内暂时无法访问onedrive,请按如下步骤操作尝试:依次如下:在开始菜单里,单击“所有程序”,找到“附件”,单击找到里面的“记事本”,右键,然后选择“以管理员身份运行”,如果有对话框,选择“是”. ...
- 语艺杂谈1 – MAP赋值与插入
MAP赋值和插入,对于相同ID的处理方式不同,前者为替换 后者为插入失败 #include <map> #include <string> #include <iostr ...
- SQL--查询相同字段的数据
select city, statefrom state_county_citywhere city in (select city from state_county_city group by c ...
- wordpress为dashboard添加样式
function my_admin_theme_style() { wp_enqueue_style('my-admin-style', get_template_directory_uri() . ...
- 超级有用的9个PHP代码片段
在开发网站.app或博客时,代码片段可以真正地为你节省时间.今天,我们就来分享一下我收集的一些超级有用的PHP代码片段.一起来看一看吧! 1.创建数据URI 数据URI在嵌入图像到HTML / CSS ...
- 批处理之命令补充II
网络命令 net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" / ...
- 【转】全面解析Unity3D自动生成的脚本工程文件
http://blog.csdn.net/jjiss318/article/details/7632041 我们在Unity3D开发的时候,经常会看到它会产生不少固定命名工程文件,诸如: Assemb ...
- [have_fun] 好玩哒小游戏
好玩哒,打字小游戏:http://zty.pe/ 可好玩了,一起来玩吧!
- Delphi Memory-Mapped File简单示例
{ Copyright ?1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira } unit MainFrm; ...