簡體   English   中英

解釋VisualVM性能分析會話的結果

[英]Interpreting the results of a VisualVM profiling session

我有一個應用程序,使用Mac OS X上的 jdbc驅動程序將一些數據(約8萬個元組中的15mb數據)寫入SQLite數據庫。這是使用事務完成的,其中事務最大,其中一個表包含約4.5萬個插入。 對應用程序進行性能分析時,似乎有些奇怪:

  1. 如果我從一開始就使用System.in.read()暫停應用程序,則進程分配的內存將保持緩慢增長。 這是為什么?
  2. 當應用程序運行時,VisualVM監視器中使用的堆空間始終約為80mb。 但是,在對內存使用情況進行性能分析時,我總共得到大約10mb。 誰能解釋這種差異?

謝謝你的幫助。

內存使用中的拼圖模式是由於分析結果是通過RMI傳輸的。 從程序的實際內存分配中過濾出來確實是非常令人困惑和煩人的。 請參閱VisualVM分析是否污染了結果,以了解如何過濾這些結果:-)

關於您的第一個問題,您觀察了多長時間的緩慢增長。 當Java進程中的內存使用量處於靜止狀態時,通常會看到鋸齒狀模式的發展。 您是否看到同一時間段內發生任何GC? 如果沒有,那就是更多的證據支持了這個想法。

對於第二個問題,如果沒有更多信息,很難確定。 通常,您希望打開性能分析時,應用程序的行為會有所不同,因為計時窗口會發生變化,應用程序必須花時間報告數據並完成其正常工作,等等。可能是,如果打開性能分析,則會發生更多的內存分配,因為您的代碼現已檢測到,這會觸發GC,從而降低堆使用率。 禁用概要分析后,請嘗試在應用程序中執行System.gc()並告訴我們您的堆使用情況報告什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM