记一次FullGC的排查经历--从FullGC日志到业务代码 编程技术

记一次FullGC的排查经历--从FullGC日志到业务代码

问题的发生 简单介绍下我们服务的背景,我们的服务是一个使用类似dubbo的RPC框架以及若干Spring全家桶组合起来的微服务架构,大致结构可以参考下图。 Java服务使用的是CMS的垃圾回收器。 某天突然收到一台实例(即一个Java应用)产生FullGC日志的报警,如上图红色标记的服务,FullGC的日志信息如下: 2020-07-25T14:55:07.481+0...
阅读全文
JVM系列-读懂 GC 日志 Java

JVM系列-读懂 GC 日志

Java 生态发展到今天,JVM (Java Virtual Machine)的价值可能已经超过了 Java 语言本身。 而 GC (垃圾回收)机制也是 JVM 的核心之一,在程序运行的过程中,GC 的过程会以日志的形式记录下来,看懂 GC 日志是研究 GC 机制的基础,GC日志也是判断 Java 程序运行是否正常的重要依据。 这篇文章将会从多个方面来详细说明 GC 日志,本文基于 Ope...
阅读全文
SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署) Spring

SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)

作者 | 孤弋  阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作。 导读 :上一篇文章 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》 我们介绍了从 IDE 插件内介绍了如何进行应用部署的方式,除此之外,目前 EDAS 还支持了额外的工具对其他场景进行覆盖,这一篇内容主要就是介绍 EDAS 上围绕部署的工具体系。 ...
阅读全文
一次年轻代GC长暂停问题的解决与思考,再学一遍JVM吧 Java

一次年轻代GC长暂停问题的解决与思考,再学一遍JVM吧

问题描述 公司某规则引擎系统,在每次发版启动会手动预热,预热完成当流量切进来之后会偶发的出现一次长达1-2秒的年轻代GC(流量并不大,并且LB下的每一台服务都会出现该情况) 在这次长暂停之后,每一次的年轻代GC暂停时间又都恢复在20-100ms以内 2s虽然看起来不长,但是对比规则引擎每次10ms左右的响应时间来说,还是不可以接受的;并且由于该规则引擎响应超时,还会导致出单超时失败 ...
阅读全文
mybatis sqlsession与sqlsquery、transaction、connection Java

mybatis sqlsession与sqlsquery、transaction、connection

sqlsession和connection 一个sqlsession一般对应一个connection,并且mybatis默认每次获取session都会开启一个事务,且不自动提交事务。如果更新操作完成后不手动commit,则在连接断开时会将更新操作回滚,一个sqlSession(一个transaction)中可以多次commit,commit后cache和statement刷新(一般一个...
阅读全文
深挖view绘制流程(二) Java

深挖view绘制流程(二)

Choreographer的中文翻译是编舞者、舞蹈编导的意思,为什么起这个名字呢?因为view的刷新和舞蹈一样是需要按着节拍来的,Choreographer就是根据VSync信号这个节拍来安排view的刷新动作。 它使用ThreadLocal单例模式,每个线程都有自己的Choreographer,靠Looper去同步: public final class Choreog...
阅读全文
深入探究JVM之对象创建及分配策略 编程技术

深入探究JVM之对象创建及分配策略

@ 目录 前言 Java是面向对象的语言,所谓“万事万物皆对象”就是Java是基于对象来设计程序的,没有对象程序就无法运行(8大基本类型除外),那么对象是如何创建的?在内存中又是怎么分配的呢? 正文 一、对象的创建方式 在Java中我们有几种方式可以创建一个新的对象呢?总共有以下几种方式: new关键字 反射 clone 反序列化 Uns...
阅读全文
OkHttp 官方中文文档 Java

OkHttp 官方中文文档

[本文翻译来自 官方OkHttp Wiki](https://github.com/square/okhttp/wiki) 一、Calls HTTP客户端的工作是接受你的 request ,并产生它的 response 。这个在理论上是简单的,但在实践中确是很棘手。 1.1 请求 每一个HTTP请求中都包含一个URL,一个方法(如 GET 或 POST ),和一个请求头列...
阅读全文
JVM之逃逸分析 Java

JVM之逃逸分析

什么是逃逸分析 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针。它涉及到指针分析和形状分析。 当一个变量(或对象)在子程序中被分配时,一个指向变量的指针可能逃逸到其它执行线程中,或是返回到调用者子程序。如果使用尾递归优化(通常在函数编程语言中是需要的),对象也可以看作逃逸到被调用的子程序中。如果一种语言支持第一类型的延续性在Scheme和S...
阅读全文
拥抱Java 8并行流吧,速度飞起! Java

拥抱Java 8并行流吧,速度飞起!

前言 在 Java7 之前,如果想要并行处理一个集合,我们需要以下几步:  手动分成几部分   为每部分创建线程  在适当的时候合并。并且还需要关注多个线程之间共享变量的修改问题。 而 Java8 为我们提供了并行流,可以一键开启并行模式。是不是很酷呢?让我们来看看吧 并行流 认识和开启并行流 什么是并行流:...
阅读全文
Loading...