一般的Java項目需要JVM調優嗎?注意哪些?

wlaiwangling


首先,直接答覆一次題主的問題,一般項目肯定是不需要進行JVM調優的,因為JVM 本身就是為這種低延時、高併發、大吞吐的服務設計和優化的,我們很少需要去改變什麼。所以,我們往往更偏重於應用服務本身的調優。

在一些應用中,比如大數據計算引擎,是一種非常極端的JVM應用,對延時的要求並不高,但對吞吐量要求很高,會有大量的短生命週期對象產生,同時也有大量的對象生存時間非常久,我們就需要對特定的一些 JVM 參數進行修改,不斷調整,做到最優。

再比如生產環境中出現內存溢出,我們需要判斷是由於大峰值下沒有限流,瞬間創建大量對象而導致的內存溢出,還是是由於內存洩漏而導致的內存溢出。對於內存洩漏導致的,這種問題就是程序的 Bug,我們需要及時找到問題代碼進行修改,而不是調整 JVM。

如果要調優,需要有參考指標,不要為了調優而調優,要有一個目標參考值,最終要達到什麼樣的調優結果,沒有指標的調優都是瞎指揮!以下列出幾個衡量系統性能的常用指標:

  • 響應時間:響應時間是衡量系統性能的重要指標之一,響應時間越短,性能越好,一般一個接口的響應時間是在毫秒級。響應時間還包括數據庫響應時間、服務端響應時間、網絡響應時間、客戶端響應時間。
  • TPS:指系統接口的 TPS(每秒事務處理量),因為 TPS 體現了接口的性能,TPS 越大,性能越好。在系統中,吞吐量分為兩種:磁盤吞吐量和網絡吞吐量。
  • 計算機資源分配使用率:通常由 CPU 佔用率、內存使用率、磁盤 I/O、網絡 I/O 來表示資源使用率。這幾個參數好比一個木桶,如果其中任何一塊木板出現短板,任何一項分配不合理,對整個系統性能的影響都是毀滅性的。

對於JVM調優來說,主要關注以下兩方面:JVM內存空間分配參數設置和垃圾回收器的選擇。

  • 內存空間的分配設置:JVM 內存分配不合理帶來的性能表現並不會像內存溢出問題這麼突出,最直接的表現就是頻繁的 GC,這會導致上下文切換等性能問題,從而降低系統的吞吐量、增加系統的響應時間。具體的實現包括調整堆內存空間減少 Full GC、調整年輕代減少 MinorGC、設置合理的 Eden 和 Survivor 區的比例。
  • 選擇合適的垃圾回收器:垃圾回收主要是指堆和方法區的回收,堆中的回收主要是對象的回收,方法區的回收主要是廢棄常量和無用的類的回收。垃圾收集器的種類很多,不同的場景有不同的選擇。對於每次操作的響應時間要求比較高的,我們可以選擇響應速度較快的 GC回收器,比如 CMS 回收器和 G1 回收器;而對系統吞吐量有較高要求時,就可以選擇 Parallel Scavenge 回收器來提高系統的吞吐量。

Java實戰技術


一般項目還真不用,隨便配置個1G的堆內存夠用,除非遇到oom問題或者效率實在有問題而其他方面已經優化。



暖寶寶爸


F:\\soft\\Java\\jdk1.8\\bin>jcmd -hUsage: jcmd <command>or: jcmd -lor: jcmd -hcommand must be a valid jcmd command for the selected jvm.Use the command "help" to see which commands are available.If the pid is 0, commands will be sent to all Java processes.The main class argument will be used to match (either partiallyor fully) the class used to start Java.If no options are given, lists Java processes (same as -p).PerfCounter.print display the counters exposed by this process-f read and execute commands from the file-l list JVM processes on the local machine-h this help ------------- 如果我回答對你有幫助,請關注我一下。或有其他問題也可以關注我,給我發私信/<command>


草莓愛旅行


下載下來的jvm已經調試好了,除非無法滿足使用需求,否則不要輕易修改


分享到:


相關文章: