pprof的原理



pprof的原理

pprof的原理

性能调优时,要分析找出哪里操作比较费时,这里pprof工具就十分重要了,它可以告诉你哪个函数被调用了多少次,帮你找到性能瓶颈。那么,pprof的原理是怎样的呢?

先从最简单的说起,关键字"取样"和"统计"。我们知道操作系统是有时钟中断的,每个进程运行一些CPU时间片,当中断到来就会切到其它进程。假设我们在每个时钟中断时对程序进行取样。具体方式是,将程序代码段的每条指令都分配一个槽,每个中断时,通过查看PC寄存器可以知道执行的哪条指令,将对应的指令槽加一。最后就可以统计,得到程序中每条指令被调用的频率。

这个是最基本的,但是有些问题。首先,指令级别的统计信息是没有太大意义的,比如说我们得到mov指令10000次,jmp指令400次是没用的,我们至少要做函数级的取样,得到函数被调用的次数。当然,只有函数信息还是不够的,比如说我们得到memset函数占整个函数调用的23%,但显然是这个库函数,我们得知道是到底是谁在调它才能找到问题。

其实,由操作系统每次中断去统计的方式,显然是不够灵活的。

不过上面已经把pprof最核心的原理说明白了,就是取样和统计。虽然存在一些问题,但是可以改进嘛。先说第二个问题, 其实可以让操作系统把计时器抽象出来,给程序发SIGALRM信号,然后由用户层去处理计时器取样,这样就灵活多了。

再看第一个问题,我们要做函数级别的信息统计并得到调用关系,其实是应该对栈帧进行取样。

假设我们在程序执行的某个时刻取样得到一个栈帧序列是ABC,可以得到的信息包括:此刻运行的函数是C,是从函数B调用到C的。当取样很多次后进行统计,就可以得到调用的信息。比如对下面这段代码的取样:


Read full article from pprof的原理


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts