gpt4 book ai didi

java - 实时服务器 CPU 使用率高时的线程转储分析

转载 作者:行者123 更新时间:2023-12-02 03:32:12 25 4
gpt4 key购买 nike

从使用某些数据库使用 Java 开发的典型 MVC/Web 应用程序的角度来看:假设应用程序服务器托管在一台服务器上,数据库托管在另一台服务器上。如果我们在服务器(托管应用程序服务器)上实时发现 CPU 使用率高/速度慢,那么我们会进行线程转储并根据以下规则找出“罪魁祸首”线程:

1) 如果存在运行缓慢的 SQL(从 Web 应用程序内部触发)/数据库很慢,那么它永远不会导致托管应用程序服务器的服务器具有高 CPU 使用率。数据库缓慢只会使应用程序变慢。数据库缓慢会导致应用程序线程处于 BLOCKED/WAITING 状态,因为这些线程“战斗/竞争”以获得“有限”的数据库访问(典型的连接池内容)。

2)罪魁祸首始终是线程(处于可运行状态)在应用程序服务器层上执行某些 Activity ,例如在很长的 while 循环中运行和/或执行一些密集的操作/计算。

有人可以帮助验证上述理解吗?

最佳答案

确实,如果数据库是瓶颈,那么应用服务器通常不会有很高的 CPU 利用率。

确实,许多应用服务器线程处于 RUNNABLE 状态可能会导致 CPU 利用率高,但这并不总是导致 CPU 利用率高。

当应用程序服务器 JVM 内存不足(和/或应用程序生成大量垃圾)并且 JVM 在垃圾收集上花费过多的精力 (CPU) 时,会出现另一个主要替代方案。

有许多工具,例如 jvisualvm(包含在 JDK 中),可以立即明确问题所在。

关于java - 实时服务器 CPU 使用率高时的线程转储分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com