簡體   English   中英

實時服務器具有高CPU使用率時的線程轉儲分析

[英]Thread dump analysis when live server has high CPU usage

從使用Java使用某些數據庫開發的典型MVC / Web應用程序的角度來看:假設應用程序服務器托管在一個服務器上,而數據庫托管在另一台服務器上。 如果我們在服務器(托管應用服務器)的實時服務器上獲得較高的CPU使用率/響應速度,則我們將進行線程轉儲並根據以下規則找出“罪魁禍首”線程:

1)如果運行緩慢的SQL(從Web應用程序內部觸發)/數據庫運行緩慢,則永遠不會導致托管應用服務器的服務器具有較高的CPU使用率。 數據庫緩慢只會使應用程序變慢。 數據庫運行緩慢導致應用程序線程處於“阻塞/等待”狀態,因為這些線程“爭奪/競爭”以獲得“有限的”數據庫訪問權限(典型的連接池內容)。

2)罪魁禍首永遠是線程(處於RUNNABLE狀態)在應用服務器層上執行某些活動,例如在很長的while循環中運行和/或進行一些密集的操作/計算。

任何人都可以幫助驗證以上理解嗎?

的確,如果數據庫是瓶頸,那么應用服務器通常不會具有很高的CPU利用率。

的確,擁有許多處於RUNNABLE狀態的應用服務器線程會導致較高的CPU使用率,但這並不總是導致較高的CPU使用率的原因。

當應用程序服務器JVM的內存不足(和/或應用程序產生大量垃圾)並且JVM在垃圾收集上花費了過多的精力(CPU)時,就會發生另一種主要的選擇。

有很多工具,例如jvisualvm(JDK附帶),可以使問題出在哪里就可以立即發現。

暫無
暫無

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

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