2009-08-13 51 views
33

這可能是一個邊緣廣告,更不用說主觀,但問題是誠實的。在過去的兩個月中,我一直在爲.NET開發一個名爲SlimTune Profiler的新開源代碼探查器(http://code.google.com/p/slimtune/)。C#/ .NET探查器應具有哪些功能?

這是一個相對較新的努力,但是當我看着可探查的範圍我不是非常深刻的印象。我已經根據現有的產品做了一些初步的工作,但我覺得這是一個很好的問題:你想從一個探查器到底想要什麼?

我來自實時圖形和遊戲,使探查是儘可能快的很對我很重要。否則,遊戲變得無法玩,並且分析無法玩的慢遊戲往往不會很有啓發性。我願意犧牲一些準確性。我甚至不關心例外情況。但是我對其他類型的應用程序的開發人員感興趣的東西並不是很熟悉。是否有任何製造或中斷功能?現有工具掉到哪裏?

我再次道歉,如果這是公正的方式關閉StackOverflow的基礎,但它始終是一個非常有用的資源,我和有一個非常廣泛的開發人員在這裏。

+7

我認爲這是一個有效的問題,尤其是考慮到您正在爲開發人員構建*軟件,並且它是開源的。真的很期待答案! – JoshJordan 2009-08-13 23:04:31

+0

借調。這是一個程序員工具。 – 2009-08-13 23:14:31

+0

我真的很喜歡它是開放源代碼的事實,我將看到如何使用dotTrace進行堆疊。 – 2009-08-19 17:45:25

回答

17

我的要求:

  • 收集統計數據,而不影響應用程序 - 例如,不填滿記憶,允許從應用程序下的問題收集的數據遠
  • 能夠簡單重複(數據驅動)
  • 可自動化測量指定,這樣我可以重複測量,而不指向和點擊,並且沒有UI
  • 使我們能夠了解相關的WPF和其他聲明的技術,如DLR或WF
  • 沒有安裝問題 - 沒有GAC,微星等,甚至更好,如果能在網絡上運行,從一開始就
  • 支持64位
  • 不要試圖瞭解所有可以做的分析 - 鼓勵生態系統。如果可以使用其他工具分析原始統計信息,那麼效果會更好。
  • 用戶界面如果任何應該是好的 - 但它的統計數據很重要。所以不要花時間在這方面,讓核心分析很好。不直的exe喜歡簡單的服務和Web應用程序的應用程序
    • 支持剖析。

會喜歡:

  • 考慮跨應用程序的支持 - 大型應用往往需要了解在多個可執行文件的應用程序的性能表現。如果你的分析器允許這種數據的易相關然後那就更好
+0

我實際上已經觸及了其中的一些 - 數據通過套接字廣播到配置文件目標,無論是本地還是遠程前端。後備數據存儲區是SQL Server Compact,最終還會有更多選項。我會考慮建立一個強大的自動化系統,因爲我認爲這是許多現有工具中缺少的一項非常重要的功能,數據驅動也將與此相關。 – Promit 2009-08-14 00:10:58

+2

+1對於64Bit從一開始 – TWith2Sugars 2009-08-16 14:12:10

+2

+1對於64Bit從一開始 – 2009-08-16 16:51:47

4

EQATEC Profiler,這是一個免費的.NET分析器,我一直含義使用。

有一兩件事我想看到的是單聲道的兼容性。我開始涉足單聲道,擁有.Net和Mono分析器會很棒!

11

我的願望清單:

  • 真的很容易使用 - 簡單(但功能強大)GUI
  • 驕人的業績 - 個人資料是在極其大量使用應用程序的能力。
  • X64X32支持
  • 參透SQL,是能夠給我堆棧跟蹤和持續時間爲我所有的SQL調用,加上SQL。
  • 簡單易用,無需經過複雜的工作,重新編譯應用程序。
  • 易於描述的服務,網站和流程作爲副作用發佈
  • 「生產模式」,它允許您從基於生產的系統收集關鍵統計數據。
    • 「自動瓶頸取景器」:對運行生產應用程序,並使用啓發式確定哪些方法是緩慢的。
  • 每線程分析,告訴我哪些線程做的所有工作,並在那裏。
  • 不同粒度的配置文件允許執行「便宜」配置文件,該配置文件只收集關鍵信息並通過粒度分析進行挖掘。
  • 異常跟蹤,請允許我來跟蹤所有這些都在我的應用程序拋出的異常(關鍵的統計信息和詳細信息)
  • 每線程分析 - 讓我在一個應用程序
4

下載配置文件的單個線程Visual Studio 2010 Beta 1的團隊套件版本(免費6個月左右?)以及配置C#應用程序。

相信我。 :)

編輯:行由行模式幫助我隔離是造成性能問題的運營商。我可以在沒有每行突出顯示的情況下找到它,但是當您可以滾動並查看使用它的熱線時,您可以輕鬆修復它。

哦,如果你想反饋/幫助,請單獨聯繫我。

摘要視圖:選擇CPU圖表的任何部分進行過濾。
Summary View http://www.280z28.org/images/vsx/ProfilingSummarySmall.png

我愛一行一行地在空白處:
Details View http://www.280z28.org/images/vsx/ProfilingDetailsSmall.png

+0

哦,漂亮。我不知道我是否會很快實現逐行 - 這對我來說似乎是一個低收益的高成本功能。但頂視圖非常漂亮,我肯定會從中獲得靈感。現在可以把我的MSDN訂閱用得很好,我想。 – Promit 2009-08-14 06:09:26

+0

這是一個不錯的截圖。對我而言,逐行是非常重要的,因爲即使是簡單的東西,如果它的調用量足夠大,也可以花費很多時間,所以很高興知道時間花在哪裏。 – Ian 2009-08-17 11:21:41

+0

呃,一般來說,一行一行的使用太昂貴了,但它可以很好地啓用特定的功能。我覺得很煩人的是,如果我想知道函數中哪一行很慢,我需要濫用「提取方法」。 – Brian 2009-08-18 18:14:43

2

我會添加一個在這裏,真的是甜的。做一個簡單的組件有一個可用的Mark(string)功能,其中如果應用程序調用該方法,然後在結果,你可以選擇看結果剛剛從那裏(最終|其他一些指定的標記)。另一種可能性是BeginSequenceEndSequence什麼的。雙精度加如果您可以指定標記是僅適用於當前線程還是適用於所有線程。

+0

因爲我來自遊戲,所以這個遊戲在列表中是超高的 - 分析幀到幀是非常重要的。 – Promit 2009-08-14 14:50:23

1

這將是很好,如果。來自Perfmon的.NET相關性能分析措施已經集成,因此您可以避免使用perfmon和您的應用進行「雙重」監控。這對於所有與內存相關的項目都非常有用。

1

我的首選探查器是「DevPartner性能分析社區版」(http://researchlibrary.theserverside.net/detail/RES/1165507815_474.html?psrc=MPR),不幸的是它不再可用。

是什麼讓它在競爭中脫穎而出的是圖形分析,它顯示了當前選定方法的一個框和被調用方法的傳出連接器,顯示了在每個方法中花費的時間百分比。此外連接器來打電話。當然,調用方法與調用方法相同,您可以根據需要擴展它們 這樣,您可以沿着調用堆棧自由導航,根據需要深入查看堆棧,並處理碎片中的熱路徑。

第二個需求是「易用性」,即它應該與所有相關的應用程序類型,Windows EXE,Web應用程序,Windows服務,WCF服務(Silverlight?)...一起運行。不僅僅是小樣本應用,還有企業大小不太平凡的應用。

1

我想至少有一些與ASP.NET的兼容性,但我知道它實際上很難得到它的工作。

在Shark中逐行是非常好的,我也希望在.NET中擁有它。

可視化器的選擇是一件好事 - 我想看到一堆不同的調用樹,統計圖,甚至是最頻繁調用哪些方法的熱圖。

2

我想在探查什麼:

  • 應該在32位和64位
  • 工作應該對所有層級(客戶端,應用服務器,數據庫)和一些方法在它們之間進行關聯COMPONENTES。例如,很高興看到對任何層的更改如何影響其他層。這可能有助於決定在哪一層實施特定功能。
  • 用於自動場景(構建服務器,壓力測試等)的命令行界面
  • 應具有輕量級採樣模式和更精確的儀器模式。第二個應儘可能少地影響執行測量。
  • 一個圖形用戶界面的易用性,並應生成必要的配置文件使用EM COMAND行模式
  • 生成一個starndard格式的結果(如果這樣的東西存在的話),所以我可以消耗與其他工具的結果
  • 還應該生成或導出結果到Visual Studio的格式(* .vsp)
  • 在兩個或多個結果文件之間進行比較,以查看代碼庫的演變或迴歸。
  • 收集和關聯與每個目標計算機上運行的其他進程的性能監視器數據的目標應用程序的數據以識別併發資源使用(存儲器,處理器,磁盤和網絡I/O)
  • 確定閾值其中一些警報機制應調用。例如,如果某個特定場景需要的時間超過指定時間,則可以通過電子郵件發送給他人。
  • 無法附加和脫離正在運行的過程以收集採樣數據而不會干擾目標應用程序。必須在生產現場使用。
1

一對夫婦的事情,我真的很想看到:

數據收集:

  • 一個選項,以允許上下文跟蹤通過新的線程。也就是說,當對新的Thread()或ThreadPool.Queue ...()的調用發生時,計算其他線程執行的工作,就好像它發生在調用函數內部一樣,即使它們發生在不同的線程上,調用方法實際上並沒有阻塞。這最終將允許人們識別在實現異步模式的通用方法中產生大量工作的代碼。這真的很棒!
  • 跟蹤方法內的分配。 .Net內存分析器已經可以做到這一點,但是確定哪些方法執行很多分配可能是非常寶貴的。即使其他工具可以做到這一點,將所有東西放在一個工具中總是很棒。
  • 一種聚合,能夠檢測使用中的「尖峯」並僅分析它們。這在分析意外和不經常出現異常情況的後臺進程時可能非常方便。

UI結束:

  • 比較兩分,並強調它們之間的重大分歧的能力。
  • 呼叫樹導航和熱路徑擴展(VS風格)也會很好。
2

Phsr已經提到了EQATEC Profiler

我喜歡的一個特點就是,即使沒有閱讀任何文檔或對我所做的事情都不加關注,我也能夠從頭到尾成功地對應用程序進行配置。可用性是一件美妙的事情。請注意如何添加所有這些奇特選項......不要在此過程中殺死可用性。

2

幾年前,我建立了一個探查器,並在SO上描述了它,以回答我現在找不到的其他問題,介紹如何構建探查器。

它基於我已經使用了幾十年的技術至少部分自動化,其中一個例子是here。它基於堆棧抽樣,關鍵在於信息的呈現方式以及用戶所經歷的思考過程。

關於性能調整的一般信念,在學校教授(由幾乎沒有真實世界軟件曝光的教授教授),並通過50,000名程序員繼續進行 - 這不可能是錯誤的現象,我建議需要質疑並提出更堅定的立場。這種方式讓我感到很孤單,因爲你可能會從圍繞SO巡航中收集信息。

我認爲profiler技術正在逐漸發展(在我看來越好越好)朝着堆棧抽樣和探索結果的方式。下面是我依賴(這你可能會發現一點點不和諧)的見解:

  • 揭開性能的問題,使他們能夠固定,測量性能,是兩個完全不同的任務。它們是手段和目的,不應該混淆。

  • 要發現性能問題,我們需要的是找到什麼樣的活動佔了大量的掛鐘時間花在可以用更快的東西來代替。

  • 這種活動的好處在於,他們需要時間將它們暴露給程序狀態的隨機時間樣本。

  • 如果在您關心的時間間隔內採集樣本,則不需要太多樣本。即在等待用戶輸入的同時進行採樣是毫無意義的。爲此,在我的分析器中,我讓用戶用鍵觸發樣本。

  • 你不需要很多樣品的原因是這樣的。任何給定的性能問題都會花費感興趣區間內壁鐘時間的一小部分X.該區間中的隨機樣本具有「在行爲中捕捉它」的X概率,因此如果採用N個樣本,則在該行爲中捕獲樣本的預期樣本數量爲NX。該樣本數量的標準偏差是sqrt(NX(1-X))。例如,如果N = 20,並且X = 20%,則可以預計大約2到6個樣本顯示問題。這給你一個不準確的問題度量,但它確實告訴你這是值得修復的,它給你一個非常精確的位置,而不需要進一步的偵測工作。

  • 問題通常表現爲更多的函數,過程或方法調用,而不是必要的,特別是隨着軟件變大,具有更多抽象層以及更多堆棧層。我期待的第一件事情是在多個堆棧樣本上出現的呼叫站點(不是函數,但是調用語句或指令)。他們出現的堆棧樣本越多,花費越多。我期待的第二件事是「它們能被替換嗎?」如果他們絕對不能用更快的東西代替,那麼他們就是必要的,我需要去其他地方看看。但通常它們可以被替換,並且我獲得了很好的加速。所以我正在仔細研究特定的堆棧樣本,而不是將它們彙總到測量中。

  • 遞歸不是一個問題,因爲指令的開銷是它在堆棧上的時間百分比的原則是相同的,即使它自己調用它。

  • 這不是我曾經做過的事情,而是在連續的過程中。我修復的每個問題都會使程序花費更少的時間。這意味着其他問題會變得更大一部分時間,使他們更容易找到。這種效應複合化,因此通常可以實現顯着的累積性能改進。

我可以繼續,但我希望你好運,因爲我認爲需要更好的分析工具,而且你有很好的機會。

1

我幾乎在所有配置文件中都存在的一個問題是託管API執行自動分析和自動化測試。

我可以想象,你認爲,跆拳道...爲什麼會喜歡自動分析?

答案是,我們的一些客戶有關於速度,內存使用等方面的要求所以對於每一個新版本中,我們喜歡跑航運之前提到的東西測試。