【发布时间】:2018-09-13 14:55:46
【问题描述】:
我需要一些解决方案来解决这个问题。 在处理更多请求后,在我的应用程序的不同线程中新建和删除进程大小会增长并且不会下降。
伪代码:
Main () {
Thread1 enter
Creating object and inserting into map.
Thread1 exit
Thread2 enter
Itherating to the map and creating child thread based on the no of object in the map.
Thread2 exit
Child thread calling the function at the end deleting the object.
}
在 Thread1 中创建的对象在使用 Thread2 生成的子线程中删除。
上述方法是否可以。我是否犯了任何错误。
因为当地图中物体的数量增加时。
即使在删除所有分配的对象并清除映射后,进程大小也会迅速增长。
谁能告诉我进程大小增长的原因可能是什么。
更新:
有更新。我已经使用泄漏检测器 libumem 工具检查了该过程。什么都不显示。
当传入流量和删除率相等时,进程大小不会增长。 进程大小仅在流量大的情况下才会增加。 例子: 传入流量4000,删除率100 进程大小增加。 在处理和删除所有请求后,预计进程大小会恢复正常但不会恢复正常。 另一个观察是我第一次发送 10k 请求 内存增加不下来 然后我再次发送 10k 请求,这次进程大小没有增加。 第一次迭代增加的内存被重用。 是否与操作系统行为有关?
【问题讨论】:
-
不要使用new和delete。它们的滥用会导致内存泄漏。如果您确实需要动态分配,请改用智能指针。
-
如果必须使用 new 和 delete,请查找内存分析器,如 valgrind
-
您是在地图中放置指向对象的指针,还是将对象复制到地图中?
-
方法好吗?创建瞬态线程闻起来很奇怪,这很少是使用它们的最佳方式。你有没有犯任何错误?如果是这样,它们可能在您的实现中,但您没有显示(尽管不可否认,线程代码的 MCVE 并不容易)
-
EvilTeach ,我将对象放入地图中
标签: c++ multithreading