利用arthas实时定位线上性能问题

本文介绍了如何利用阿里开源的Java调试工具arthas在遇到线上性能问题时进行实时定位。通过arthas,可以在不重启服务的情况下,找出响应慢的具体方法,以及CPU高的线程。文章详细阐述了arthas的使用场景、可能遇到的问题,以及实际应用案例,特别是针对Solr服务器性能问题的定位方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 场景及需求

我们线上5台solr读服务器,配置一样,但是相同的请求,其中一台响应时间明显比其他4台慢,我们想通过arthas来定位具体哪里执行慢。

1. arthas介绍

阿里开源的java调试工具,能解决如下的问题:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?

从我们实际使用经验来说,可以解决两个常见的问题:

  1. 性能慢时,可以定位是具体哪个方法慢。
  2. cpu高时,很方便的定位到那个线程高。

2. 先说坑

我们分别在2台测试环境和1台线上环境测试arthas,发现在2台测试环境中出现如下两个问题:

  1. 166测试环境,安装提示成功,但是一直无法启动,通过源码我们发现安装并没成功,但是提示成功。
  2. 151测试环境,使用trace监控方法请求流程耗时时,出现java(tomcat)进程没有响应和被杀死两种无法接受情况。

建议: 上述2问题,在线上生产环境没遇到,但是不建议在线上正常运行环境中使用arthas;但线上java程序遇到重大问题,可以考虑使用arthas快速定位问题,但是前提是能接受我们遇到的两个坑。

3. 重点用法介绍

# 安装
curl -L https://alibaba.github.io/arthas/install.sh | sh
# 如果没法正常安装,提示SSL connect error,执行:yum -y update nss,更新nss

# 打开
./as.sh
# 如果java进程使用非root账户启动,如solr用户启动,则使用如下启动脚本
sudo -u solr -EH ./as.sh

# 查看cpu占用高的3个线程 类似top -H,但是能看到堆栈信息
thread -n 3
### Arthas与Prometheus在IT监控工具中的对比及集成 #### 功能定位差异 Arthas是一个Java诊断工具,专注于实时分析和排查运行中的Java应用程序问题[^1]。通过命令行界面提供多种功能来帮助开发者理解程序行为、性能瓶颈以及异常情况。 相比之下,Prometheus则是一款开源的系统监测告警框架,能够抓取时间序列数据并存储起来用于查询展示,支持灵活配置规则触发报警通知机制。 #### 技术实现方式 对于Arthas而言,其工作原理基于JVM instrumentation技术,在不重启应用的前提下加载agent到目标进程中执行各类操作;而Prometheus主要依赖于HTTP协议拉取被监控对象暴露出来的metrics端点上的指标信息完成采集任务。 #### 使用场景区别 当遇到线上服务突然出现问题时,可以借助Arthas快速获取当前线程状态、方法调用耗时统计等细节以便及时止损;若是构建企业级持续交付流水线,则更倾向于采用Prometheus配合Grafana做可视化大盘呈现整体健康状况和发展趋势预测。 #### 集成可能性探讨 尽管两者侧重点不同,但在实际生产环境中完全可以相辅相成共同发挥作用——利用Arthas深入挖掘特定时刻下的内部运作机理作为临时应急手段;与此同时依靠Prometheus长期稳定地跟踪记录各项关键绩效指数(KPI),一旦发现异常波动即刻发出警告提醒运维人员介入处理。 ```java // 示例:使用Arthas查看某个类的方法执行次数 watch com.example.MyService "method()" "{params, returnObj, throwExp}" -n 5 ``` ```yaml # 示例:定义Prometheus scrape job收集自定义metric scrape_configs: - job_name: 'example' static_configs: - targets: ['localhost:9090'] labels: group: 'development' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值