上周遇到了一个莫名其妙的搞心态的问题,浪费了我好几个小时。
主要是最后问题的解决方式也让我特别的无语,真的是越想越气。
先说结论,也就是标题:
在本地以 Debug 模式启动项目的时候,千万不要在方法上打断点!千万不要!
方法断点
首先什么是方法断点呢?
比如这样的,打在方法名这一行的断点:

上周遇到了一个莫名其妙的搞心态的问题,浪费了我好几个小时。
主要是最后问题的解决方式也让我特别的无语,真的是越想越气。
先说结论,也就是标题:
在本地以 Debug 模式启动项目的时候,千万不要在方法上打断点!千万不要!
首先什么是方法断点呢?
比如这样的,打在方法名这一行的断点:
RxJava,即Reactive Extensions for the JVM(Java Virtual Machine的反应式扩展),是一个为Java虚拟机(JVM)设计的库,用于通过可观察序列(observable sequences)来组合异步和基于事件的程序。
RxJava提供了一种响应式编程(Reactive Programming)的方式,这是一种在编程范式中异步处理数据流的方法。这种方法对于处理复杂的异步流程,尤其是那些涉及到多个并发操作的情况,非常有用。
在RxJava中,所有的操作都是异步的,并且可以很容易地组合在一起,以形成复杂的数据处理流程。它使用了"可观察序列"(Observable sequences)的概念,这是一种可以发出事件的对象。你可以订阅这些事件,并在事件发生时执行一些操作。
确实,Vavr(以前称为Javaslang)为Java 8及以上版本提供了一个对象-函数式编程扩展,旨在减少代码行数并提高代码质量。Vavr提供了一系列的功能,包括持久化集合(persistent collections)、用于错误处理的函数式抽象、并发编程、模式匹配等。
Vavr结合了面向对象编程的强大功能与函数式编程的优雅和健壮性。其中,最有趣的部分是功能丰富的持久化集合库,它能够与Java的标准集合库无缝集成。
由于Vavr不依赖于除JVM之外的任何库,因此您可以轻松地将它作为一个独立的.jar文件添加到您的类路径中。
要了解有关Vavr的最新信息,请关注其博客。
在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。
最终焦头烂额,还不一定能查出问题所在。
而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止损,准时下班。
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。
支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。截至本篇文章编写时,已经收获 Star 17000+。
GraalVM 将您的 Java 应用程序提前编译为独立的二进制文件。
这些二进制文件体积较小,启动速度最多可快至传统方式的 100 倍,无需预热即可达到最佳性能,并且相较于在 Java 虚拟机(JVM)上运行的应用程序,使用的内存和 CPU 资源更少。
GraalVM 减小了您的应用程序的攻击面。它从应用程序二进制文件中排除了未使用的类、方法和字段。它将反射和其他动态 Java 语言特性限制为构建时期。
在运行时,它不加载任何未知的代码。
流行的微服务框架,如 Spring Boot、Micronaut、Helidon 和 Quarkus,以及云平台,如 Oracle Cloud Infrastructure、Amazon Web Services、Google Cloud Platform 和 Microsoft Azure,都支持 GraalVM。
应用开始启动正常,然后应用卡死。
ps -ef | grep java
进程还在,应用的 dubbo 端口还是活着的。
ps -ef | grep java
Chaosblade-box 是一个具有丰富场景的混沌工程平台,当前包含的场景有:
chaosblade-exec-os:基础资源实验场景的实现。
chaosblade-exec-docker:Docker 容器实验场景的实现,通过调用 Docker API 进行标准化。
chaosblade-operator:Kubernetes 平台实验场景的实现,混沌实验通过 Kubernetes 标准的 CRD 方法进行定义,使用 Kubernetes 资源操作方法(如 kubectl、client-go 等)非常方便地创建、更新和删除实验场景,同时也可以使用上述的 chaosblade cli 工具。
chaosblade-exec-jvm:Java 应用实验场景的实现,使用 Java Agent 技术动态挂载,无需任何访问,零成本使用,还支持卸载并完全回收 Agent 创建的各种资源。
chaosblade-exec-cplus:C++ 应用实验场景的实现,使用 GDB 技术进行方法和代码行级的实验场景注入。
limus-chaos-generic:一个用于进行云原生混沌工程的工具集。
该项目是基于 jvm-sandbox 的 Chaosblade 执行器,用于通过增强类的方式对 Java 应用进行混沌实验。
实验可以通过 blade CLI 执行,详情请参见 chaosblade 项目。
是的,我知道。ChaosBlade 是阿里巴巴(Alibaba)开发的一种开源混沌工程工具。
混沌工程是一种测试和验证系统的方法,通过在生产环境中故意引入故障和异常,以测试系统的弹性和稳定性。ChaosBlade 的目标是帮助开发人员模拟各种故障场景,以便更好地了解系统在面对异常情况时的表现。
ChaosBlade 可以模拟各种类型的故障,如网络延迟、网络分区、CPU 负载增加、内存溢出等。通过引入这些故障,开发团队可以更好地理解他们的系统如何处理异常情况,并在真实的生产环境中进行调试和优化。