开发者社区 问答 正文

现在通过arms监控能知道有死锁,请问下有什么办法可以看到历史的线程状态吗?

现在通过arms监控能知道有死锁,但问题是为了应急对容器进行了重启。请问下有什么办法可以看到历史的线程状态吗?开了持续剖析功能,通过快照大致知道死锁的位置。但需要进一步分析线程的状态ea8c466c92b53112323739759157b3e4.png

展开
收起
真的很搞笑 2024-04-06 22:23:55 84 分享 版权
阿里云 AI 助理回答

要查看历史线程状态并进一步分析死锁问题,可以通过以下方法结合ARMS(应用实时监控服务)的功能实现。以下是详细步骤和建议:


1. 启用持续剖析功能

持续剖析功能可以帮助您获取应用运行期间的CPU、内存使用详情以及方法栈信息,这对于分析线程状态和死锁问题至关重要。

  • 前提条件

    • 确保使用的JDK版本符合要求:
    • OpenJDK:8u352+、11.0.17+、17.0.5+
    • Oracle JDK:11.0.21+、17.0.9+
    • 如果使用低版本JDK,可能存在应用崩溃的风险,建议升级到推荐版本。
    • 避免使用Alpine基础镜像,因为其移除了JDK调试符号,可能导致功能受限。
  • 操作步骤

    1. 登录ARMS控制台。
    2. 在左侧导航栏单击接入中心
    3. 找到目标容器集群,启用持续剖析功能
    4. 根据需要设置应用IP限制以控制生效范围。

2. 查看线程池监控数据

通过线程池监控功能,您可以获取核心线程数量、当前线程数量、最大线程数量、活跃线程数量等指标的历史数据,这些数据有助于分析线程状态。

  • 操作步骤
    1. 登录ARMS控制台。
    2. 在左侧导航栏选择应用监控 eBPF 版 > 应用列表
    3. 单击目标应用,进入应用详情页面。
    4. 在上方导航栏选择线程池监控
    5. 查看历史线程池指标数据,包括任务队列容量、线程数量变化趋势等。

3. 利用快照和调用链分析

持续剖析功能生成的快照可以提供死锁发生时的方法栈信息,结合调用链分析功能,您可以进一步定位问题。

  • 操作步骤
    1. 在ARMS控制台中,找到目标应用的数据库分析调用链分析页面。
    2. 单击操作列的调用链,查看死锁发生时的调用链路详情。
    3. 结合快照中的方法栈信息,分析线程之间的依赖关系和资源竞争情况。

4. 自定义采集线程相关指标

如果默认的线程池监控指标无法满足需求,您可以通过Service Monitor自定义采集线程相关的监控指标。

  • 前提条件

    • 已创建容器环境实例(即容器集群)。
    • 容器集群中已为需要暴露监控指标的Pod创建了Service,并配置了端口。
  • 操作步骤

    1. 登录ARMS控制台。
    2. 在左侧导航栏单击接入管理
    3. 找到目标容器环境,单击指标采集
    4. Service Monitor页面,单击新增,配置线程相关的Metric路径和采集间隔。
    5. 检查配置正确后,单击创建

5. 结合Prometheus监控大盘

Prometheus默认内置了多种容器监控大盘,您可以利用这些大盘查看历史线程状态和性能指标。

  • 操作步骤
    1. 登录ARMS控制台或Prometheus控制台。
    2. 在左侧导航栏选择接入管理 > 大盘查询
    3. 选择目标集群,查看对应的监控大盘。
    4. 在大盘中查找与线程相关的指标(如CPU使用量排行、平均耗时排行等),分析历史数据。

6. 注意事项

  • 数据存储与查询:ARMS充分利用云上分布式存储能力,确保数据存储无上限,您可以随时查询历史数据。
  • 分位数统计:如果需要查看P99分位数耗时等高级指标,请在自定义配置页面开启分位数统计功能。
  • 告警配置:建议结合ARMS告警平台,设置线程池异常的告警规则,以便及时发现问题。

通过以上方法,您可以有效查看历史线程状态并深入分析死锁问题。如果仍有疑问,建议联系阿里云技术支持团队获取进一步帮助。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答