Articles of 内存泄漏

AsyncIO.ForceDotNet.Force()导致Windows XP上的内存泄漏

环境 生产中的操作系统:Windows XP SP3 IDE:Microsoft Visual Studio 2013旗舰版 目标框架:.NET框架3.5 NetMQ:3.3.1 AsyncIO:0.1.18 语言:C# 我们需要在Windows XP SP3上使用简单的REQ REP套接字来运行NetMQ应用程序。 我们从问题#412得知,在Windows XP上运行时,我们需要调用AsyncIO.ForceDotNet.Force(); 在使用NetMQ之前。 我们开始运行我们的应用程序一段时间(〜3分钟)后发现,因为我们每秒发送大量消息(每5毫秒1条消息或每秒12000条消息),我们看到内存泄漏的速度是〜 3MB /秒 我们的生产机器只有1 GB的RAM,并很快导致我们的应用程序崩溃。 下面的代码很好地重现了泄漏。 要查看泄漏情况,可以在任何Windows操作系统上运行(7,8或10); Windows XP SP3不是必需的(但没有AsyncIO.ForceDotNet.Force(),NetMQ不能在Windows XP SP3上运行)。 客户端代码(阻止我们在生产环境中部署应用程序的问题代码) class Client { static void Main(string[] args) { AsyncIO.ForceDotNet.Force(); while (true) { using (RequestSocket request = new RequestSocket()) { request.Connect("tcp://127.0.0.1:5555"); request.SendFrame("Hello"); byte[] recData; […]

.NET应用程序处理泄漏,如何find源代码?

我有一个在生产环境(WINDOWS XP + .NET 3.5 SP1)中运行的.NET应用程序,在2000年左右有一个稳定的处理计数,但是在某些未知的情况下,其处理计数会增加得非常快,最后会崩溃(超过10,000 PerfMon工具)。 我已经做了一个内存转储从那里增长期间(而不是崩溃),并导入到WinDbg,可以看到整体句柄总结: 0:000> !handle 0 0 7229 Handles Type Count None 19 Event 504 Section 6108 File 262 Port 15 Directory 3 Mutant 56 WindowStation 2 Semaphore 70 Key 97 Token 2 Process 3 Thread 75 Desktop 1 IoCompletion 9 Timer 2 KeyedEvent 1 所以毫不奇怪,泄露的types是Section ,挖更多: 0:000> !handle 0 […]

由激活上下文引起的dynamic加载的DLL上的文件句柄泄漏

我有一个dynamic加载和卸载DLL需要COMCTL32.dll> = 6.0版和MSVCR> = V9.0。 为了确保加载正确的版本,我在Visual Studio项目设置中启用清单文件生成,并将此条目添加到另一个清单文件中: <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> 在testing程序中,我调用LoadLibrary()然后调用该DLL的FreeLibrary() ,并且ProcessExplorer指出下面的文件句柄被泄露: C:\ WINDOWS \ WinSxS文件\ x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x,ww_6f74963e C:\ WINDOWS \ WinSxS文件\ x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83 从反汇编调用堆栈跟踪中,我了解到,在LoadLibrary() ,一个激活上下文被自动创build,并打开每个文件夹的句柄。 但是, FreeLibrary()并没有删除激活上下文。 如果我删除清单文件并设置项目设置来禁用清单生成,这些泄漏消失了。 但是,这样我将无法确保使用正确的MSVCR和COMCTL,因为这个DLL是由我无法控制的进程加载的。 有没有办法删除这个泄漏而不删除清单文件 ? 谢谢!

UMDH日志(Windows上的内存泄漏)

我正在使用UMDH工具来分析我的应用程序的内存泄漏。 UMDH日志观察到的最高泄漏如下: 237856226(241016812 – 3160586)3704833分配BackTraceE9 3685198(3704833 – 19635)BackTraceE9分配 NTDLL!RtlIpv4StringToAddressExW + 00011866 NTDLL!RtlSubAuthorityCountSid + 00000019 MSVCR80!的malloc + 0000007A 207093760(207355904 – 262144)791分配BackTrace6EB 790(791 – 1)BackTrace6EB分配 NTDLL!RtlIpv4StringToAddressExW + 00011866 NTDLL!RtlSubAuthorityCountSid + 00000019 php5ts!zend_register_internal_class_ex + 000001A5 我在debugging模式下构build了我的应用程序,并在_NT_SYMBOL_PATH中指定了PDB文件。 但是我仍然无法从我的应用程序中看到堆栈跟踪。 例如在上面的日志“MSVCR80!malloc + 0000007A”malloc被调用,但不知道我的应用程序的哪一部分。 需要什么额外的configuration才能在UMDH日志中显示debugging符号? 谢谢,

运行windows服务观看服务运行增长内存(泄漏)

我已经检查了所有post,但到目前为止还找不到解决scheme。 我没有设置一个servlets,只应监视我想要监视的其他服务是否运行,如果不是,请重新启动它,并在应用程序事件日志中放置一条消息。 服务本身效果很好,没有什么特别的:),但是当我启动服务时,它使用了大约1.6MB的内存,每10秒钟就会增长到60-70k,这对于它来说是非常有用的。 我尝试了处理并清除所有资源。 尝试与System.Timers的工作,而不是实际的解决scheme,但没有真正的工作,因为我想要的,内存仍然在增长。 在debugging或发行版本没有区别,我在.Net 2上使用它,不知道它是否对你有影响3,3.5或4。 任何提示? using System; using System.IO; using System.Diagnostics; using System.ServiceProcess; using System.Threading; using System.Timers; namespace Watchguard { class WindowsService : ServiceBase { Thread mWorker; AutoResetEvent mStop = new AutoResetEvent(false); /// <summary> /// Public Constructor for WindowsService. /// – Put all of your Initialization code here. /// </summary> public WindowsService() […]

Memory.CreateBitmapSourceFromHBitmap中的内存泄漏

我有下一个function(使屏幕截图) [DllImport("gdi32.dll")] private static extern bool DeleteObject(IntPtr hObject); private Screen SavedScreen { get; } = Screen.PrimaryScreen; private BitmapSource CopyScreen() { try { BitmapSource result; using ( var screenBmp = new Bitmap(SavedScreen.Bounds.Width, SavedScreen.Bounds.Height, PixelFormat.Format32bppArgb)) { using (Graphics bmpGraphics = Graphics.FromImage(screenBmp)) { bmpGraphics.CopyFromScreen(SavedScreen.Bounds.X, SavedScreen.Bounds.Y, 0, 0, screenBmp.Size, CopyPixelOperation.SourceCopy); IntPtr hBitmap = screenBmp.GetHbitmap(); //********** Next line do memory […]

C ++内存泄漏检测方法

我正在使用Windows上的许多外部库进行项目。 我得到了内存泄漏的问题:我通过覆盖操作符new / new []和delete / delete []来检测到许多内存泄漏。 问题是我知道有多less内存块泄漏,但不知道在哪里可以find它们,在被覆盖的函数中,我可以logging分配的内存块的大小和位置,没有堆栈跟踪。 所以要处理它,我想我也需要logging堆栈跟踪(但如何?),或者有什么办法来find哪些代码导致内存泄漏? 非常感谢您的帮助。

揭秘Windbd内存使用标签:“私人工作集”很大,而内存被标记为RegionUsageFree

运行后,我看到我的应用程序在TaskMgr中占用3.5Gb 我在Windbg看到的有点混乱: 0:022> !address -summary ProcessParametrs 0000000001b7ed70 in range 0000000001b7e000 0000000001b80000 Environment 0000000001c0c970 in range 0000000001c0c000 0000000001c0e000 ——————– Usage SUMMARY ————————– TotSize ( KB) Pct(Tots) Pct(Busy) Usage 1037fe000 ( 4251640) : 00.05% 87.22% : RegionUsageIsVAD 7fed67a5000 (8585059988) : 99.94% 00.00% : RegionUsageFree 7dd6000 ( 128856) : 00.00% 02.64% : RegionUsageImage 1900000 ( 25600) : 00.00% […]

空LibGdx游戏循环泄漏内存

我正在debugging我用eclipse编写的libGdx库。 我有一个巨大的内存泄漏,所以我在我的渲染循环中注释掉了行,直到我没有在那里。 但申请的公羊仍然在上升。 我最终用GTX设置界面创build了一个全新的项目。 当我开始的时候,同样的事情发生了。 它仍在以ca. 每秒4千字节。 不多,但它不会停止。 当查看堆数据时,我看到有可能导致它的com.badlogic.gdx.backends.lwjgl.LwjglInput。 但是我不知道我是否应该改变一些东西,当这个“问题”出现在GTX设置界面创build的项目中。 这是正常的应用程序? 我一直等到它从34'800K提高到40'000K,所以它可能永远不会停止。 这会最终导致OutOfMemoryexception吗? (顺便说一句,我使用Windows任务pipe理器的RAM值,而我使用的是Eclipse)

在Windows上使用Java Swing SystemLookAndFeel maschines会导致CachedPainter中的MemoryLeak与JTextPanes

我现在正在为一个令人讨厌的问题而苦苦挣扎。 在我的Java Swing应用程序中,我使用两个JTextPanes扩展了XML-Text的语法高亮显示,如下例所示,只做了一些小改动: 在JTextPanes中突出显示XML语法 这两个JTextPanes放置在两个JScollPanes中的JSplitPane中,该JSplitPane直接放置在JFrame的ContentPane中。 第一个TextPane是可编辑的(就像一个简单的XML请求编辑器),第二个TextPane显示来自我的服务器后端的XML响应。 一切都按预期工作,只要我不尝试在这些XmlTextPanes中放置“多行”。 这会导致内存使用量的快速增长(在将几行插入到一个或两个TextPanes之后,从<100 mb到1.000 mb)。 奇怪的是,即使重置Textpanes和/或删除它们(或者丢弃持有组件的Frame)也不会改变所使用的内存! 强制垃圾收集也不会改变任何东西。 东西还必须持有引用分配的东西…. 为了看看究竟是什么消耗了所有的内存,我尝试使用Eclipse MATS分析应用程序,结果如下: 清楚地表明,CachedPainter是持有很多东西…问谷歌似乎我不是唯一一个与CachePainter内存问题,但我无法find一个原因 – 甚至更重要的 – 和解决scheme。 经过这么多个小时的设置后,我发现当我设置我的应用程序使用时,这个问题不会发生 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 代替 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 通过crossPlatformLookAndFeel,我能够在我的文本框中放入数千行xml内容,而无需使用超过200 MB的内存。 使用相同的代码,但设置为PlatformLookAndFeel(Windows 7),我达到超过2k MB的内存使用约200行后 我可以重现这种行为编译对JDK7和JDK8 :(。 是什么原因造成的,我该如何解决? €dit:一些额外的信息:关于进一步的研究,似乎有些LAF有d3d缓冲区的问题。 这在MATS屏幕截图中的int []可能是某种渲染缓冲区,也指向相同的可能方向….我的应用程序已经设置,以防止一些渲染性能问题(例如框架resize): System.setProperty("sun.java2d.noddraw", Boolean.TRUE.toString()); 我可以尝试将这个标志添加到startparameters: -Dsun.java2d.d3d=false 或者你认为这不会有帮助?