1. 程式人生 > >系統技術非業餘研究 » 調查使用者空間程式某函式最常呼叫路徑

系統技術非業餘研究 » 調查使用者空間程式某函式最常呼叫路徑

在做系統調優或者調查效能問題的的時候,比如說調查一個鎖的效能問題。 這把鎖的程式碼會有很多路徑會呼叫, 我們可以在鎖的地方設個probe點,但是我們無法知道那個路徑是最經常呼叫的。 所以我就寫了個stap指令碼來解決這個問題,程式碼在RHEL 5.4/6下都除錯沒有問題的。

$ cat  > dig.stp 
global stacks_count

probe process(@1).function(@2)
{
 stacks_count[ubacktrace()]++;
}

function sprint_stackx(stack)
{
addr = tokenize(stack, " ");
while(addr != "")
{
        fun= symname(strtol(addr, 16));
        s = fun . "->" . s;
        addr = tokenize("", " ");
}
return s;
}

function print_top_stack () {
  printf ("%50s %10s\n", "STACK", "COUNT")
  foreach (stack in stacks_count- limit 20) {
    printf("%50s %10d\n", sprint_stackx(stack), stacks_count[stack])
  }
  delete stacks_count
}

probe timer.s(5) {
  print_top_stack ()
  printf("--------------------------------------------------------------\n")
}

CTRL+D

#我們用nmon這個程式來試驗下吧
#指令碼的使用方法是: stap dig.stp prog funcs
#注意這個程式需要-g編譯, 才能有符號資訊

#在另外一個控制檯下執行nmon, 開啟磁碟,CPU監控等。
$nmon

$ sudo stap dig.stp nmon proc_*
                                             STACK      COUNT
                                 main->proc_read->          2
                                  main->proc_cpu->          2
                                 main->proc_read->          2
                                  main->proc_mem->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
                 main->proc_mem->proc_mem_search->          2
--------------------------------------------------------------
...

哈效果不錯哦!

祝玩的開心。

Post Footer automatically generated by wp-posturl plugin for wordpress.

相關推薦

系統技術業餘研究 » 調查使用者空間程式函式呼叫路徑

在做系統調優或者調查效能問題的的時候,比如說調查一個鎖的效能問題。 這把鎖的程式碼會有很多路徑會呼叫, 我們可以在鎖的地方設個probe點,但是我們無法知道那個路徑是最經常呼叫的。 所以我就寫了個stap指令碼來解決這個問題,程式碼在RHEL 5.4/6下都除錯沒有問題的。 $ cat >

系統技術業餘研究 » 調查伺服器響應時間的利器 tcprstat

我們在做伺服器程式的時候,經常要知道一個請求的響應時間,藉以優化或者定位問題。 通常的做法是在程式碼裡面加入日誌計算時間,這個方法有問題,時間不準確。因為資料從網絡卡到應用程式,從應用到網絡卡的時間沒有被計算在內。 而且這個時間隨著系統的負載有很大的變化。 那同學說,我wireshark, tcp

系統技術業餘研究 » Linux快取記憶體使用率調查

Linux的快取記憶體pagecache對效能的影響至關重要,但是實際系統中我們的利用率如何呢,特別是具體到每個裝置的利用情況。 從下圖我們可以很清楚的看到: 我們知道IO請求由vfs發起,經過pagecache快取,擋不住的就落實到io裝置去,那麼統計這個利用率就很簡單。 我們只要知道擋不住的

系統技術業餘研究 » IO模式調查利器blkiomon介紹

blkiomon 是blktrace工具包帶的一個方便使用者瞭解IO情況的工具, 由於blktrace太專業,需要了解的IO協議棧的東西太多,blkiomon給大多數的使用者提供了一種易於使用的方式. blktrace的使用參考這裡: http://blog.yufeng.info/archive

系統技術業餘研究 » CPU拓撲結構的調查

在做多核程式的時候(比如Erlang程式),我們需要了解cpu的拓撲結構, 瞭解logic CPU和物理的CPU的對映關係,以及瞭解CPU的內部的硬體引數,比如說 L1,L2 cache的大小等資訊。 Linux下的/proc/cpuinfo提供了相應的資訊,但是比較不全面。 /sys/devi

系統技術業餘研究 » 程序死亡原因調查:被殺?

最近MySQL平臺化系統都是用熱升級來更新的,在線上的日誌發現類似的crashlog: 2013-07-24 23:54:06 =ERROR REPORT==== ** Generic server <0.31760.980> terminating ** Last message i

系統技術業餘研究 » ioprofile調查應用IO情況的利器

我們在做IO密集型的應用程式的時候,比如MySQL資料庫,通常系統的表現取決於workload的型別。 比如我們要調優,我們就必須非常清楚的知道資料的訪問規律,收集到足夠的資料,用來做調優的依據。 有很多工具可以收集系統層面的,裝置層面的,程序層面的IO資料,但是沒有一個現成的工具可以回答我們比如

系統技術業餘研究

ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼

系統技術業餘研究 » MySQL資料庫架構的演化觀察

MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql

系統技術業餘研究 » inet_dist_connect_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 推薦工作機會

最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗:
 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海

系統技術業餘研究 » 新的工作和研究方向

和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w

系統技術業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 2017升的快的幾個資料庫無責任點評

ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼

系統技術業餘研究 » Erlang 17.5引入+hpds命令列控制程序預設字典大小

Erlang 17.5釋出引入控制程序預設字典大小的命令列引數: Erlang/OTP 17.5 has been released Written by Henrik, 01 Apr 2015 Some highlights of the release are: ERTS: Added co

系統技術業餘研究 » inet_dist_listen_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 老生常談: ulimit問題及其影響

ulimit最初設計是用來限制程序對資源的使用情況的,因為早期的系統系統資源包括記憶體,CPU都是非常有限的,系統要保持公平,就要限制大家的使用,以達到一個相對公平的環境。以下是典型的機器預設的限制情況: $ ulimit -a core file size (blocks,

系統技術業餘研究 » 求賢帖

原創文章,轉載請註明: 轉載自系統技術非業餘研究 本文連結地址: 求賢帖 作為一個優秀的工程師,你其實不缺少才華,你缺少的是神一樣的隊友、充滿挑戰的世界級技術難題,和一個可以施展自己才華的大舞臺。加入阿里核心系統資料庫開發團隊吧,你缺的這裡都有。來吧,戳這裡,給我們見識你的機會:http://b

系統技術業餘研究 » Erlang R16B03釋出,R17已發力

Erlang R16B03釋出了,通常03版本是bug fix版本,進入生產版本,官方的說明如下: OTP R16B03 is a service release with mostly a number of small corrections and user contributions. B

系統技術業餘研究 » Erlang R13B04 Installation

R13B04後erlang的原始碼編譯為了考慮移植性,就改變了編譯方式,以下是官方wiki上的安裝文件: 1. Cloning Here are the basic steps to build Erlang/OTP in the Git repository. Start by cloning: