线上监控诊断利器 Arthas:
近期订单数据大量增加,客户反馈导出功能很慢,但在测试环境又没办法模拟,这时候想到了arthas实施线上监控,分析需要优化代码。导出功能主要涉及大sql查询,数据循环封装,excel生成,minio文件存储等步骤,arthas查看每个过程所用耗时。
下文参考官网:https://arthas.aliyun.com/doc/ 集成。
第一步:部署arthas-tunnel-server.jar。
- 从 Maven 仓库下载:https://arthas.aliyun.com/download/arthas-tunnel-server/latest_version?mirror=aliyun
- 从 Github Releases 页下载: https://github.com/alibaba/arthas/releases
Arthas tunnel server 是一个 spring boot jar 应用,直接java -jar启动:
nohup java -jar arthas-tunnel-server-3.6.6-fatjar.jar > server.out &
默认情况下,arthas tunnel server 的web 端口是8080,arthas agent 连接的端口是7777。启动之后,可以访问 http://127.0.0.1:8080/,再通过agentId连接到已注册的 arthas agent 上。
通过 Spring Boot 的 Endpoint,可以查看到具体的连接信息:http://127.0.0.1:8080/actuator/arthas ,登陆用户名是arthas,密码在 arthas tunnel server 的日志里可以找到,比如:
看到这个就算成功了:
第二步:pom.xml 添加
<!--集成Java诊断利器Arthas-->
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>3.6.1</version>
</dependency>
第三步:application.properties 配置 tunnel server 实现远程管理
arthas.agent-id= mall-tiny-arthas
arthas.tunnel-server= ws://43.139.*.*:7777/ws
官网上还有一种使用方式,这种方式主要适用于非SpingBoot应用
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-agent-attach</artifactId>
<version>${arthas.version}</version>
</dependency>
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-packaging</artifactId>
<version>${arthas.version}</version>
</dependency>
import com.taobao.arthas.agent.attach.ArthasAgent;
public class ArthasAttachExample {
public static void main(String[] args) {
ArthasAgent.attach();
}
}
也可以配置属性:
HashMap<String, String> configMap = new HashMap<String, String>();
configMap.put("arthas.appName", "demo");
configMap.put("arthas.tunnelServer", "ws://127.0.0.1:7777/ws");
ArthasAgent.attach(configMap);
下面开始进入Arthas.