遇事不决,阿尔萨斯(Arthas)

文章目录

      • 一、cat log.log | grep 流水号 引发的惨案
      • 二、Collections.sort排序long型强转int型引发的惨案

一、cat log.log | grep 流水号 引发的惨案

接口报错,查看日志是空指针,但是没有详细的报错信息。
在这里插入图片描述以为是日志打印格式的问题,遂改变了打印格式,发现还是没有详细错误信息。

网上搜索后推荐JVM参数加上-XX:-OmitStackTraceInFastThrow。

觉得动JVM参数不太放心,于是想到了Arthas工具。

寻找arthas的路径:locate arthas-boot.jar

进入对应服务的docker容器内部:docker exec -it pid /bin/bash

然后进入到arthas 的jar包目录,启动arthas java -jar arthas-boot.jar
选择进程(输入[]内编号(不是PID)回车),一般情况就只有一个,输入1即可

trace 命令能渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

trace

使用trace命令查看方法内部每个方法的耗时 trace demo.Test queryUpgradeOffer
除了显示方法的耗时,还会显示是在哪个方法抛出了异常。找到是在convert2QueryOfferListRequest抛出了异常

继续使用trace命令查看convert2QueryOfferListRequest方法执行的耗时 trace demo.Test convert2QueryOfferListRequest
然后就能看到是在哪一行抛出了异常

通过排查代码发现是写错了map的key,导致值不存在抛出了空指针。

然后测试同事在群里发了一张截图,我看到了详细的堆栈信息,整个人瞬间不好了

忽然想起来了grep 的 -A -B -C三个参数

然后cat log.log | grep 流水号 -A 5 果然显示出了完整的堆栈信息。

二、Collections.sort排序long型强转int型引发的惨案

怪事天天有,今天特别多。

测试说我返回的数据顺序反了,我仔细差了一下代码,确认是写了排序,还是逆序,但是返回的结果就是正序,奇了怪了。

遇事不决,阿尔萨斯!

watch命令能观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参

watch

使用watch命令查看一下排序方法的参数和返回值,以及方法执行前后参数的变化
watch demo.Test calcRemainderTime “{params,returnObj}” -x 4 -b -s -n 4

发现排序后确实是逆序了,那问题确实出在排序方法上!

看了一下排序方法,确认是逆序,那就只可能是long型强转int型,精度丢失导致排序异常。

写个demo校验一下猜想。

public class SortTest {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        Student student1 = new Student(18,1722095999999L);
        Student student2 = new Student(19,1711468799999L);
        Student student3 = new Student(12,1709567999999L);
        Student student4 = new Student(18,1708567999999L);
        list.add(student1);
        list.add(student3);
        list.add(student2);
        list.add(student4);
//        Collections.sort(list,(o1,o2)->o2.getAge()-o1.getAge());
        Collections.sort(list,(o1,o2)->(int)(o2.getTime()-o1.getTime()));
        for (Student student : list) {
            System.out.println(student.getTime());
        }
        System.out.println("================第二次排序====================");
        Collections.sort(list,(o1,o2)->{
            if(o2.getTime()>o1.getTime()){
                return 1;
            }else if(o2.getTime()<o1.getTime()){
                return -1;
            }else {
                return 0;
            }
        });
        for (Student student : list) {
            System.out.println(student.getTime());
        }
    }

    static class Student{
        private int age;
        private long time;

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public long getTime() {
            return time;
        }

        public void setTime(long time) {
            this.time = time;
        }

        public Student(int age, long time) {
            this.age = age;
            this.time = time;
        }
    }
}

执行结果如下

1711468799999
1709567999999
1722095999999
================第二次排序====================
1722095999999
1711468799999
1709567999999
1708567999999

确实是long型强转int型导致的排序异常,而测试的正序可能恰好是一个巧合。

故:排序时如果排序字段不是int型,不能强转成int型,精度丢失后排序会异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/606947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年软件测试最新Web安全测试(文末送电子书)_电子书下载 安全测试,腾讯软件测试开发面试经验

网上学习资料一大堆&#xff0c;但如果学到的知识不成体系&#xff0c;遇到问题时只是浅尝辄止&#xff0c;不再深入研究&#xff0c;那么很难做到真正的技术提升。 需要这份系统化的资料的朋友&#xff0c;可以戳这里获取 一个人可以走的很快&#xff0c;但一群人才能走的更…

Spring AI实战之一:快速体验(OpenAI)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于Spring AI Spring Boot、Spring Cloud、Spring Data&#xff0c;作为一名Java程序员&#xff0c;相信您对这些概览早已耳熟能详&#xff0c;或者天天在用…

本地搭建springboot服务并实现公网远程调试本地接口

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

重发被恶意举报的主食冻干测评,速看可能再被删!PR、希喂和SC真实对比PK!

要给猫咪提供高品质主食&#xff0c;主食冻干是不二之选。主食冻干不仅含肉量高、吸收消化率高&#xff0c;还有着丰富的、普通猫粮无法提供的各类营养素&#xff0c;满足猫咪微量元素的需求。可以说是营养与生骨肉喂养媲美&#xff0c;又能完美避开生骨肉细菌超标带来的一系列…

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一&#xff0c;主要的功能是将客户端输入的 SQL 语句分解为语法单元&#xff0c;然后将这些语法单元转化成数据库内部可识别的数据结构&#xff0c;最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

go导入包时提示no required module provides package解决方法

原因&#xff0c;这个包在你的本机没有安装 如redis包的提示为 could not import github.com/gomodule/redigo/redis (no required module provides package "github.com/gomodule/redigo/redis")解决方法&#xff1a; go get github.com/gomodule/redigo/redis

PHP+MySQL组合开发 自定义商城系统源码 带完整的安装代码包以及安装部署教程

随着电子商务的蓬勃发展&#xff0c;越来越多的企业和个人希望拥有自己的在线商城系统。小编给大家分享一款基于PHP和MySQL技术栈&#xff0c;开发的一套自定义商城系统源码。该系统旨在帮助用户快速搭建稳定、高效的电子商务平台&#xff0c;并提供灵活的自定义功能&#xff0…

日本站群服务器的优点以及适合该服务器的业务类型?

日本站群服务器的优点以及适合该服务器的业务类型? 日本站群服务器是指位于日本地区的多个网站共享同一台服务器的架构。这种服务器架构有着诸多优点&#xff0c;使其成为许多企业和网站管理员的首选。以下是日本站群服务器的优点以及适合该服务器的业务类型的分析&#xff1…

链表经典面试题02--链表的带环问题

目录 引言 环形链表 题目描述: 思路分析: 代码展示: 面试中遇到的问题: 环形链表Ⅱ 题目描述: 思路分析: 代码展示: 面试中遇到的问题: 方法二: 随机链表的复制 题目描述: 思路分析: 代码展示: 小结 引言 这个专题专门讲解链表的带环问题,并且对面试有关链表带环…

开源文档管理系统Paperless-ngx如何在Linux系统运行并发布至公网

文章目录 1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 Paperless-ngx是一个开源的文档管理系统&#xff0c;可以将物理文档转换成可搜索的在线档案&#xff0c;从而减少纸张的使用。它内置…

使用HashMap实现,对一个字符集进行哈夫曼编码

最终达到的效果: 调用一个类 class HuffmanCodin{.....} 使用类中的静态方法&#xff0c;获取哈夫曼编码&#xff1a; 事前准备——哈夫曼树的节点定义 class Node implements Comparable<Node> {int weight;//权重Node left;Node right;char ch;//关键字&#xff0c…

asp.net论坛指南系统

说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 登陆可查看 浏览记录 TA的发布 TA的回复 TA的收藏 TA的点赞 管理员登陆可以查看举报管理 编辑管理 认证审核 帖子置顶申请审核 运行环境…

如何利用IPIDEA代理IP优化数据采集效率?

一、 前言二、 IPIDEA介绍三、体验步骤四、实战训练五、结语 一、 前言 在全球化与信息化交织的当代社会&#xff0c;数据已成为驱动商业智慧与技术革新的核心引擎。网络&#xff0c;作为信息汇聚与交流的枢纽&#xff0c;不仅是人们获取知识的窗口&#xff0c;更是商业活动与技…

FX110书籍推荐:如何快速成为一名专业股票投资人?

股票投资领域有一本神作《股票交易入门》&#xff0c;它是股票从业人员的入门必备书籍。 关于股票入门的书籍很多&#xff0c;但这本书涉及的知识面最全、实用性最强。从这本书里&#xff0c;我们可以领略到股票交易世界的跌宕起伏而又波澜壮阔的魅力。本书作者 本书的作者是美…

Navicat导入sql报错[Err] 1046 - No database selected

Navicat导入sql报错[Err] 1046 - No database selected ​ 今天系统重装了&#xff0c;就很完蛋。所有东西都重新下载安装。向Navicat导入sql的时候导入失败&#xff1a; 报错[Err] 1046 - No database selected。我很疑惑地又导了几次。当然又全都失败. 错误造成原因&#x…

项目风采展示【车酷-雷克萨斯2】

1&#xff1a;支持桌面展示 2&#xff1a;支持桌面时钟 3&#xff1a;支持桌面陀螺仪

怎么将文字做成二维码?文本活码在线的生成技巧

文本类型的活码该如何来制作呢&#xff1f;通过二维码来展示文字信息是现在很常用的一种方式&#xff0c;包括物品、建筑、人员等方面的信息&#xff0c;都可以用生成二维码后让其他人通过扫码了解自己需要的信息。那么文本活码的制作需要几步操作呢&#xff1f;下面就教大家使…

mysql等保测评2.0命令-三级

版本 Win默认安装位置 C:\Program Files\MySQL\MySQL Server 8.0\bin 版本&#xff1a;select version() from dual; 身份鉴别 a应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换&#xff1b; 1、SELEC…

OpenGL入门第二步:颜色、纹理设置(解析)

OpenGL入门第一步:创建窗口、重写虚函数-CSDN博客 1、设置颜色 添加QColor变量,如果需要颜色随时间变化,那就再添加一个定时器QElapsedTimer以及重写虚函数timerEvent。 initializeGL()函数设置片段着色器中颜色变量 如果需要设置时间别忘了开启计时器 timerEvent函数里写…

UE和three.js的区别

UE&#xff08;Unreal Engine&#xff09;和three.js都是用于创建3D图形的软件平台&#xff0c;但它们在功能、目标和应用场景方面存在一些差异。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 功能 UE 是一款功能全面的3D游戏引擎&…