标签: profiling

如何在linux上看到(C和C++)二进制符号?

你们使用哪些工具?demangle c ++符号如何能够将它传递给探查器工具,例如opannotate

谢谢

c c++ performance profiling name-mangling

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

调试堆分析中未显示的内存泄漏

我正在研究接收和处理JSON请求的Haskell守护程序.虽然守护进程的操作很复杂,但主要结构有意保持简单:它的内部状态只是IORef一个数据结构,所有线程都对此执行原子操作IORef.然后有几个线程在触发器上取值时用它做一些事情.

问题是守护进程泄漏了内存,我无法找到原因.它肯定与请求相关:当守护进程每秒收到多个请求时,它会泄漏大小为1MB/s(由Linux工具报告).内存消耗稳步增长.没有请求,内存消耗保持不变.

令我感到困惑的是,这些都没有在GHC分析中显示出来.要么我在配置文件参数中缺少某些内容,要么内存被其他内容消耗:

运行+RTS -hc -xt -p:

profiler输出的屏幕截图

运行+RTS -hr -xt -p:

profiler输出的屏幕截图

在此测试运行期间,守护程序随后消耗超过1GB.因此,分析数据显然与实际消耗的内存数量级不对应.(我知道RTS,GC和性能分析本身会增加实际内存消耗,但这种差异太大了,并不符合不断增加的消耗.)

我已经尝试rnf了守护进程内的所有状态数据IORef,以及解析的JSON请求(以避免部分JSON字符串保留在某处),但没有太大的成功.

欢迎任何想法或建议.

更新:守护程序没有运行-threaded,因此没有操作系统级别的线程.

GC统计信息更接近堆分析而不是Linux报告的数字:

    Alloc    Copied     Live    GC    GC     TOT     TOT  Page Flts
    bytes     bytes     bytes  user  elap    user    elap
[...]
  5476616     44504   2505736  0.00  0.00   23.21  410.03    0    0  (Gen:  0)
 35499296     41624   2603032  0.00  0.00   23.26  410.25    0    0  (Gen:  0)
 51841800     46848   2701592  0.00  0.00   23.32  410.49    0    0  (Gen: …
Run Code Online (Sandbox Code Playgroud)

profiling haskell memory-leaks ghc

37
推荐指数
1
解决办法
1223
查看次数

分析python C扩展

我开发了一个python C扩展,它从python接收数据并计算一些cpu密集型计算.可以分析C扩展吗?

这里的问题是在C中编写样本测试以进行分析将是一项挑战,因为代码依赖于特定的输入和数据结构(由python控制代码生成).

你有什么建议吗?

c python profiling

36
推荐指数
4
解决办法
7532
查看次数

Linux应用程序分析

我需要一些方法来记录Linux机器上的应用程序的性能.我不会有IDE.

理想情况下,我需要一个应用程序,它将附加到进程并记录定期快照:内存使用数线程CPU使用率

有任何想法吗?

linux profiling

35
推荐指数
3
解决办法
4万
查看次数

使用valgrind知道每个函数花费的时间(以秒为单位)

是否有任何valgrind的扩展,可以在命令窗口中使用,这将帮助我知道我的C代码中每个函数花费的时间(以秒为单位)?

谢谢=)

c profiling valgrind

35
推荐指数
2
解决办法
5万
查看次数

分析PHP代码

我想找到一种方法来确定PHP中的每个函数以及PHP中的每个文件运行的时间.我有一个旧的遗留PHP应用程序,我正试图找到"粗糙点",所以我想找到客观上需要很长时间加载的例程和页面.

是否有任何预制工具可以实现这一点,或者我是否坚持使用microtime,并构建自己的分析框架?

php performance profiling

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

为什么clock_gettime如此不稳定?

介绍

  • 章节旧问题包含初始问题(此后已添加进一步调查结论).

  • 跳到部分进一步调查下面的不同的定时的方法(详细比较rdtsc,clock_gettimeQueryThreadCycleTime).

  • 我相信CGT的不稳定行为可归因于有缺陷的内核或有缺陷的CPU(参见结论部分).

  • 用于测试的代码位于此问题的底部(请参阅附录部分).

  • 道歉的长度.


老问题

简而言之:我clock_gettime用来衡量许多代码段的执行时间.我在单独的运行之间经历了非常不一致的测量.与其他方法相比,该方法具有极高的标准偏差(参见下面的说明).

问题:clock_gettime与其他方法相比,有没有理由给出如此不一致的测量结果?是否有一种替代方法具有相同的分辨率来解决线程空闲时间?

说明:我正在尝试分析C代码的一些小部分.每个代码段的执行时间不超过几微秒.在单次运行中,每个代码段将执行数百次,从而产生runs × hundreds测量值.

我还必须只测量线程实际执行的时间(这就是为什么rdtsc不适合).我还需要一个高分辨率(这就是为什么times不适合).

我尝试了以下方法:

  • rdtsc (在Linux和Windows上),

  • clock_gettime (在Linux上使用'CLOCK_THREAD_CPUTIME_ID';)和

  • QueryThreadCycleTime (在Windows上).

方法:分析在25次运行中进行.在每次运行中,单独的代码段重复101次.因此我有2525次测量.然后我查看测量的直方图,并计算一些基本的东西(如平均值,std.dev.,中位数,模式,最小值和最大值).

我没有介绍我如何测量三种方法的"相似性",但这仅仅涉及对每个代码段花费的时间比例的基本比较("比例"意味着时间被标准化).然后我看看这些比例的纯粹差异.这种比较表明,在25次运行中平均所有'rdtsc','QTCT'和'CGT'的比例相同.但是,下面的结果表明'CGT'具有非常大的标准偏差.这使得它在我的用例中无法使用.

结果:

的比较clock_gettimerdtsc对于相同的代码段(101个测量= 2525个读数25次运行):

  • clock_gettime:

    • 1881测量11 ns,
    • 595次测量(几乎正常分布)在3369和3414 ns之间,
    • 2次测量11680 ns,
    • 1测量1506022 ns,和
    • 其余的在900到5000 ns之间.

    • 最小值:11 ns

    • 最大值:1506022 ns
    • 平均值:1471.862 ns …

linux time profiling

34
推荐指数
1
解决办法
1万
查看次数

为什么不报告缓存未命中?

根据perf教程,perf stat应该使用硬件计数器报告缓存未命中.但是,在我的系统(最新的Arch Linux)上,它没有:

[joel@panda goog]$ perf stat ./hash

 Performance counter stats for './hash':

    869.447863 task-clock                #    0.997 CPUs utilized          
            92 context-switches          #    0.106 K/sec                  
             4 cpu-migrations            #    0.005 K/sec                  
         1,041 page-faults               #    0.001 M/sec                  
 2,628,646,296 cycles                    #    3.023 GHz                    
   819,269,992 stalled-cycles-frontend   #   31.17% frontend cycles idle   
   132,355,435 stalled-cycles-backend    #    5.04% backend  cycles idle   
 4,515,152,198 instructions              #    1.72  insns per cycle        
                                         #    0.18  stalled cycles per insn
 1,060,739,808 branches                  # 1220.015 M/sec                  
     2,653,157 branch-misses             #    0.25% of …
Run Code Online (Sandbox Code Playgroud)

linux optimization profiling caching perf

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

交互式Python:虽然正确导入了line_profiler,但无法使`%lprun`正常工作

问题

大多数IPython的"神奇功能"的工作对我罚款马上蝙蝠: %hist,%time,%prun等.然而,我注意到,%lprun无法IPython中找到,因为我想最初安装它.

尝试解决

然后我发现我应该安装line_profiler模块.我已经安装了这个模块,但似乎仍然无法使魔术功能正常工作.如果我试图打电话%lprun,iPython仍然无法找到该功能.如果我用全名(line_profiler.magic_lprun)调用它,可以找到该函数,但我根本无法使用它.下面是我所做的一个例子(从"Python for Data Analysis"一书中逐步采用):

成功使用 %prun

[在:]

def add_and_sum(x, y):
    added = x + y
    summed = added.sum(axis=1)
    return summed

x = randn(3000, 3000)
y = randn(3000, 3000)

add_and_sum(x, y)
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到了一个很好的答案,正如所料:

[输出:]

array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747,
    63.84057725, -50.28469621])
Run Code Online (Sandbox Code Playgroud)

我可以做剖析魔术功能%prun:

[在:]

%prun add_and_sum(x, y)
Run Code Online (Sandbox Code Playgroud)

[输出:]

6 function calls in 0.042 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime …
Run Code Online (Sandbox Code Playgroud)

python profiling magic-function ipython spyder

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

VisualVM:CPU /内存分析器停留在"连接到目标JVM ......"

我最近重新安装了Windows,我使用的是内置VisualVM的JDK 1.8 u91.我已经检查了我的代理设置,以确保它们都在Windows代理设置和VisualVM的代理设置中全部关闭.

我也尝试重新安装JDK,重新启动计算机,重新安装Windows.我只安装了一个JDK,并且类路径设置为Windows中的JDK bin文件夹.

除了CPU和内存分析之外的所有功能都在VisualVM中工作.我的应用程序是从IntelliJ运行的,但我也尝试从命令行定期运行应用程序,VisualVM也无法连接到那些应用程序.

我也试过从http://visualvm.java.net下载VisualVM,这也不起作用.

我没有安装插件.

它为什么挂?这是新JDK引入的错误吗?

java profiler profiling visualvm jvisualvm

34
推荐指数
1
解决办法
7872
查看次数