标签: memory-profiling

使用 jvisualvm 进行内存采样

我正在使用 Java Visual VM 的内存采样功能,但我无法回答以下问题:

  1. 为什么会创建这么多实例?

  2. 为什么这些实例数和字节数不断增加?

例如,我创建了一个非常简单的 Java 程序,如下所示:

public class TestMemory{
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Hello");
        Thread.sleep(60 * 60 * 1000);
    }
} 
Run Code Online (Sandbox Code Playgroud)

我可以在 Java Visual VM 中看到有 611 个类。实例数量不断从 25,000 增加到接近 50,000,然后又回落到 25,000 左右。实例减少的原因可能是由 GC 引起的,但我不知道为什么这些数字如此动态,即使我没有对我的程序做任何事情。

profiling visualvm memory-profiling sampling

3
推荐指数
1
解决办法
2606
查看次数

是否可以知道Visual Studio 2013中加载了多少个类型的对象

我想知道在调试时是否可以知道使用Visual Studio 2013加载了多少个类型的对象.我目前正在使用C#进行开发.

c# memory-profiling visual-studio visual-studio-2013

3
推荐指数
1
解决办法
1146
查看次数

如何在Swift中检测和调试强引用周期?

在简单的情况下,它只是对几行代码的强烈盯着是微不足道的:

class A {
    var b: B?
}

class B {
  var a: A?
}

var a = A()
var b = B()
a.b = b
b.a = a
Run Code Online (Sandbox Code Playgroud)

如何解决> 50k行代码项目的这个问题(从Objective-C/C++移植).例如,有没有办法开发一个工具来在运行时遍历对象图(就像在Java/C#世界中那样)?

profiling memory-profiling swift

3
推荐指数
1
解决办法
1440
查看次数

记录memory_profiler中的报告

我正在使用memory_profiler来分析我的代码

from memory_profiler import profile

@profile
def whatever():
    ....
    ....
Run Code Online (Sandbox Code Playgroud)

所以,正如你们许多人可能知道我在屏幕上得到类似这样的输出:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a
Run Code Online (Sandbox Code Playgroud)

我的问题是:

由于@profile进程需要花费很多时间,因此我想知道我是否可以以某种方式记录/存储此输出,并让脚本保持运行,可能是在晚上.

我的想法是在许多def函数中使用装饰器@profile,并将所有结果以某种方式存储在单个TXT或许多不同的TXT文件中,这不是重要的,重要的是如果可能的话.

python profiler memory-profiling

3
推荐指数
2
解决办法
2121
查看次数

Racket 中的内存消耗

有没有一种简单的方法来测量 Racket 程序的内存使用情况?我正在尝试并行运行许多程序,并且我想确保每个程序都有足够的内存。

multithreading memory-profiling racket

3
推荐指数
1
解决办法
859
查看次数

memory_profiler:如何绘制每个函数的内存使用情况

版本:0.50.0

官方文档中。该博客有一个链接,它指导我如何制作每个函数的内存使用情况图。但是当我尝试运行本文中的确切代码时。

测试1.py

import time

@profile
def test1():
    n = 10000
    a = [1] * n
    time.sleep(1)
    return a

@profile
def test2():
    n = 100000
    b = [1] * n
    time.sleep(1)
    return b

if __name__ == "__main__":
    test1()
    test2()
Run Code Online (Sandbox Code Playgroud)

命令是:

mprof run test1.py
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

回溯(最近一次调用最后一次):

文件“test.py”,第 3 行,@profile NameError:名称“profile”未定义

这很奇怪,因为有官方的引用:

警告

如果您的 Python 文件从 memory_profiler import profile 导入内存分析器,则不会记录这些时间戳。注释掉导入,保留您的函数,然后重新运行。

因此,如果我想要每个函数的内存使用情况图,我需要注释掉 from memory_profiler import profile,但是当我注释掉它时,出现错误。

python memory-profiling

3
推荐指数
1
解决办法
2817
查看次数

LeakCanary 没有提供足够的信息来识别泄漏

我正在使用 LeakCanary,但堆分析结果没有提供足够的信息来检测任何泄漏。它只提到活动正在泄漏。

\n
D/LeakCanary: \xe2\x80\x8b\n    ====================================\n    HEAP ANALYSIS RESULT\n    ====================================\n    1 APPLICATION LEAKS\n    \n    References underlined with "~~~" are likely causes.\n    Learn more at https://squ.re/leaks.\n    \n    298153 bytes retained by leaking objects\n    Signature: a610bac3ef989ac5dc5a69244fc2882de5617\n    \xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n    \xe2\x94\x82 GC Root: System class\n    \xe2\x94\x82\n    \xe2\x94\x9c\xe2\x94\x80 android.provider.FontsContract class\n    \xe2\x94\x82    Leaking: NO (MyApplication\xe2\x86\x93 is not leaking and a class is never leaking)\n    \xe2\x94\x82    \xe2\x86\x93 static FontsContract.sContext\n    \xe2\x94\x9c\xe2\x94\x80 com.example.MyApplication instance\n    \xe2\x94\x82    Leaking: NO (Application is a singleton)\n    \xe2\x94\x82    mBoundService instance of com.example.services.SessionService\n    \xe2\x94\x82    mBase instance of …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks memory-profiling android-activity java-memory-leaks

3
推荐指数
1
解决办法
1812
查看次数

如何在代码中配置JVM内存?

我正在编写一个我无法在Eclipse中测试的servlet,我需要在服务器上运行.我想做内存分析并找出任何泄漏.所以,我想我需要编写调试语句来告诉我当前的内存使用情况.有人能指出我如何做到这一点的好参考和/或JDK中的哪些类做到这一点?

请注意,我不能使用"Eclipse MAT".

java jvm servlets memory-profiling

2
推荐指数
1
解决办法
3180
查看次数

以编程方式在iOS应用中获取内存使用情况的实时/脏字节(不是常驻/实字节)

根据我到目前为止所读的内容,实际/驻留字节表示分配给应用程序的字节数,包括该应用程序不再使用但尚未被OS回收的字节。活动/脏字节是应用程序实际使用且操作系统无法回收的字节。我认为XCode Debug导航器中显示的数字是“实时字节”。

我有兴趣通过编程方式获取此数字(用于我们自己的统计信息/分析),但是我发现的代码只能提供常驻字节的值,该值大于Xcode在某些设备上显示的值(几乎是两倍) ),实际上是在相同设备上,但iOS版本不同。(在iOS 9上,它的值几乎是它的两倍,但在iOS 11上,它的值几乎与Xcode相同)。

我正在使用的代码是这样的:

struct mach_task_basic_info info;
mach_msg_type_number_t size = MACH_TASK_BASIC_INFO_COUNT;
kern_return_t kerr = task_info(mach_task_self(),
                               MACH_TASK_BASIC_INFO,
                               (task_info_t)&info,
                               &size);
if( kerr == KERN_SUCCESS ) {
    NSLog(@"Memory in use (in bytes): %u", info.resident_size);
    return info.resident_size;
} else {
    NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}
Run Code Online (Sandbox Code Playgroud)

是否有一些代码来获取实时字节值(如Xcode所示)?

memory xcode memory-profiling ios

2
推荐指数
2
解决办法
869
查看次数

对 JVM 内存消耗进行基准测试,类似于 Android 操作系统的做法

当尝试对特定方法进行基准测试时,关于创建了多少对象以及在该方法运行时它们占用了多少字节,在 Android 中可以这样做:

Debug.resetThreadAllocCount()
Debug.resetThreadAllocSize()
Debug.startAllocCounting()
benchmarkMethod()
Debug.stopAllocCounting()
var memoryAllocCount = Debug.getThreadAllocCount()
var memoryAllocSize = Debug.getThreadAllocSize()
Run Code Online (Sandbox Code Playgroud)

我现在想对相同的方法进行基准测试,但在这些方法不可用的普通桌面应用程序上。我没有发现任何类似的东西,我尝试过的任何其他内存基准测试代码都没有提供一致的结果,就像上面的代码一样,每次运行相同的基准测试时都会给出完全相同的结果。

任何建议,最好只是代码将不胜感激,但是如果它能够执行我正在尝试做的任务,我也愿意尝试一些软件。

java memory benchmarking jvm memory-profiling

2
推荐指数
1
解决办法
185
查看次数