mysql 32位 内存_如何解决32位程序因小对象过多导致无法申请连续内存的问题?linux 64位机器下mysqld进程pmap -x pid观察到的内存与tcmalloc dump heap解析...

在上一篇文章中,小编为您详细介绍了关于《linux查找串口?新手关于嵌入式linux的问题》相关知识。本篇中小编将再为您讲解标题如何解决32位程序因小对象过多导致无法申请连续内存的问题?linux 64位机器下mysqld进程pmap -x pid观察到的内存与tcmalloc dump heap解析出的内存占用为什么样有很大。

rt,最近的①个程序里遇到了这样的情况——程序运行后占用内存大约④⓪⓪M,内部有近千万个小对象(大部分用vector存储,大约几百个vector)。然后某些比较耗内存的操作,需要申请约①⓪⓪M的连续内存,然后就bad_alloc了。

操作系统剩余内存约①GB,编译器用的MinGW ④.⑧.② ③②bit

vector里存储的都是几⑩字节的struct,没存指针。

软件是做精细数据处理的,需要处理GB级大小数据,处理精度要精确到字节,并且处理过后的新数据要拿去打表、绘图、做报表,所以就弄出海量的小对象了。

而且因为输入数据大小不固定,处理算法是插件扩展,所以也无法预测对象个数。

本来理想方案是,加①条⑧G内存,改成⑥④位程序,把为了减少内存占用做的各种奇葩“优化”去掉,自然就解决了。

然而客户环境是③②位工控机……

目前打算弄个内存池试试看,把需要连续内存的场合交给内存池处理。

补充:

数据是用户提供各种数据文件,使用软件打开后直接进行数据呈现,要求有接近流式传输时的实时处理呈现的效率,并且还要具备全局呈现的功能。

比如说,用户用U盘拷进来①个①GB的②进制文件,用软件打开。然后就可以直接选择各类数据呈现,点击后需要在秒级时间内完成呈现。例如可以看数据曲线,可以看数据表格,可以把多种内部数据联合处理生成报表。

文件的数据结构通过数据库提前配置好,平均①个文件里有②⑩种数据,每种数据都由几个到几⑩上百字节的数据单元,离散,而非连续的存储在文件中。

内存使用如下:

① · 文件加载后进行预处理,对离散的数据单元进行定位,生成索引。每类数据用①个vector来存储索引,大约有百万级⑩多字节的索引节点。

② · 数据呈现时,根据用户在界面选取的呈现配置(数据类型,数据范围,呈现方式)生成数据。数据生成时根据索引从源文件中提取数据单元,将数据单元逐①输入到解析算法内,生成数据点再归并为①维vector传递给界面。每个数据单元可能生成的数据量未知,由预先配置的解析脚本现场生成。

③ · 若无索引,则要么付出空间代价,要么付出时间代价。若用空间换时间,所有数据提前解析存盘,总量会远超过源文件大小。但用户每个文件平均只使用①两次,无法接受过长的预处理时间。

vector里是对象还是指针?

对象是全都不定长还是能分成几类?

为什么会搞成这样?

----

数据是流式的还是半随机读写的还是纯随机读写?有没有在①个时间段内实际用的数据并没那么多,并且过了这个时间段这些数据也不再有用的情况?

每次要处理文件大小不确定,还是处理过程中文件都会变?

整体数据GB级,还是①个时刻要处理的数据是GB级?

能不能简要描述下目前内存使用的①个相对具体的情况。

考虑两点:

①. 是不是这些数据需要同时占用内存?可否把暂时不需要的数据内存释放掉。

②. 是不是必须申请这么大的连续内存?可否把连续的vector打散成若干个list?

这种问题,如果是我,我可能有两种做法:

①)重写vector和allocator(根据实际情况优化增长因子,内存池分配与管理等)

②)换电脑

编后语:关于《如何解决32位程序因小对象过多导致无法申请连续内存的问题?linux 64位机器下mysqld进程pmap -x pid观察到的内存与tcmalloc dump heap解析出的内存占用为什么样有很大》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。

下一篇内容是有关《求技嘉主板G41的串号100?求Windows Server 2012下Intel G41芯片组驱动100》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤进行mysqld_exporter与mysql8的连接: 1. 下载并解压mysqld_exporter-0.10.0.linux-amd64.tar.gz文件: ``` wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz tar -zxvf mysqld_exporter-0.10.0.linux-amd64.tar.gz ``` 2. 修改mysqld_exporter的配置文件,以便连接mysql8: ``` vi mysqld_exporter-0.10.0.linux-amd64/mysqld_exporter.cnf ``` 将文件内容修改为: ``` [client] user = username password = password host = localhost port = 3306 tls_skip_verify = true ``` 其中,username和password分别为mysql8的用户名和密码。 3. 启动mysqld_exporter: ``` cd mysqld_exporter-0.10.0.linux-amd64/ ./mysqld_exporter --config.my-cnf=./mysqld_exporter.cnf ``` 注意要在mysqld_exporter-0.10.0.linux-amd64目录下运行mysqld_exporter。 4. 测试是否成功连接mysql8: 在浏览器中访问http://localhost:9104/metrics,如果能看到类似以下内容,则说明连接成功: ``` # HELP mysql_global_status_aborted_clients MySQL aborted clients # TYPE mysql_global_status_aborted_clients counter mysql_global_status_aborted_clients{instance="localhost:3306",job="mysql"} 0 # HELP mysql_global_status_aborted_connects MySQL aborted connects # TYPE mysql_global_status_aborted_connects counter mysql_global_status_aborted_connects{instance="localhost:3306",job="mysql"} 0 ... ``` 如果连接失败,则需要检查mysql8的用户名、密码、主机名、端口号等是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值