你将如何找出一个对象使用了多少内存?我知道有可能找出代码块使用了多少,但不是实例化对象(在其生命中的任何时间),这就是我想要的.
我有一个.NET服务,其正常的私有工作集大约为80 MB.在最近的负载测试期间,进程达到3.5 GB内存使用量,导致整个机器的物理内存不足(使用4 GB中的3.9),并且在负载测试停止后很长时间内内存未释放.使用任务管理器,我获取了该进程的转储文件并在Visual Studio 2010 SP1中打开它,我可以开始调试它.
我如何诊断内存问题?我有dotTrace Memory 3.x,它是否支持转储文件的内存分析?如果没有,Visual Studio 2010 Premium的内存分析功能是否有帮助(我目前有专业版)?WinDbg可以帮忙吗?
更新:新的Visual Studio 2013 Ultimate现在可以使用转储文件本机诊断内存问题.有关详细信息,请参阅此博客文章.
.net memory-leaks crash-dumps visual-studio-2010 memory-profiling
可能重复:
什么是一些好的.NET Profilers?
我正在寻找好的.NET CLR内存分析工具.
我的关键要求是它将与IIS和独立的CLR应用程序配合良好.理想情况下,我会看到分配了哪些对象,分配它们的位置以及它们的大小?
有没有人对您推荐的特定工具有任何良好的体验?
在Python 2中有一些工具,但一切似乎都是旧的和过时的.
我发现了PySizer和Heapy但是一切似乎都是面向Python2的,需要付出很多努力来移植.
objgraph很有趣,但仍然不是一个完全工作的分析器
使用哪种工具?
python profiling memory-profiling memory-leak-detector python-3.x
R有一些内存分析工具,比如   Rprofmem(),Rprof()选项"memory.profiling=TRUE"和tracemem().最后一个只能用于对象,因此可以跟踪复制对象的次数,但不提供基于函数的概述.Rprofmem应该能够做到这一点,但即使是最简单的函数调用的输出也会lm()提供超过500行的日志.我试图找出究竟Rprof("somefile.log",memory.profile=T)做了什么,但我不认为我真的明白了.
我能找到的最后一个是托马斯·拉姆利的这个消息,说道,我引述:
我还没有工具来总结输出.
这是在2006年也有一些不错摘要选择现在任何机会,主要是基于Rprofmem(),神秘的输出Rprof()与memory.profile设置为TRUE或任何其他工具?
有人可以解释一下'文档计数'计数器在Chrome开发工具栏的时间轴标签中的含义是什么吗?
在我的应用程序中,我使用iframe并在其中一个页面中的一组页面中导航.目前,"文件计数"计数器显示了一系列值23-32,它代表什么样的?
提前致谢.
如何以编程方式在Google Chrome中获取我的网站的内存使用量(JS和总数)?
我看过使用未记录的HeapProfiler从Chrome扩展程序中执行此操作(请参阅此处),但我无法找到从中获取数据的方法.
我想测量每个版本的内存消耗,所以这需要编程.
编辑:我想出了如何使HeapProfiler方法工作.每个addHeapSnapshotChunk事件都有一个JSON对象的块.
chrome.browserAction.onClicked.addListener(function(tab) {
  var heapData,
    debugId = {tabId:tab.id};
  chrome.debugger.attach(debugId, '1.0', function() {    
    chrome.debugger.sendCommand(debugId, 'Debugger.enable', {}, function() {
      function headerListener(source, name, data) {
        if(source.tabId == tab.id && name == 'HeapProfiler.addProfileHeader') {
          function chunkListener(source, name, data) {
            if(name == 'HeapProfiler.addHeapSnapshotChunk') {
              heapData += data.chunk;
            } else if(name == 'HeapProfiler.finishHeapSnapshot') {
              chrome.debugger.onEvent.removeListener(chunkListener);
              chrome.debugger.detach(debugId);
              //do something with data
              console.log('Collected ' + heapData.length + ' bytes of JSON data');
            }
          }
          chrome.debugger.onEvent.addListener(chunkListener);
          chrome.debugger.sendCommand(debugId, 'HeapProfiler.getHeapSnapshot', {uid:data.header.uid, type:data.header.typeId});
        } …javascript performance google-chrome memory-profiling google-chrome-devtools
对于R Shiny Web应用程序,运行代码分析的哪些好方法可以显示处理时间最长的Shiny代码部分?
我有一个大而肥胖,复杂的Shiny应用程序,而且我想弄清楚在这个迷宫代码的哪个地方,我正在减慢我的Shiny应用程序.我已经试过Rprof和profr,但没有从他们那里得到太多的了解.
我有一个numpy脚本 - 根据top- 使用大约5GB的RAM:
  PID USER   PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16994 aix    25   0 5813m 5.2g 5.1g S  0.0 22.1  52:19.66 ipython
是否有内存分析器可以让我了解占用大部分内存的对象?
我试过了heapy,但是guppy.hpy().heap()给了我这个:
Partition of a set of 90956 objects. Total size = 12511160 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  42464  47  4853112  39   4853112  39 str
     1  22147  24  1928768  15   6781880  54 tuple
     2 …我正在学习Go,作为练习,我想实现一个链表.作为参考,我查看了Go官方代码(https://golang.org/src/container/list/list.go).与我相关的一件事是这些线:
   108  // remove removes e from its list, decrements l.len, and returns e.
   109  func (l *List) remove(e *Element) *Element {
   110      e.prev.next = e.next
   111      e.next.prev = e.prev
   112      e.next = nil // avoid memory leaks
   113      e.prev = nil // avoid memory leaks
   114      e.list = nil
   115      l.len--
   116      return e
   117  } 
我很好奇在这种情况下如何设置指向nil的指针可以防止内存泄漏?如果可能的话,我想构建一个有这个缺陷的程序,并在使用pprof进行分析时看到它(我将使用list.go的修改版本,而不使用这个nil指针设置).
为了清楚回答:如果其中一个节点有一个指向它的外部指针,那么所有相邻的被删除节点将通过该指针进行有效引用,并且不会被删除.

garbage-collection memory-leaks memory-management go memory-profiling
memory-profiling ×10
python ×3
.net ×2
memory-leaks ×2
performance ×2
profiling ×2
r ×2
crash-dumps ×1
go ×1
javascript ×1
memory ×1
numpy ×1
python-3.x ×1
r-faq ×1
shiny ×1