Arthas

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy BUG排查

杀马特。学长 韩版系。学妹 提交于 2021-02-18 02:25:18
将某个子项目从war包转化为jar包打包方式后。忘记修改pom.xml中对servlet-api等的修改。 <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>8.0</version> <scope>provided</scope> </dependency> 因此在开发环境中,因为ecplise中自带有javaee-api包。没有发现任何问题,然后在用java -jar方式中运行时,出现BUG java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 在类似服务器部署环境没法进行debugger的条件下,正好这两天看了 arthas 可以类似aop,监听某方法的调用等。刚好能查看一下这个莫名奇妙的异常信息。 arthas 的操作主要有两步: 打开 arthas options unsafe (对系统级别的类进行增强)。因为sun.reflect.annotation.TypeNotPresentExceptionProxy类是系统类,直接watch监听会报No class or method is affected; watch sun.reflect

阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!

坚强是说给别人听的谎言 提交于 2021-02-16 11:10:57
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 291 篇原创分享 作者 l 汪吉 来源 l Hollis(ID:hollischuang) 入门步骤 安装 https://arthas.gitee.io/install-detail.html 上述命令会下载启动脚本文件 as.sh 到当前目录,执行方式: curl -L https://alibaba.github.io/arthas/install.sh | sh as.sh 启动 : curl -sk https://arthas.gitee.io/arthas-boot.jar -o ~/.arthas-boot.jar && echo "alias as.sh='java -jar ~/.arthas-boot.jar --repo-mirror aliyun --use-http'" >> ~/.bashrc && source ~/.bashrc 在线教程体验 https://alibaba.github.io/arthas/arthas-tutorials?language=cn 当然也可以自己本地体验一下~自己通过下载一个 arthas-idea-plugin的体验demo 直接本地上手 https://github.com/WangJi92/arthas-plugin-demo

线上应用调试利器 --Arthas

淺唱寂寞╮ 提交于 2021-02-15 04:02:05
  在之前的文章中,我介绍了使用 Btrace 工具进行线上代码的debug ( https://www.cnblogs.com/yougewe/p/10180483.html ),其大致原理就是通过字节码注入的方式进行辅助排查。   可以说,btrace 已经给我们的开发调试一带来了许多的方便,我们在上面做任何想要的调试!但是,明显, btrace 的使用还是有一定成本的,比如:安装应用,写调试脚本...   所以,今天我们再来看一大利器: arthas (阿尔萨斯) arthas 官网地址: https://alibaba.github.io/arthas/   arthas 的文档真的写得非常棒,可以说一看就会。 但是我还是想写一下一些自己的文档,毕竟我们往往只会用到其中皮毛功能而已。翻阅其所有文档也还是有点浪费了! 一、为什么要用 Arthas ?   其实,这个问题在前面已回答,而且,你为什么要用 btrace ? 同理! 具体理由如下: 可以很方便查到一类是从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 怀疑自己的代码未被部署到服务器,可以通过命令快速验证服务器上的代码就是本地的代码; 可以直接通过 arthas 进行线上debug, 查看方法返回值以确认问题所在; 可以很方便嵌入自己的debug代码,快速验证猜想; 操作完成后

jvm调优神器——arthas

别等时光非礼了梦想. 提交于 2021-02-11 21:52:36
在上一篇 《jvm调优的几种场景》 中介绍了几种常见的jvm方面调优的场景,用的都是jdk自带的小工具,比如jps、jmap、jstack等。用这些自带的工具排查问题时最大的痛点就是过程比较麻烦,就好比如排查cpu占用率过高的问题,就要top->jps->printf->jstack等一系列的操作。本篇介绍一个jvm工具,它是阿里巴巴开源的一个工具——arthas(阿尔萨斯)。 一、安装 arthas在github上有个page,地址是 https://alibaba.github.io/arthas/ 。 安装的方式有好几种: 直接下载一个可以启动的jar包然后用java -jar的方式启动 用官方提供的as.sh脚本一键安装 用rpm的方式安装 本篇介绍第一种方式,因为它简单而且想迁移的时候也超级方便(毕竟只需要把下载的jar包拷贝走就行了)。 curl -O https://alibaba.github.io/arthas/arthas-boot.jar 如果下载速度太慢,可以用gitee上的源 curl -O https://arthas.gitee.io/arthas-boot.jar curl命令直接把arthas-boot.jar下载到你想要的目录 [root@localhost ~]# ll -lrt -rw-r--r--. 1 root root 138880

JAR冲突问题的解决

心已入冬 提交于 2021-02-10 19:48:57
今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: 1、java.lang.NoSuchMethodException:自己代码中调用了某个方法,因为加载了其他版本的jar,这个版本正好没这个方法。 2、java.lang.NoClassDefFoundError:编译时候是好的,但是运行的时候,因为加载的jar版本问题,没有这个类。 3、java.lang.ClassNotFoundException:在动态加载某个Class的时候,因为要加载的jar不是正确的版本,而导致找不到这个类。 当你在本地运行ok,但到服务器上发现出现这些错误的时候,就要意识到很可能是jar冲突了(有相同依赖存在多个版本)。这个问题往往也会有这样的表现:多实例部署的时候,有的实例是好的,有的实例则不行。 查看加载的类和方法 根据之前分析的异常种类,我们可以去运行中的现场确认当前加载的问题。 这里我们可以使用阿里开源的Arthas工具,如果第一次用,那么按下面操作先安装再运行: curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 运行好之后

利用Arthas定位线上问题实例

*爱你&永不变心* 提交于 2021-01-20 07:26:31
前言 Arthas是一个类似于Btrace的JVM在线调试分析工具,具体可参考我之前写的一篇博客: 利用JVM在线调试工具排查线上问题 。本文分享笔者刚遇到的一个问题,虽然不复杂,但是很典型。 问题与分析过程 昨天上线遇到一个问题,交易后给大数据平台异步送数,但是他们说没收到数据,因为我们没有打日志,所以没有直接的证据证明是他们的问题而不是我们的问题。 送数的原理大致如下,就是交易主线程把数据放到队列里,然后异步线程从队列里把数据取出来,发送到后台。 队列: BlockingQueue<Message> queue = new BlockingQueue(); 同步线程: void sendMsg(Message msg) { queue.offer(msg); } 异步线程: void consume() { Message msg = queue.take(); while(msg != null) { HttpClient.post(msg); msg = queue.take(); } } 具体送数的代码如下( 加了行数): 38 public void consume(Map msg) { 39 HttpClient httpClient = new HttpClient(cm); 40 PostMethod method = new PostMethod(uri);

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

倾然丶 夕夏残阳落幕 提交于 2021-01-20 06:50:38
0. 场景及需求 我们线上5台solr读服务器,配置一样,但是相同的请求,其中一台响应时间明显比其他4台慢,我们想通过arthas来定位具体哪里执行慢。 1. arthas介绍 阿里开源的java调试工具,能解决如下的问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 从我们实际使用经验来说,可以解决两个常见的问题: 性能慢时,可以定位是具体哪个方法慢。 cpu高时,很方便的定位到那个线程高。 2. 先说坑 我们分别在2台测试环境和1台线上环境测试arthas,发现在2台测试环境中出现如下两个问题: 166测试环境,安装提示成功,但是一直无法启动,通过源码我们发现安装并没成功,但是提示成功。 151测试环境,使用trace监控方法请求流程耗时时,出现java(tomcat)进程没有响应和被杀死两种无法接受情况。 建议: 上述2问题,在线上生产环境没遇到,但是不建议在线上正常运行环境中使用arthas;但线上java程序遇到重大问题

IDEA下一键部署SpringBoot项目到Linux服务器(Alibaba Cloud Toolkit的使用)

杀马特。学长 韩版系。学妹 提交于 2021-01-11 09:41:20
写在开始:一个搬砖程序员的随缘记录 简介: Cloud Toolkit 是本地 IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。通过插件,可以将本地应用一键部署到任意服务器,甚至云端(ECS、EDAS、Kubernetes 和 小程序云 等);并且还内置了 Arthas 诊断、Dubbo工具、Terminal 终端、文件上传和 MySQL 执行器等工具。 准备: 1、Linux服务器一台,部署好JAVA环境 2、IDEA开发工具 3、SpringBoot项目一个 文章目录 一、IDEA安装Alibaba Cloud Toolkit插件 二、项目准备 三、服务器配置 四、Alibaba Cloud Toolkit配置 五、执行 六、验证 一、IDEA安装Alibaba Cloud Toolkit插件 我已经安装过了 安装后重启IDEA 二、项目准备 在IDEA下构建一个项目 写好一个测试接口 三、服务器配置 命令: # 进入一个目录 cd /www/wwwroot/ # 新建文件夹.名字可以随意取 mkdir demo # 进入新建的文件夹 cd demo 新建restart.sh脚本。脚本内容在下面,复制进去就行 vi restart.sh 脚本内容如下: if [ ! -n " $1 " ] ; then echo "please input a process

性能优化:线程资源回收

一世执手 提交于 2020-12-09 19:25:29
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 一、问题 模型服务平台的排序请求出现较多超时情况,且不定时伴随空指针异常。 二、问题发生前后的改动 召回引擎扩大了召回量,导致排序请求的item数量增加了。 三、出问题的模型 基于XGBoost预测的全排序模型。 四、项目介绍 web-rec-model:模型服务平台。用于管理排序模型:XGBoost、TensorFlow、pmml....召回模型:item2item,key2item,vec2item....等模型的上下线、测试模型一致性、模型服务等。 五、一次排序请求流程 1、如下图所示,一次排序请求流程包含:特征获取、向量获取、数据处理及预测。以上提到的三个步骤均采用多线程并行处理,均以子任务形式执行。每个阶段中间夹杂这数据处理的流程,由主线程进行处理,且每个阶段的执行任务均为超时返回,主线程等待子线程任务时,也采用超时等待的策略。(同事实现的一个树形任务执行,超时等待的线程框架) 2、特征数据闭环:该步骤为异步执行,将排序计算使用到的特征及分数,模型版本等信息记录。后续作为模型的训练样本,达到特征闭环。 3、一次排序请求中, 特征获取及向量获取 为网络IO(IO密集型任务),超时可直接响应中断,线程可快速返回。 数据处理及模型 为计算步骤(CPU密集型任务)。 4、当前请求耗时情况