Python脚本下Linux服务器内存占用太高排查

遇到的问题

跑程序时发现Linux服务器killed我跑的程序上网搜索了很多原因后,发现大部分都指向1. 程序占用内存太高,Linux的内存管理机制——OOM机制会干掉一些进程,来防止系统因内存耗尽发生危险。

排查思路

使用 free -h  查看内存使用情况。

free -h 

每隔三秒在控制台打印一次内存使用情况信息。 

free -hs 3

 查看dmesg日志,查看最近一次内存输出信息。通过此判断确实是python程序导致内存不够,但我的代码上一篇优化过后,读取100G+的文件实际并不需要这么多内存,于是重新排查问题。

sudo dmesg | tail -7

 首先考虑到大文件读取,需要对缓存处理,难道是python的gc机制来不及处理缓存吗?

于是我从数据盘分了400G作为Swap分区,还是跑不动,我开始思考,难道是代码问题?

重新查看代码,甚至怀疑会不会是gc机制一遍遍重复扫描,导致占用内存,在我可以保证不会内存溢出的情况下,我设置了gc.disable(),过了很久,但最终还是被killed。

最后,实在是走投无路求助大佬,大佬最后测试了发现,原来是数据的问题!所有json数据到同一行去了TT,导致json.loads()解析太慢,高cpu开销!

太难了,只能重导!

总结

1. 先查看日志确定哪个程序导致高CPU占用

2. 优先看数据是否正确无误,尤其是像json严格字符串格式的数据,是否一行一条数据。

3. 看代码问题,用循环的模块,可以尝试打印,就可以及早发现哪里循环次数不符合预期。

4. 考虑服务器硬件问题。包括增设分区、修改机制参数等。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值