定位python脚本内存占用过多的原因

今天跑了个脚本,在linux下运行没过多久,就被操作系统kill了,猜想应该是脚本占用的系统资源过多,被操作系统强杀了。通过google,确定了这是linux的OOM Killer机制。

刚开始想,应该有配置关掉oom Killer,这样我的进程就不会被杀掉了,但之后又担心更改了这些配置,会对机器上的其他程序有影响,所以决定从程序里面找原因,试图优化资源的占用。

于是,就开始了漫长的定位过程...

我通过top指令发现(刚开始我还傻傻的用ps -euf执行多次去看内存的变化),该脚本运行后,进程的内存占用涨很快,平均每秒张百分之10。然后很快被系统kill掉了。

刚开始怀疑是程序采用的数据结构不对,看了代码,没发现问题。
于是,在怀疑可能出问题的部分,前后分别写上raw_input,配合top指令查看内存占用率的变化,将范围缩小到了一个函数内。

最后定位到,由于一个判断写错了,导致一个string不断的被累加,然后撑爆了内存。原来是一个很低级的判断错误导致了bug,花了我半天时间去定位,感觉好崩溃。

在这过程中,顺便学了用pdb调试python,原来用命令行去调试代码还挺有趣的嘛,我应该能很快熟悉windbg的使用,想想还是有点小激动呢。


  • python -m pdb main.py            用pdb调试py脚本
  • b                                              15 在代码15行打断点
  • c                                               让程序继续执行,相当于VC里面的F5
  • s                                               跳入函数,相当于VC里面的step into
  • p param                                    打印param的值
  • cl                                              清除所有断点
  • condition 4 date=="20140101" 将第四个断点的条件设置为 date等于"20140101"

转载于:https://my.oschina.net/u/1453800/blog/213990

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值