memory-leaks 相关问题

当程序无法释放已分配但不再使用且无法恢复的内存时,会发生内存泄漏。

如何设置免费策略?

我在生产环境(k8s 中的容器)中遇到了高内存使用率(看起来像内存泄漏),并想检查是否是由于“MADV_FREE”行为所致。 有没有办法

回答 1 投票 0

Leak sanitizer - 如何追踪非动态未知模块?

示例:Java 源代码 Foo.java: 公共类 Foo { 公共静态无效主(字符串[]参数){} }; 我在 Ubuntu 24.04 docker 上运行它,并预加载了地址清理程序(包含泄漏清理程序),以及一个

回答 1 投票 0

strace 输出未显示多线程应用程序中的 malloc 和 free 系统调用

我尝试使用以下代码模拟内存泄漏问题,然后调查导致内存泄漏的系统调用。 包括 #包括 #包括 我尝试使用以下代码模拟内存泄漏问题,然后调查导致内存泄漏的系统调用。 include <iostream> #include <thread> #include <chrono> #include <mutex> #include <ctime> class SharedObject { public: std::string currentTime; SharedObject() { // Capture current time as string auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); currentTime = std::ctime(&now); // Convert time to string } void displayTime() { std::cout << "Current Time: " << currentTime; } }; void threadFunction(const std::string& threadName, int totalIterations) { for (int iteration = 1; iteration <= totalIterations; ++iteration) { SharedObject* obj = new SharedObject(); // Create object std::cout << threadName << " created an object at iteration " << iteration << std::endl; obj->displayTime(); // Every 100 iterations, forget to delete the object (simulating memory leak) if (iteration % 2 == 1) { std::cout << threadName << " forgot to delete the object at iteration " << iteration << std::endl; } else { delete obj; // Delete object std::cout << threadName << " deleted the object at iteration " << iteration << std::endl; } // Sleep for 512 milliseconds std::this_thread::sleep_for(std::chrono::milliseconds(512)); } std::cout << threadName << " completed all iterations.\n"; }int main() { const int totalIterations = 100000; // Launch two threads std::thread thread1(threadFunction, "Thread 1", totalIterations); std::thread thread2(threadFunction, "Thread 2", totalIterations); // Wait for threads to finish thread1.join(); thread2.join(); std::cout << "Both threads completed execution.\n"; return 0; } 我已经在Linux soumajit-HP-Pavilion-Desktop-590-p0xxx 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux system中编译并运行了程序 发布我正在尝试使用 malloc 跟踪 free 和 strace 系统调用。 以下是输出 [pid 18031] <... stat resumed> {st_mode=S_IFREG|0644, st_size=312, ...}) = 0 [pid 18032] write(1, "Current Time: Tue Jan 14 23:08:3"..., 39) = 39 [pid 18031] futex(0x7fcf11c08c20, FUTEX_WAKE_PRIVATE, 1 <unfinished ...> [pid 18032] write(1, "Thread 2 deleted the object at i"..., 46) = 46 [pid 18031] <... futex resumed> ) = 0 [pid 18032] nanosleep({tv_sec=0, tv_nsec=512000000}, <unfinished ...> [pid 18031] write(1, "Thread 1 created an object at it"..., 45) = 45 [pid 18031] write(1, "Current Time: Tue Jan 14 23:08:3"..., 39) = 39 [pid 18031] write(1, "Thread 1 forgot to delete the ob"..., 55) = 55 [pid 18031] nanosleep({tv_sec=0, tv_nsec=512000000}, <unfinished ...> [pid 18032] <... nanosleep resumed> 0x7fcf10c7ace0) = 0 [pid 18032] stat("/etc/localtime", <unfinished ...> [pid 18031] <... nanosleep resumed> 0x7fcf1147bce0) = 0 [pid 18032] <... stat resumed> {st_mode=S_IFREG|0644, st_size=312, ...}) = 0 [pid 18031] futex(0x7fcf11c08c20, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...> [pid 18032] futex(0x7fcf11c08c20, FUTEX_WAKE_PRIVATE, 1 <unfinished ...> [pid 18031] <... futex resumed> ) = -1 EAGAIN (Resource temporarily unavailable) [pid 18032] <... futex resumed> ) = 0 [pid 18031] stat("/etc/localtime", <unfinished ...> [pid 18032] write(1, "Thread 2 created an object at it"..., 45 <unfinished ...> [pid 18031] <... stat resumed> {st_mode=S_IFREG|0644, st_size=312, ...}) = 0 [pid 18032] <... write resumed> ) = 45 [pid 18032] write(1, "Current Time: Tue Jan 14 23:08:3"..., 39 <unfinished ...> [pid 18031] futex(0x7fcf11c08c20, FUTEX_WAKE_PRIVATE, 1 <unfinished ...> [pid 18032] <... write resumed> ) = 39 [pid 18031] <... futex resumed> ) = 0 [pid 18032] write(1, "Thread 2 forgot to delete the ob"..., 55 <unfinished ...> [pid 18031] futex(0x7fcf11c088c0, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...> [pid 18032] <... write resumed> ) = 55 [pid 18032] futex(0x7fcf11c088c0, FUTEX_WAKE_PRIVATE, 1) = 1 [pid 18031] <... futex resumed> ) = 0 [pid 18032] nanosleep({tv_sec=0, tv_nsec=512000000}, <unfinished ...> [pid 18031] futex(0x7fcf11c088c0, FUTEX_WAKE_PRIVATE, 1) = 0 [pid 18031] write(1, "Thread 1 created an object at it"..., 45) = 45 [pid 18031] write(1, "Current Time: Tue Jan 14 23:08:3"..., 39) = 39 [pid 18031] write(1, "Thread 1 deleted the object at i"..., 46) = 46 [pid 18031] nanosleep({tv_sec=0, tv_nsec=512000000}, 为什么 strace 输出中没有捕获内存分配和取消分配调用? strace是“系统调用/信号跟踪”的缩写。有一些与内存管理相关的系统调用 (sbrk/brk/mmap),但这些都是低级的,对于调试内存泄漏问题没有用处。 如果你想跟踪内存泄漏,你可以使用 g++/clang++ 中提供的类似 AddressSanitizer 的东西: $ g++ -fsanitize=address -g -o code code.cc $ ./code ... Thread 2 completed all iterations. Thread 1 completed all iterations. Both threads completed execution. ================================================================= ==1153114==ERROR: LeakSanitizer: detected memory leaks Direct leak of 320 byte(s) in 10 object(s) allocated from: #0 0x75f22d59e548 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95 #1 0x56ef3081f76d in threadFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) /tmp/x.cc:24 #2 0x56ef30822e7a in void std::__invoke_impl<void, void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*, int>(std::__invoke_other, void (*&&)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*&&, int&&) /usr/include/c++/13/bits/invoke.h:61 #3 0x56ef30822c4b in std::__invoke_result<void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*, int>::type std::__invoke<void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*, int>(void (*&&)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*&&, int&&) /usr/include/c++/13/bits/invoke.h:96 #4 0x56ef30822b6a in void std::thread::_Invoker<std::tuple<void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*, int> >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/include/c++/13/bits/std_thread.h:292 #5 0x56ef30822b03 in std::thread::_Invoker<std::tuple<void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*, int> >::operator()() /usr/include/c++/13/bits/std_thread.h:299 #6 0x56ef30822ae3 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int), char const*, int> > >::_M_run() /usr/include/c++/13/bits/std_thread.h:244 #7 0x75f22d30edb3 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xecdb3) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #8 0x75f22d4fea41 in asan_thread_start ../../../../src/libsanitizer/asan/asan_interceptors.cpp:234 #9 0x75f22cf95a93 in start_thread nptl/pthread_create.c:447 (我将迭代次数限制为10) 更多信息这里。

回答 1 投票 0

.Net 4.5.1 ConcurrentDictionary TryRemove() 方法是否释放分配的内存?

我有一个由元素组成的缓存,每个元素包含两个并发字典,我认为它们可能是导致我的应用程序中内存泄漏的原因。我经常添加和删除东西

回答 3 投票 0

使用 tsx 运行基本 Express 服务器会导致内存不足错误

我有一个非常基本的express.js 服务器,当我运行 tsx server.ts 时,它会导致节点进程快速获得超过 8GB 的内存并开始进行交换。 代码 从“快递”进口快递; ...

回答 1 投票 0

如何将 gcc 与 fsanitize=address 一起使用?

我正在尝试学习如何使用 -fsanitize=address -fno-omit-frame-pointer 来检测内存泄漏。我写了一些简单的东西,显然有内存泄漏,但是用 gcc -fsanitize=a 编译...

回答 1 投票 0

在 UIActivityViewController 中使用链接时出现内存泄漏

我注意到,当 UIActivityViewController 出现/消失以及它包含 Web 链接时,Leaks 工具会检测到内存泄漏。 代码很简单: let textToShare = "一些文本&qu...

回答 1 投票 0

我收到分段错误:加载字符串列表时核心转储,特别是对于长列表。有一个我无法摆脱的内存泄漏

我正在编写一个代码,该代码应该加载字典并检查文本中的单词是否正确。 当使用小列表(用于字典)时,代码会编译,但我得到“分段呃......

回答 1 投票 0

`static char THIS_FILE[] = __FILE__;`有什么意义?

static char THIS_FILE[] = __FILE__; 的意义是什么? 简介: 它有什么作用?它从哪里来? MFC 是 Microsoft Windows 的本机类库,有一个跟踪内存的 DEBUG_NEW 宏...

回答 4 投票 0

SpringBoot应用程序内存始终超过JVM配置的堆大小

Spring Boot应用程序内存使用量持续超过JVM配置的堆大小而没有溢出错误,用top命令查看RES使用量已接近5G。 我的应用程序正在部署...

回答 1 投票 0

Hibernate内存泄漏-BoundedConcurrentHashMap

请帮忙解决Spring MVC应用程序中的内存问题 请找到我的交易配置 请帮助解决 Spring MVC 应用程序中的内存问题 请查看我的交易配置 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" p:driverClass="${jdbc.driverClassName}" p:jdbcUrl="${jdbc.databaseurl}${jdbc.encoding}" p:user="${jdbc.username}" p:password="${jdbc.password}" p:minPoolSize="${minPoolSize}" p:maxPoolSize="${maxPoolSize}" p:checkoutTimeout="${checkoutTimeout}" p:maxIdleTime="${maxIdleTime}" p:idleConnectionTestPeriod="${idleConnectionTestPeriod}" /> jdbc: minPoolSize=15 initalPollSize=25 maxPoolSize=60 #Give up waiting for a connection after this many milliseconds checkoutTimeout=18000 maxIdleTime=3600 idleConnectionTestPeriod=300 maxStatements=100 numHelperThreads=15 acquireIncrement=10 <!--session factory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${jdbc.dialect}</prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.generate_statistics">false</prop> </props> </property> <property name="entityInterceptor" ref="auditInterceptor"> </property> </bean> <!-- transaction manager --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- transaction interveptor --> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> </bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <property name="interceptorNames"> <list> <value>exceptionInterceptor</value> <value>transactionInterceptor</value> </list> </property> </bean> 性能测试后,我的内存没有被释放。因此,在分析堆转储时出现以下错误 “org.apache.catalina.loader.WebappClassLoader @ 0x76000b8e8”加载的“org.hibernate.internal.SessionFactoryImpl”的一个实例占用 73,446,008 (32.66%) 字节。内存累积在由“org.apache.catalina.loader.WebappClassLoader @ 0x76000b8e8”加载的“org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment[]”的一个实例中。 org.hibernate.internal.SessionFactoryImpl @ 0x7624efeb0 136 49,987,288 34.31% \org.hibernate.engine.query.spi.QueryPlanCache @ 0x7630b1250 32 47,674,176 32.72% .\org.hibernate.internal.util.collections.BoundedConcurrentHashMap @ 0x763259a58 48 47,554,336 32.64% ..\org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment[32] @ 0x7632d1c60 144 47,554,288 32.64% 班级名称|浅堆|保留堆|百分比 org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment[32] @ 0x7632d1c60 | 144 | 144 47,554,288 | 47,554,288 32.64% |- org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment @ 0x76325ac88 | 48 | 48 1,497,688 | 1,497,688 1.03% |- org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment @ 0x76325ac58 | 48 | 48 1,631,272 | 1,631,272 1.12% | |- org.hibernate.internal.util.collections.BoundedConcurrentHashMap$LIRSHashEntry @ 0x768fd54c0 | 56 | 56 880 | 880 0.00% | | |- org.hibernate.engine.query.spi.sql.NativeSQLQuerySpecification @ 0x7671eb8e8 | 32 | 32 48 | 48 0.00% | | | '- org.hibernate.engine.query.spi.sql.NativeSQLQueryReturn[0] @ 0x768ff16d0 | 16 | 16 16 | 16 0.00% | | |- org.hibernate.engine.query.spi.NativeSQLQueryPlan @ 0x768ff1640 | 24 | 520 | 520 0.00% | | |- java.lang.String @ 0x768ff1658 选择不同的 column FROM table WHERE column IN (94316) | 24 | 256 | 256 0.00% 请帮忙解决问题 我们在堆中观察到一个查询。 来自表,其中 statusFlg='Y' 且 deleteFlg='N' 且 id="+autoGenerateId 当我们将查询更改为 来自表,其中 statusFlg='Y' 且 deleteFlg='N' 且 id= :instanceid").setParameter("instanceId,autoGenerateId) 会话对象正在被垃圾收集。 有人可以详细解释一下吗 我刚刚遇到了类似的问题。 JPA程序会缓存从JPQL翻译过来的SQL语句,以避免因重复查询而频繁转换的开销。当我使用 JVM 分析工具检查内存使用情况时,我发现缓存的 SQL 查询占用了高达 3000MB 的内存空间! 为了解决这个问题,我调整了可以缓存的 SQL 语句的最大数量,结果成功了。 祝你好运!

回答 2 投票 0

相同的源代码在两个不同的编译器下给出不同的答案是什么意思?

我处于一种非常奇怪的情况,我的代码在我的桌面上运行,但在远程集群上崩溃。我花了无数次检查我的源代码是否有错误,在调试器中运行它以捕获什么......

回答 2 投票 0

.NET 6 应用程序中内存使用率较高,内存中保留有大字符串

我在生产中运行的 .NET 6 应用程序中遇到异常高的内存使用率(4 个 System.String 实例使用 2 GIB)。我已经使用 dotnet-dump 和 dotnet 分析了内存转储...

回答 1 投票 0

如何查看非托管内存使用情况?

如何在 C# 项目中的 Visual Studio 中查看和监控非托管内存使用情况?有没有办法在调试时检查分配的内存是否已被正确删除? 代码: pv_M...

回答 2 投票 0

在 SpringBoot 应用程序中使用 V2 AWS DynamoDB SDK 导致 Tenured 或 Old Gen 内存峰值

我们有一个 springboot 应用程序与 DynamoDB 表通信,该表使用 V2 AWS SDK 和 DynamoDBEnhancedClient。在将应用程序部署到 EKS 并运行负载测试时,我们发现了一个问题...

回答 1 投票 0

如何查找内存泄漏在哪里?

我已将以下内容添加到主程序的末尾,并且获得了内存泄漏报告,但没有创建断点来显示当我在调试模式下运行代码时代码中发生泄漏的位置。我正在使用...

回答 2 投票 0

无法链接可执行文件“/vendor/X/BINARYFILE”:库“/data/valgrind/libexec/valgrind/vgpreload_core-amd64-linux.so”需要或由

在android框架中执行valgrind for.so二进制文件。在命令执行时遇到如下链接器错误,如何解决? 命令: valgrind --leak-check=full --tool=mem...

回答 1 投票 0

cJSON 内存泄漏

我在程序中使用 cJSON 将值转换为 JSON 并将其写入文件。这是我的代码示例: void writeStructToFile(IOPipe this, struct structtype somevalues) { cJSON *jout =

回答 3 投票 0

SwiftUI (Mac) @Observable 内存泄漏,与数组相关,触发 App 生命周期

将 @Observable 视图模型与数组集合一起使用,如果在 init 中解决,将在突变时触发第二个 App 生命周期。 分解它: 视图模型 @Observable 类 ContentViewModel { 变...

回答 1 投票 0

HtmlUnit 关闭所有窗口内存泄漏

HtmlUnit 似乎不会关闭 Web 客户端中的窗口,从而造成内存泄漏。我正在尝试使用 HtmlUnit 获取页面并将其传递给 JSoup 进行解析。我知道 JSoup 可以

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.