添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

结局python3.6下调试程序的内存溢出问题

问题描述:

我分批读取的一批训练样本,原则上来说在读取下一个批次的数据时,上一个批次不应该依然占据内存。但实际运行时还是出现了内存溢出的情况,所以针对此问题单独进行分析。

分析python3.6的内存释放机制

网上找到的python内存释放基本都是类似于智能指针,若出现变量对应的指针计数为0则清楚其内存。具体可以参考: PYTHON内存释放详解

实验一: python3.6使用numpy验证内存释放

计算机当前内存使用 1.8GiB
运行

a = np.arange(10**8 ,dtype = np.int32)

10 * 8 * 4 = 0.4GiB,当前计算机内存 2.2GiB [正常]

a = 1

由于array数据指针丢失,其内存会释放,当前计算机内存1.8GiB[正常]

命令 理论内存消耗GiB 实际内存消耗GiB
a = np.arange(10**8 ,dtype = np.int32) 0.4 0.4
a.astype(np.int64) 0.8 1.2
del a 0 0.8

分析 :在做astype时直接重新开辟了一块新的空间即使没有完全的指向,即使当做完del a 释放变量a后,此空间依然存在。
初始化了一块内存,即使未赋给变量此空间依然会被占用

实验二:将内存申请释放置函数中观察其释放

>>> def test():
...     a = np.arange(10**8 ,dtype = np.int32)
...     return a
>>> a = test()
>>> b = test()
>>> del a
>>> del b 

内存使用变化 0.4 - > 0.8 -> 0.4 -> 0[正常]

>>> def test():
...     a = np.arange(10**8 ,dtype = np.int32)
...     a.astype(np.int64)
...     return a
... 
>>> a = test()
>>> b = test()
>>> del a 
>>> del b

0.4-> 0.8 ->0.4 ->0 正常

分析:若给定新开辟的空间一个作用域,超过其作用域仍未被引用则会自动释放。

强制垃圾回收

import gc
gc.collect()

续一个由于joblib引起的问题

def load_small_imdb(cur_ban):
    cur_ban = (cur_ban + 1) % ban_num
    fid = open(os.path.join(base_path,"smaill.imdb"),'rb')
    print("read...")
    train_data = pickle.load(fid)
    fid.close()
    print("finist...")
    random.shuffle(train_data)
    print("shuffle")
    tmp_list = np.array(train_data)
    a = tmp_list[:,0].tolist()
    b = np.copy(a)  #如果不进行copy会出现pickle的实际未释放的情况
    share_rate = np.copy(tmp_list[:,1])
    return b,share_rate,cur_ban

注意这里使用了copy,之所以使用copy是因为如果不拷贝,其array中的数据会依赖于pickle开启的空间,导致空间申请的过大。

结局python3.6下调试程序的内存溢出问题问题描述:分析python3.6的内存释放机制理论部分实验一: python3.6使用numpy验证内存释放实验二:将内存申请释放置函数中观察其释放解决办法问题描述:我分批读取的一批训练样本,原则上来说在读取下一个批次的数据时,上一个批次不应该依然占据内存。但实际运行时还是出现了内存溢出的情况,所以针对此问题单独进行分析。分析python3.6的...
python-3.6.0-amd64.exe 安装包,openpyxl必装的相关包 geopandas安装:Fiona-1.8.13-cp37-cp37m-win_amd64.whl GDAL-3.0.3-cp37-cp37m-win_amd64.whl geopandas-0.6.2-py2.py3-none-any.whl pyproj-2.4.2.post1-cp37-cp37m-win_amd64.whl Shapely-1.6.4.post2-cp37-cp37m-win_amd64.whl pywin32+python3.6+32与64位打包_156_573127.exe beautifulsoup4-4.9.0.tar.zip 首先检查toad版本:我的是toad == 0.0.64,python3.6版本 只需更换python版本为3.8,然后重新安装toad即可:pip install toad 问题解析 toad=0.1.0时不会出问题,但是python3.6无法更新到0.1.0,python3.8可以(python3.7未尝试) toad github地址:https://github.com/amphibian-dev/toad
目标:在现场无外网的服务器上安装python3.6: 1、运行程序所需的一些package。例如:pandas、numpy、gensim、joblib、scikit-learn等 2、用pycharm中的SSH Interpreter功能进行远程连接,代码调试(主要是为了使用服务器上的数据,毕竟服务器上的数据是不会随便让你拿出来分析的,所以才这样大费周章。)  第一步:在我自己的电脑上安装r...
Python使用多进程时,内存占用会成倍增加。为现数据处理时的低内存占用多进程加速。同时也可以绕开一些不可pickle的参数,实现多进程。 将两个表按共有字段group_col分组,分组后的每组数据作为中间表持久化为pkl文件。多进程读取pkl文件,然后进行计算。这样做的好处有2个: 一是降低内存占用,数据较大时避免了内存溢出导致程序崩溃。 二是避免了中间存在不可pickle对象导致无法使用多进程。
HANDLE info_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //拍摄系统中所有进程的快照 if (info_handle != INVALID_HANDLE_VALUE) PROCESSENTRY32W program_info; program_info.dwSize = sizeof(PROCESSENTRY32W); //设置结构体大小 int bR...
内存越来越大的原因分析 问题描述:程序运行现象分析:尝试解决:原因分析:解决方法: 问题描述: 目前遇到的问题是这样的,爬虫程序部署到K8S服务器上运行,但是会过几个小时之后,程序就会被主动杀掉重启,原因是因为内存过载,超过K8S设置的4G。 程序运行现象分析: 在线下进行程序测试时,未让程序长时间运行(及4-5个小时),程序无异常则直接上测试环境测试,然后部署上线了运行了。 通过线下观察,确实程序使用内存会因为时间而不断增加 增长的速度虽然不是很快,但却是在稳定增加,说明程序中存在内存使用未被释放。
(python36) PS C:\Users\YANG\Desktop\DFN_0608_1.27_008_A__0005\ng> conda list # packages in environment at C:\Users\YANG\.conda\envs\python36: # Name Version Build Channel absl-py 0.15.0 .
构造文档频率向量df; 构造tf-idf权重矩阵,并且进行余弦归一化; myfunc.cpp 用于提供各种函数支持,并且定义全局变量(如:词频矩阵$tf_{t,d}$、文档频率向量df等)。各函数的功能将在下文详细介绍。 server.cpp 此文件是服务器代码。首先的工作是初始化服务器,这里用到了initialize.cpp中的各个函数;然后是建立socket服务,绑定服务器管理员指定的端口后监听此端口。当有客户端进程来connect的时候,主进程会fork一个子进程与其通信,以满足多用户同时查询;每次用户查询结束之后,服务器会给客户端提供3个选项: 提供相关反馈信息,以取得更为精确的查询结果; 不提供相关反馈信息,继续新的查询; 退出查询。
好的,我知道您的问题是关于在Linux系统中安装Python3.6时出现的错误。这个问题可能会因为系统中缺少一些依赖库或者安装过程中出现了错误。以下是一些可能的解决方案: 1. 检查系统中是否已经安装了Python3.6,可以通过在终端中输入以下命令来检查: python3.6 -V 如果系统中已经安装了Python3.6,则会显示Python的版本号。 2. 如果系统中没有安装Python3.6,可以尝试使用以下命令安装Python3.6及相关依赖库: sudo apt-get update sudo apt-get install python3.6 sudo apt-get install python3.6-dev sudo apt-get install python3-pip sudo apt-get install python3.6-venv 3. 如果以上方法仍然无法解决问题,可以尝试手动安装Python3.6。可以从Python官网下载Python3.6的源代码,并按照以下步骤进行安装: tar -zxvf Python-3.6.0.tgz cd Python-3.6.0 ./configure sudo make install 这个过程可能需要一些时间,可以耐心等待。 希望以上方法能够解决您的问题,如果还有其他问题,请随时向我提问。