2021年了,生产环境的问题你怎么解决呢?(下)

简介: 2021年了,生产环境的问题你怎么解决呢?

展示了线程执行的过程,以及最终停在了JNI 上。

"VM Thread" os_prio=0 tid=0x00007fd70813e800 nid=0xdb9 runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007fd70801e800 nid=0xdb5 runnable
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007fd708020800 nid=0xdb6 runnable
"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007fd708022000 nid=0xdb7 runnable
"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007fd708024000 nid=0xdb8 runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007fd708194800 nid=0xdc3 waiting on condition
JNI global references: 909

结束时,我们会注意到有几个额外的线程执行后台操作,如垃圾收集(GC)或对象终止:

分析线程Dump使用场景

为了了解我们的应用程序如何工作,我们需要有效地分析生成的快照。在Dump文件中,我们将获得大量关于所有线程的精确数据的信息。但是,我们需要整理日志文件,进行一些过滤和分组,以便从堆栈跟踪中提取有用的提示。一旦我们准备好Dump文件,我们就可以使用不同的工具来分析问题。

同步问题

通过观察线程状态,进行分析。我们需要重点关注线程状态 RUNNABLE 或者 BLOCKED的线程,最终是TIMED_WAITING。这些线程状态能够指导我们分析出,多个线程间的问题

  • 在死锁情况下,运行的多个线程在共享对象上持有一个同步块
  • 在线程争用中,当一个线程被阻塞等待其他线程完成时
运行问题

根据经验,对于异常高的CPU使用率,我们只需要查看RUNNABLE 线程。我们将使用线程Dump文件和其他命令来获取额外的信息。其中一个命令是top-H-ppid,它显示在特定进程中哪些线程正在消耗操作系统资源。我们还需要查看内部JVM线程,例如GC,以防万一。另一方面,当处理性能异常低时,我们将研究BLOCKED 线程。

在这些情况下,一次Dump肯定不足以理解正在发生的事情。为了比较同一线程在不同时间的堆栈,我们需要以相近的间隔进行大量Dump。一方面,一个快照并不总是足以找出问题的根源。另一方面,我们需要避免快照之间的冗余(太多的信息)。

要了解线程随时间的变化,建议的最佳实践是至少进行3次Dump,每10秒一次。另一个有用的技巧是将Dump文件分成小块,以避免加载文件时发生崩溃。

建议

为了有效地寻找问题的根源,我们需要组织堆栈跟踪中的大量信息。因此,我们将考虑以下建议:

  • 在执行问题中,以10秒的间隔捕获多个快照将有助于关注实际问题。如果需要,还建议拆分文件以避免加载崩溃
  • 在创建新线程时使用命名来更好地标识源代码
  • 根据问题的不同,忽略内部JVM处理(例如GC)
  • 当CPU或内存使用异常时,关注长时间运行或阻塞的线程
  • 使用top-H-ppid将线程堆栈与CPU处理关联起来
  • 最重要的是,使用Analyzer工具

手动分析Java线程Dump可能是一项比较困难的事情。对于简单的应用程序,可以识别产生问题的线程。对于复杂的情况,我们需要工具来简化这项任务。

在线工具

推荐几种在线可用的工具。在使用这种软件时,我们需要考虑到安全问题。请记住,我们使用线程工具,不可避免的与第三方共享线程日志。

FastThread

FastThread可能是分析生产环境中线程Dump文件的最佳在线工具。它提供了一个非常好的图形用户界面。它还包括多种功能,如线程的CPU使用率、堆栈长度以及最常用和最复杂的方法:

image.pngFastThread集成了RESTAPI,能来自动分析线程转储。通过一个简单的cURL命令,可以立即发送结果。主要缺点是安全性,因为它将堆栈跟踪存储在云中。

JStack Review

JStack Review是一个在线工具,用于分析Dump。从安全角度来看,它不会存储数据到云,这是使用它的一个主要优势。它提供了所有线程的图形化概述,显示了正在运行的方法,还按状态对它们进行了分组。JStack Review将产生堆栈的线程与其他线程分开,这一点非常重要,例如,内部进程。最后,它还包括同步器和忽略的行:

image.png

Spotify Online Java Thread Dump Analyzer

Spotify在线Java线程Dump分析器是一个用JavaScript脚本编写的在线开源工具。它以纯文本的形式显示结果,将带堆栈和不带堆栈的线程分开。它还显示正在运行的线程中的顶级方法:

image.png

离线应用

我们还可以在本地使用几个独立的应用程序。

JProfiler

JProfiler是市场上最强大的工具,在Java开发人员社区中也很有名。可以使用10天的试用许可证测试功能。JProfiler允许创建配置文件,并将运行的应用程序附加到它们。它包括多种功能,可以当场发现问题,例如CPU和内存使用情况以及数据库分析。它还支持与IDE集成:

image.png

IBM Thread Monitor and Dump Analyzer for Java (TMDA)

IBM TMDA可以用来识别线程争用、死锁和瓶颈。它是免费分发和维护的,但不提供IBM的任何保证或支持:

image.png

Irockel Thread Dump Analyser (TDA)

Irockel TDA是一个独立的开源工具,使用lgplv2.1授权。最后一个版本(v2.4)是在2020年8月发布的,因此它得到了很好的维护。它将线程Dump显示为一个树,还提供一些统计信息以简化搜索:

image.png

Eclipse Memory Analyzer (EMAT)

Eclipse内存分析器是一个快速且功能丰富的Java堆分析器,它可以帮助您发现内存泄漏并减少内存消耗。

image.png

总结

了解线程真正执行的过程,才能更好的把控应用的运行。

少年,加油!!!

目录
相关文章
|
2月前
|
移动开发 监控 测试技术
mPaas常见问题之针对某个机器做强制升级如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
|
10天前
|
移动开发 应用服务中间件 数据库
详尽分享预发环境与生产环境共享数据库时定时任务重复执行问题解决
详尽分享预发环境与生产环境共享数据库时定时任务重复执行问题解决
10 0
|
2月前
|
缓存 弹性计算 Serverless
Serverless 应用引擎操作报错问题之正常运行了两个月,今天更新小功能,结果前后端都报这个错误如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
NoSQL Java Linux
ChaosBlade常见问题之1.2.0未编译如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
|
2月前
|
数据库 Python
什么问题会导致404?如何解决404?
什么问题会导致404?如何解决404?
|
2月前
|
Kubernetes 测试技术 API
ChaosBlade升级问题之出现报错如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
|
2月前
|
SQL 分布式计算 大数据
maxcompute开发环境问题之同步到生产环境失败如何解决
MaxCompute开发环境是指设置和配置用于开发MaxCompute项目的本地或云端环境;本合集将指导用户如何搭建和管理MaxCompute开发环境,包括工具安装、配置和调试技巧。
|
12月前
|
微服务
什么是服务雪崩,怎么解决这个问题?
什么是服务雪崩,怎么解决这个问题?
162 0
|
12月前
|
监控 Java 测试技术
项目生产环境问题如何排查
在项目的生产环境中,问题的排查是非常重要的,它可以帮助我们快速定位并解决问题,保证项目的正常运行。本文将介绍一些常见的项目生产环境问题排查方法。
567 0
|
关系型数据库 MySQL Shell
糟了,生产环境数据竟然不一致,人麻了!
今天发现Mysql的主从数据库没有同步,瞬间整个人头皮发麻
533 0
糟了,生产环境数据竟然不一致,人麻了!