YGC问题排查,又让我涨姿势了!
在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务
线程池运用不当的一次线上事故
在高并发、异步化等场景,线程池的运用可以说无处不在。线程池从本质上来讲,即通过空间换取时间,因为线程的创建和销毁都是要消耗资源和时间的,对于大量使用线程的场景,使用池化管理可以延迟线程的销毁,大大提高
JVM 源码分析之一个 Java 进程究竟能创建多少线程
概述虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从 JVM 源码角度来分析,更多的来自于 Linux Kernel 的源码分析,今天要说的是 JVM 里比较常见的一个问题。这个问题可能有
记一次Synchronized关键字使用不合理,导致的多线程下线程阻塞问题排查
在为客户进行性能诊断调优时,碰到了一个Synchronized关键字使用不合理导致多线程下线程阻塞的情况。用文字记录下了问题的整个发现-排查-分析-优化过程,排查过程中使用了我司商业化产品——XLan
一次 Java 进程 OOM 的排查分析(glibc 篇)
遇到了一个 glibc 导致的内存回收问题,查找原因和实验的的过程是比较有意思的,主要会涉及到下面这些:- Linux 中典型的大量 64M 内存区域问题- glibc 的内存分配器 ptmalloc
官方文档竟然有坑!关于G1参数InitiatingHeapOccupancyPercent的正确认知 #我在性能调优路上的打怪日记#
问题前两天,一个群友在群中提出一个疑问:G1里的XX:InitiatingHeapOccupancyPercent,默认是45。他看网上有两种说法,一种是整个堆占用率超过45%时开始并发标记周期;另一
记一次类加载失败导致线程阻塞问题排查
作为PerfMa解决方案管理部门的技术专家,我在工作遇见过很多各种问题导致的性能问题,并参与了为客户的系统进行性能诊断调优的全过程。这一次碰到了一个类加载失败导致的性能问题。用文字记录下了问题的整个发
你确定你真的理解"双亲委派"了吗?!
最近一段时间,我在面试的过程中,很喜欢问双亲委派的一些问题,因为我发现这个问题真的可以帮助我全方位的了解一个候选人。记得前几天一次面试过程中,我和一位候选人聊到了JVM的类加载机制的问题,他谈到了双亲
从一起GC血案谈到反射原理
前言 首先回答一下提问者的问题。这主要是由于存在大量反射而产生的临时类加载器和 ASM 临时生成的类,这些类会被保留在 Metaspace,一旦 Metaspace 即将满的时候,就会触发 Fu
据说99.99%的人都会答错的类加载的问题
概述首先还是把问题抛给大家,这个问题也是我厂同学在做一个性能分析产品的时候碰到的一个问题。 同一个类加载器对象是否可以加载同一个类文件多次并且得到多个Class对象而都可以被java层使用吗请仔细注意
高吞吐、低延迟 Java 应用的 GC 优化实践
本篇原文作者是 LinkedIn 的 Swapnil Ghike,这篇文章讲述了 LinkedIn 的 Feed 产品的 GC 优化过程,虽然文章写作于 April 8, 2014,但其中的很多内容和
跟Kafka学技术系列之时间轮
kafka的延迟队列使用时间轮实现,能够支持大量任务的高效触发,但是在kafka延迟队列实现方案里还是看到了delayQueue的影子,使用delayQueue是对时间轮里面的bucket放入延迟队列,以此来推动时间轮滚动,但是基于将插入和删除操作则放入时间轮中,将这些操作的时间复杂度都降为O(1)
Java语言
消失的死锁
问题描述如果java层面发生了死锁,当我们使用jstack命令的时候其实是可以将死锁的信息给dump出来的,在dump结果的最后会有类似Found one Java-level deadlock:的关
在调试器里看LINUX内核态栈溢出
图灵最先发明了栈,但没有给它取名字。德国人鲍尔也“发明”了栈,取名叫酒窖。澳大利亚人汉布林也“发明”了栈,取名叫弹夹。1959年,戴克斯特拉在度假时想到了Stack这个名字,后来被广泛使用。
性能优化:线程资源回收
一、问题模型服务平台的排序请求出现较多超时情况,且不定时伴随空指针异常。 二、问题发生前后的改动召回引擎扩大了召回量,导致排序请求的item数量增加了。 三、出问题的模型基于XGBoost预测的全排序
JVM源码分析之jstat工具原理完全解读
概述jstat是hotspot自带的工具,和java一样也位于`JAVA_HOME/bin`下面,我们通过该工具可以实时了解当前进程的gc,compiler,class,memory等相关的情况,具体
Java Reference核心原理分析
带着问题,看源码针对性会更强一点、印象会更深刻、并且效果也会更好。所以我先卖个关子,提两个问题(没准下次跳槽时就被问到)。 - 我们可以用ByteBuffer的allocateDirect方法,申请一
一次线上服务高 CPU 占用优化实践
线上有一个非常繁忙的服务的 JVM 进程 CPU 经常跑到 100% 以上,下面写了一下排查的过程。通过阅读这篇文章你会了解到下面这些知识。- Java 程序 CPU 占用高的排查思路- 可能造成线上
死磕一道面试题引发的对Java内存模型的一点疑问,第四部。
死磕一道面试题引发的对Java内存模型的一点疑问,JIT在将热点代码编译成机器码的时候就是单纯的不喜欢成员字段或者静态字段。或者说为了提高代码执行效率,只是这种意义一般人看不出来,需要从CPU执行指令的角度才能明白。虽然优化前和优化后这俩个变量hoistedStopRequested和stopReq
代表Java未来的ZGC深度剖析,牛逼!
JAVA程序最爽的地方是它的GC机制,开发人员不需要关注内存申请和回收问题。同时,JAVA程序最头疼的地方也是它的GC机制,因为掌握JVM和GC调优是一件非常困难的事情。在ParallelOldGC、
警惕大量类加载器的创建导致诡异的Full GC
概述 今天有个同事找我,其实好像之前就找过我,一直因为太忙,后面就忘记他的事了,到今天还没查出原因就又找了过来,现象是系统老是进行Full GC,在启动没过多久就会发生Full GC,这个现象相
Java8 Stream源码分析
Stream Stream是在Java SE 8 API添加的用于增强集合的操作接口,可以让你以一种声明的方式处理集合数据。将要处理的集合看作一种流的创建者,将集合内部的元素转换为流并且在管道中传
一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程
通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。对于JVM垃圾回收,之前一直都是处于理论
谨防JDK8重复类定义造成的内存泄漏
概述 如今JDK8成了主流,大家都紧锣密鼓地进行着升级,享受着JDK8带来的各种便利,然而有时候升级并没有那么顺利?比如说今天要说的这个问题。我们都知道JDK8在内存模型上最大的改变是,放弃了Perm
为你总结了N个真实线上故障,从容应对面试官!
很多人在面试时,会被问到这样的问题:遇到过什么系统故障?怎么解决的?下面是笔者根据自己15年互联网研发经历总结的多个线上故障真实案例。相信可以帮你从容应对面试官的提问!本文图不多,但内容很干!理解为主
实战:OOM 后我如何分析解决的
现在很多面试官都会关心你是否有过解决内存泄漏的问题,是否有过JVM的调优经验。你如果没有经历过,该如何回答呢?希望下文对你有所帮助。 背景前不久,上线了一个新项目,这个项目是一个压测系统,可以简单的看
分析和解决JAVA 内存泄露的实战例子
这几天,一直在为Java的“内存泄露”问题纠结。Java应用程序占用的内存在不断的、有规律的上涨,最终超过了监控阈值。福尔摩 斯不得不出手了! 分析内存泄露的一般步骤 如果发现Java应用程序占用的内
不可逆的类初始化过程
类的加载过程说复杂很复杂,说简单也简单,说复杂是因为细节很多,比如说今天要说的这个,可能很多人都不了解;说简单,大致都知道类加载有这么几个阶段,loaded-linked-initialized,为了
记一次JVM堆外内存泄露Bug的查找
前言JVM的堆外内存泄露的定位一直是个比较棘手的问题。此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头。笔者将此Bug分析的过程写成博客,以飨
改善 Kubernetes 上的 JVM 预热问题
JVM 预热是一个非常头疼而又难解决的问题。本文讨论了在运行在 Kubernetes 集群中的 Java 服务如何解决 JVM 预热问题的一些方法和经验。 作者:Vikas Kumar 翻译:Bach
JDK的sql设计不合理导致的驱动类初始化死锁问题
问题描述当我们一个系统既需要mysql驱动,也需要oracle驱动的时候,在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java
记录一次Flink作业异常的排查过程
最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题
JVM Metaspace内存溢出排查与总结
现象前段时间公司线上环境的一个Java应用因为OOM的异常报警,导致整个服务不可用被拉出集群,本地模拟重现的现象如下:当时的解决方案是增加metaspace的容量:-XX:MaxMetaspaceSi
OutOfMemoryError之unable to create new native thread原因分析及6种解决方案
java.lang.OutOfMemoryError:unable to create new native thread 是比较常见的一种异常,表示应用程序无法创建新的线程。产生该异常,总体上可总结
JVM Code Cache空间不足,导致服务性能变慢
有业务反馈,线上一个应用运行了一段时间之后,在高峰期之后,突然发现处理能力下降,接口的响应时间变长,但是看Cat上的GC数据,一切都很正常。通过跳板机上机器查看日志,发现一段平时很少见到的日志:```
用crash工具分析Linux内核死锁的一次实战
背景知识点ramdump是内存转存机制,我们可以在某个时刻把系统的内存转存到一个文件中,然后与符号信息(vmlinux)一起导入到trace32或crash等内存分析工具中做离线分析。是分析崩溃、死锁
Kafka 顺序消费线程模型的实践与优化
各类消息中间件对顺序消息实现的做法是将具有顺序性的一类消息发往相同的主题分区中,只需要将这类消息设置相同的 Key 即可,而 Kafka 会在任意时刻保证一个消费组同时只能有一个消费者监听消费,因此可
JDK ThreadLocal 源码深度剖析及注意点分享
概述 ```ThreadLocal``` 顾名思义,就是“线程局部”的意思,换句话说就是属于某个线程的局部对象,其他线程是没法访问到的,亦即该对象不存在线程安全的问题,因为不可能被多线程访问到,
AsyncGetCallTrace 源码深度剖析
前言 AsyncGetCallTrace 是由 OracleJDK/OpenJDK 内部提供的一个函数,该函数可以在 JVM 未进入 safepoint 时正常获取到当前线程的调用栈(换句话说,使用
Java多线程——并发测试
编写并发程序时候,可以采取和串行程序相同的编程方式。唯一的难点在于,并发程序存在不确定性,这种不确定性会令程序出错的地方远比串行程序多,出现的方式也没有固定规则。那么如何在测试中,尽可能的暴露出这些问
又抓了一个导致频繁GC的鬼--数组动态扩容
概述 本周有个同事过来咨询一个比较诡异的gc问题,大概现象是,系统一直在做cms gc,但是老生代一直不降下去,但是执行一次jmap -histo:live之后,也就是主动触发一次full gc之后
JAVA线上故障排查套路
线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基
使用Go语言实现Attach到目标JVM进程
0x00 Java Attach API的基本使用在JVM运行时加载一个Agent的jar包是Java agent的一种更加灵活的实现方式,因为动态Attach时不需要停止目标JVM进程,这个特性给J
XPocket插件jstack_x助力线程问题排查
在程序开发过程中,开发人员通常会遇到许多线上问题,这些问题可能是代码Bug导致的,也可能是性能问题引起的。这些线上问题都会通过CPU飙升、GC频繁、抛出OOM异常等情况表现出来,这些问题的根因很可能是
使用NMT和pmap解决JVM资源泄漏问题
编者按:笔者使用JDK自带的内存跟踪工具NMT和Linux自带的pmap解决了一个非常典型的资源泄漏问题。这个资源泄漏是由于Java程序员不正确的使用Java API导致的,使用Files.list打
Java OOM 高级篇:体验了一把线上CPU100%及应用OOM的排查和解决过程
问题现象 【告警通知-应用异常告警】简单看下告警的信息:拒绝连接,反正就是服务有问题了,请不要太在意马赛克。 环境说明Spring Cloud F版。项目中默认使用 spring-cloud-sleu
一次 JVM 进程退出分析
最近我们在测试把 APM 平台迁移到 ES APM,有同学反馈了一个有意思的现象,部署在 docker 中 jar 包项目,在新版 APM 里进程启动完就退出了,被 k8s 中无限重启。这篇文章写了一
不起眼,但是足以让你收获的JVM内存案例
今天的这个案例我觉得应该会让你涨姿势吧,不管你对JVM有多熟悉,看到这篇文章,应该还是会有点小惊讶的,不过我觉得这个案例我分享出来,是想表达不管多么奇怪的现象请一定要追究下去,会让你慢慢变得强大起来,
一次线上 xxl-job 服务异常排查分析
问题描述某天收到频繁的告警邮件,定时任务调度失败,查看 xxl-job 的执行器列表是空的,但是服务又显示健康,查看历史任务执行记录发现执行器是依次递减,由于是线上服务,只能先重启,然后线程日志也没有
没想到,这么简单的线程池用法,深藏这么多坑
又又又踩坑了生产有个对账系统,每天需要从渠道端下载对账文件,然后开始日终对账。这个系统已经运行了很久,前两天突然收到短信预警,没有获取渠道端对账文件。本以为又是渠道端搞事情,上去一排查才发现,所有下载
一次 Spring 无法启动的问题排查(字节码篇)
一次 Spring 无法启动的原因排查,带你抽丝剥茧,看看字节码在问题分析上的应用、Kotlin 编译器、Spring 源码.
类初始化导致死锁
一张图简单描述死锁 如上图,Thread1 拿到了 object1,Thread2 拿到了 object2,但是现在 Thread1 需要拿到 object2 的锁才能继续往下,Thread2 又要拿到 object1 才能继续往下
JVM Bug:多个线程持有一把锁?
JVM线程dump Bug描述 在JAVA语言中,当同步块(`Synchronized`)被多个线程并发访问时,JVM中会采用基于互斥实现的重量级锁。JVM最多只允许一个线程持有这把锁,如果其它线
深(浅)入(出)剖析G1(Garbage First)
Java从JDK7U9开始支持G1(正式发布),所以,如果要使用G1的话,你的Java版本应该是JDK7U9或者更新的版本。不过,强烈建议JDK8才使用G1,而且最好是JDK8的最新版本,因为在JDK
聊一个可能有惊喜的System GC知识点
问题概述因为工作关系有挺长时间没和大家分享东西了,也经常看到有同学在后台给我留言说好久没更新了,实在抱歉,不过接下来会有比较多的分享给到大家,下周我们会在PerfMa的社区(https://club.
深入理解堆外内存 Metaspace
在之前介绍的分代垃圾回收算法中,我们一直有一个永久代存在,叫 PermGen,内存上它是挨着堆的。为了垃圾回收方便,HotSpot 在永久代上一直是使用老年代的垃圾回收算法。永久代主要存放以下数据:-
它来了:阿里巴巴Java开发手册泰山版解读
《Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册。会当凌绝顶,一览众山
Java 应用性能调优的一些实践
Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和
一次真实的线上OOM问题定位
概述近日,负责的一系统生产环境上出现了OutOfMemoryError,伴随着这个问题随之而来的是一堆Full GC, CPU 百分之百,频繁宕机重启等问题,严重影响业务的推广及使用,此类问题一般处理
垃圾回收-实战篇
JVM 参数简介在开始实践之前我们有必要先简单了解一下 JVM 参数配置,因为本文之后的实验中提到的 JVM 中的栈,堆大小,使用的垃圾收集器等都需要通过 JVM 参数来设置先来看下如何运行一个 Ja
Linux多线程应用性能分析
如今CPU的核心数越来越多, 在2019年你可以轻易买到超过50个核心的x86服务器CPU,一个中端台式机拥有8个执行线程也没什么好奇怪的。问题是我们怎样找到工作负载来“喂饱”那些相对饥饿的核。到目前
JVM源码分析之JDK8下的僵尸(无法回收)类加载器
概述这篇文章基于最近在排查的一个问题,花了我们团队不少时间来排查这个问题,现象是有一些类加载器是作为key放到WeakHashMap里的,但是经历过多次full gc之后,依然坚挺地存在内存里,但是从
高并发下的 AtomicLong 性能有点差!
如果让你实现一个计数器,有点经验的同学可以很快的想到使用AtomicInteger或者AtomicLong进行简单的封装。因为计数器操作涉及到内存的可见性和线程之间的竞争,而Atomic的实现完美的屏
一次I/O问题引发的P0重大故障
这是前段时间发的一篇文章,很多读者反馈,文章没有揭示故障发生的详细原因。本次在文中加上故障的具体原因(下面黑体字部分),再推一次。几年前的一个下午,公司里码农们正在安静地敲着代码,突然很多人的手机同时
进程物理内存远大于Xmx的问题分析
问题描述最近经常被问到一个问题,”为什么我们系统进程占用的物理内存(Res/Rss)会远远大于设置的Xmx值”,比如Xmx设置1.7G,但是top看到的Res的值却达到了3.0G,随着进程的运行,Re
不改一行代码定位线上性能问题
背景最近时运不佳,几乎天天被线上问题骚扰。前几天刚解决了一个 [HashSet 的并发问题](https://heapdump.cn/article/543424),周六又来了一个性能问题。大
分享一个Flink checkpoint失败的问题和解决办法
接触Flink一段时间了,遇到了一些问题,其中有一个checkpoint失败导致作业重启的问题,遇到了很多次,重启之后一般也能恢复正常,没有太在意,最近2天有同事又频繁遇到,这里记录一下解决方案和分析
一次“内存泄漏”引发的血案
对性能不佳的Ark Server进行了改造和重写。重编发布一段时间后,结果发现新发布的Svr的机器内存一直在上涨。如下图示:观察后,第一反应是完了,一定存在内存泄露。花了3、4天时间,使用各种办法进行
Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家
一次年轻代GC长暂停问题的解决与思考
问题描述公司某规则引擎系统,在每次发版启动会手动预热,预热完成当流量切进来之后会偶发的出现一次长达1-2秒的年轻代GC(流量并不大,并且LB下的每一台服务都会出现该情况)在这次长暂停之后,每一次的年轻
CPU 优化线上实战篇:Java JVM 频繁 GC的原因和排查方法
背景线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会偶现同样的问题。解决问题首先要找到问题的爆发点,对于偶
多线程之CountDownLatch的用法及原理笔记
前言-CountDownLatch是什么?CountDownLatch是具有synchronized机制的一个工具,目的是让一个或者多个线程等待,直到其他线程的一系列操作完成。CountDownLat
久等了,网传字节跳动总结的设计模式出版了!
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言`来自延迟满足的幸福`可能你的生活里很多
又踩到Dubbo的坑,但是这次我笑不出来
前言直入主题,线上应用发现,偶发性出现如下异常日志。当然由于线上具体异常包含信息量过大,秉承让肥朝的粉丝没有难调试的代码的原则,我特意抽取了一个复现的demo放在了git,让你不在现场,一样享受到排查
记一次线上请求偶尔变慢的排查
前言最近解决了个比较棘手的问题,由于排查过程挺有意思,于是就以此为素材写出了本篇文章。 Bug现场这是一个偶发的性能问题。在每天几百万比交易请求中,平均耗时大约为300ms,但总有那么100多笔会超过
一则OOM死机故障的处理过程
OOM是Out of Memory的简写,也就是内存不足。出现该问题的原因有很多,如程序内存泄漏等。内存泄漏问题可以通过定时地终止和重启有问题的程序来发现和解决。在比较新的Linux内核版本中,有一种
Elasticsearch调优篇-慢查询分析笔记
前言- elasticsearch提供了非常灵活的搜索条件给我们使用,在使用复杂表达式的同时,如果使用不当,可能也会为我们带来了潜在的风险,因为影响查询性能的因素很多很多,这篇笔记主要记录一下慢查询可
记一次 Java 服务性能优化
背景前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了。在很低的 QPS 压力下服务器 load 就能达到 10-20,CPU 使用率 60% 以
JUC之 FutureTask 源码与工作原理分析
JDK1.5 引入了Future模式,Future代表了一个异步任务的执行结果。Future模式可以理解成:主线程将待执行的任务提交给子线程执行后,可以先获取任务结果的持有者Future。然后主线程可
JVM源码分析之Attach机制实现完全解读
Attach是什么在讲这个之前,我们先来点大家都知道的东西,当我们感觉线程一直卡在某个地方,想知道卡在哪里,首先想到的是进行线程dump,而常用的命令是jstack ,我们就可以看到如下线程栈了大家是
Java多线程知识小抄集(一)
本文主要整理笔者遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。 1.interr
别再纠结线程池大小/线程数量了,没有固定公式的
可能很多人都看到过一个线程数设置的理论:- CPU 密集型的程序 - 核心数 + 1- I/O 密集型的程序 - 核心数 2不会吧,不会吧,真的有人按照这个理论规划线程数? 线程数和CPU利用率的小
一顿操作后,FGC频率降低到原来的1/400
通过一个多月的努力,将 FullGC 从 40 次/天优化到近 10 天才触发一次,而且 YoungGC 的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。对于JVM垃圾回收,之前一
JDK11现存性能bug(JDK-8221393)深度解析
这是一篇鸽了很久的博客,因为博客内容和素材早就准备差不多了,但就是一直懒得整理,今天终于下定决心终于整理出来了,这也是这个bug [JDK-8221393](https://bugs.openjdk.
一文完全理解定时器实现技术
上一篇热文《[构建企业级业务高可用的延时消息中台](https://heapdump.cn/article/641128)》引起了大家的讨论,评论里讨论除了时间轮算法外的其他高性能算法实现延迟
我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏
从一个BUG说起前段时间翻到了一个 JDK 有点意思的 [BUG](https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8137185),带大家一
讨论在 Linux Control Groups 中运行 Java 应用程序的暂停问题
说明本篇原文来自 LinkedIn 的 Zhenyun Zhuang,原文:Application Pauses When Running JVM Inside Linux Control Group
惊:Dubbo居然有必现StackOverflowError的Bug
说明:本文场景基于dubbo-2.5.3版本。 如果你对StackOverflowError有一定的了解,就可以知道出现这个问题的主要原因就是调用栈太深,比如常见的无限递归调用。那本文要介绍的Dub
FGC实战:坏代码导致服务频繁FGC无响应问题分析
前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理、Bug 排查、运营 issue 处理的事。工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了。不知道是公司网络广了就这
浅析Linux IO,你需要知道的底层
在开始正式的讨论前,我先抛出几个问题:- 谈到磁盘时,常说的HDD磁盘和SSD磁盘最大的区别是什么?这些差异会影响我们的系统设计吗?- 单线程写文件有点慢,那多开几个线程一起写是不是可以加速呢?- w
一次诡异的垃圾回收耗时问题排查实践
之前的博文中说过最近在查一个问题,花费了近两个星期,问题算是有了一个小结,是时候总结一下了。排查过程走了很多弯路,由于眼界和知识储备问题,也进入了一些思维误区,希望此问题能以后再查询此类问题时能有所警
踩了一个java命令行参数顺序的坑
前言 这几天线上实例会偶尔报警重启,查了一下问题,偶然发现了一个`java`命令参数顺序的坑。 正文 我线上的启动命令行为: ```sh java -jar app.jar -DcustomArg
导致程序出现OOM的因素,夜深人静的时候,程序OOM异常追踪
作为Java程序员, 除了享受垃圾回收机制带来的便利外, 还深受OOM(Out Of Memory)的困惑和折磨。 堆溢出(heap)编写如下例程:```javapublic static void
大量类加载器创建导致诡异FullGC
现象最近接手了一个同事的项目,某一天接口的响应耗时突然增加了很多,由几十ms 增加到了几十秒。首先查看机器上的日志,有调用第三方接口超时,查询数据库超时。立马查看第三方接口监控和数据库监控,一切正常。
震惊!线上四台机器同一时间全部 OOM,到底发生了什么?
案发现场昨天晚上突然短信收到 APM (即 Application Performance Management 的简称,我们内部自己搭建了这样一套系统来对应用的性能、可靠性进行线上的监控和预警的一种
消失的Java进程-Linux OOM Killer
在一台虚拟机上执行docker java应用,每隔一段时间就会出现java进程消失、而且没有任何jvm error log的情况。略一寻思,应该是遇到网上常说的Linux OOM的情况:虚拟机10G,
谈谈JVM的垃圾回收器
JVM的GC经过多年的发展,大家对Minor GC、major GC的理解并不完全一致,所以我不打算在本文中使用这个概念。我把GC大概分为一下4类:1. Young GC:只是负责回收年轻代对象的GC
jvm堆内存溢出后,其他线程是否可继续工作
背景之前网上出现一个面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。由于题
大招落地:MySQL 插入更新死锁源码分析
天再来分析一个死锁场景。下面开始真正的内容。建表语句:```javaCREATE TABLE `tenant_config` ( `id` bigint(21) NOT NULL AUTO_INCR
什么会导致Java应用程序的CPU使用率飙升?
问题 无限循环的while会导致CPU使用率飙升吗?经常使用Young GC会导致CPU占用率飙升吗?具有大量线程的应用程序的CPU使用率是否较高?CPU使用率高的应用程序的线程数是多少?处于BLOC
如何使用Eclipse内存分析工具定位内存泄漏
本文以我司生产环境Java应用内存泄露为案例进行分析,讲解如何使用Eclipse的MAT分析定位问题 背景11月10号晚上8点收到报警邮件,一看是OOM打开公司监控系统查看应用各项指标发现JVM中老年
记一次简单的 JVM 调优
背景最近对负责的项目进行了一次性能优化,其中包括对 JVM 参数的调整,算是进行了一次简单的 JVM 调优,JVM 参数调整之后,服务的整体性能有 5% 左右的提升,还算不错。先介绍一下项目的基本情况
有些线程跑着跑着就不见了
前言最近接了一个业务需求,需求倒是不难,三下五除二就整理出设计方案,然后就开始代码改造。啪,很快,就完成代码改造,然后提测给测试小姐姐。小姐姐前面测试好好的,测到这个工程的时候,突然跟我反馈,你看这个
OOM异常会导致JVM退出吗?
问题来源一次生产事故,由于一次性从数据库查询过多数据导致线程 OOM:Java heap space 异常(千万级表,JVM堆内存2G),但是在线程OOM发生时,java进程却没有立即挂掉。不符合所谓
记一次网络请求连接超时的事故
从HTTP请求超时、重试机制、操作系统网络等层面剖析了事故的原因,最终解决业务问题。这里先抛两个问题:1)你遭遇过由于网络连接或请求超时造成的生产事故吗?2)你知道操作系统默认的网络连接超时是多少秒?
kill -9 导致 Kakfa 重启失败的惨痛经历!
背景在 2 月10 号下午大概 1 点半左右,收到用户方反馈,发现日志 kafka 集群 A 主题 的 34 分区选举不了 leader,导致某些消息发送到该分区时,会报如下 no leader 的错
谈谈项目中主动full gc的一些问题
背景前一段时间在公司一个技术群里,有人在问“有人在线上使用32G内存的服务”。我司线上内存标准配置都是8G的。我就问了一下使用32G内存碰到了啥问题。他的关注点在于一次full gc 时间的长短上。他
CPU 优化高级篇:Java  CPU 高的原因和排查方法  :学会Java死锁和CPU 100% 问题的排查技巧
Java死锁排查和解决要排查和解决死锁,首先思考三个问题:1. 什么是死锁?2. 为什么会出现死锁?3. 怎么排查代码中出现了死锁?4. 如何避免写出死锁的代码?作为技术人员(工程师),在出现问题的时
JVM GC 之「AdaptiveSizePolicy」实战
AdaptiveSizePolicy简介AdaptiveSizePolicy(自适应大小策略) 是 JVM GC Ergonomics(自适应调节策略) 的一部分。如果开启 AdaptiveSizeP
彻底理解 FinalReference与Finalizer
摘要之前写了一篇[Java Reference核心原理分析](https://heapdump.cn/article/125010)的文章,但由于篇幅和时间的原因没有给出FinalRefere
打通IO栈:一次编译服务器性能优化实战
背景随着企业SDK在多条产品线的广泛使用,随着SDK开发人员的增长,每日往SDK提交的补丁量与日俱增,自动化提交代码检查的压力已经明显超过了通用服务器的负载。于是向公司申请了一台专用服务器,用于SDK
在调试里看 NV 驱动栈溢出导致的连环死锁
最近我使用的一台PC随机出现应用程序卡死。卡死的程序可能是VirtualBox虚拟机,可能是资源管理器,也可能是其它软件。有时是一个程序卡死,有时是几个程序卡死,甚至是卡死一大片,整个系统不能动弹,只
强如 Disruptor 也发生内存溢出?
前言```OutOfMemoryError ```问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界、空指针等)来说这类问题是很难定位和解决的。本文以最近碰到的一次线上内存溢出的定位、解决问题的
千万级数据表选错索引导致的线上慢查询事故
前言又和大家见面了!又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周能产出五六篇文章,给
导致程序出现OOM的因素,夜深人静的时候,程序OOM异常追踪
作为Java程序员, 除了享受垃圾回收机制带来的便利外, 还深受OOM(Out Of Memory)的困惑和折磨.先来看下java的内存分布 堆溢出(heap)编写如下例程:```javapublic
SafePoint 与 Stop The World 全解(基于OpenJDK 11版本)
在分析线上 JVM 性能问题的时候,我们可能会碰到下面这些场景:1.GC 本身没有花多长时间,但是 JVM 暂停了很久,例如下面:2.JVM 没有 GC,但是程序暂停了很久,而且这种情况时不时就出现。
一次 ES-APM 导致的大量线程阻塞问题排查
前段时间我们接入了某公司出品的 Elastic-APM 作为全链路监控平台,终结了我好几年前撸的字节码注入全链路监控平台。前段时间有一个业务在启动过程中,会概率性出现大量线程阻塞,导致可对外提供服务的
一文搞懂Netty内存管理
以下文章来源于匠心零度 ,作者零度冰炫 在学习Netty的时候,ByteBuf随处可见,但是如何高效分配ByteBuf还是很复杂的,Netty的池化内存分配这块还是比较难的,很多人学习过,看过但是还是
Javassist实现JDK动态代理
提到JDK动态代理,相信很多人并不陌生。然而,对于动态代理的实现原理,以及如何编码实现动态代理功能,可能知道的人就比较少了。接下一来,我们就一起来看看JDK动态代理的基本原理,以及如何通过Javass
一次 HashSet 所引起的并发问题
背景上午刚到公司,准备开始一天的摸鱼之旅时突然收到了一封监控中心的邮件。心中暗道不好,因为监控系统从来不会告诉我应用完美无 bug,其实系统挺猥琐。打开邮件一看,果然告知我有一个应用的线程池队列达到阈
JUC 之ThreadPoolExecutor实现原理分析
ThreadPoolExecutor工作流程JDK1.5中引入了线程池,合理地利用线程池能有效的提高程序的运行效率,但不当的使用线程池也会带来致命的危害。作为使用最多的ThreadPoolExecut
关于 /dev/null 差点直播吃鞋的一个小问题
我们的定时任务、异步 MQ 的 jar 包程序等都会使用 System.in.read() 等阻塞程序,防止程序退出,在本地测试一直都没有问题,直到有同学反馈,线上 Docker 环境中代码 Syst
如何通过反射获得方法的真实参数名(以及扩展研究)
前段时间,在做一个小的工程时,遇到了需要通过反射获得方法真实参数名的场景,在这里我遇到了一些小小的问题,后来在部门老大的指导下,我解决了这个问题。通过解决这个问题,附带着我了解到了很多新的知识,我觉得
一次 Node.js http 连接无法复用的问题排查
一次压测中阿里云 SLB 的并发连接数被打满了,导致服务之间的 HTTP 调用延迟很大。当时 SLB 的并发连接数情况如下图所示。登录容器终端查看,发现某个前端 Node.js 服务中的单个容器的 E
看了 Spring 官网脚手架真香,也撸一个 SpringBoot DDD 微服务的脚手架!
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn) 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言`为什么我们要去造轮子?`造轮子的核心
性能调优必备利器之 JMH
if 快还是 switch 快?HashMap 的初始化 size 要不要指定,指定之后性能可以提高多少?各种序列化方法哪个耗时更短?无论出自何种原因需要进行性能评估,量化指标总是必要的。在大部分场合
深入汇编指令理解Java关键字volatile
volatile是什么volatile关键字是Java提供的一种轻量级同步机制。它能够保证可见性和有序性,但是不能保证原子性 可见性对于volatile的可见性,先看看这段代码的执行<div alig
从应用到内核查接口超时(中)
某个接口超时会偶发,查了几个 case 的日志,发现 httpClient 在请求某三方接口结束后输出一条日志时间为 A,方法返回后将请求结果解析成为 JSON 对象后,再输出的日志时间为 B, AB之间的时间差会特别大,100-700ms 不等,而 JSON 解析正常是特别快的,不应该超过 1ms
实践项目中的JVM调优
背景有个项目可以实时对应用的健康情况进行监控、分析、预警。如下图展示一段时间内应用“JVM监控”:从这个视图中可以看出几个关键点:(1)标号1中展示此时间段内FullGC次数、YoungGC次数;(2
记一次JVM OOM 实战优化
刚接手的服务,正常稳定运行了很长一段时间,在大家伙收拾东西准备回家过年时,突然就抽风了。接口失败率居高不下?看日志!```javaGC overhead limit exceededjava.lang
Java 虚拟机进程状态管理工具 jps 失效?吓尿了!
寒冬了,服务器资源也要节约这用。以前,我们一个人可以申请多个机器进行一些分布式的系统部署和测试,包括一些微服务方面的项目我们尽量的模拟多台机器的环境。但是现在,公司为了进一步节约成本开支,把一些机器进
JVM源码分析之不保证顺序的Class.getMethods
概述本文要说的内容是今天公司有个线上系统踩了一个坑,并且貌似还造成了一定的影响,后来系统相关的人定位到了是`java.lang.Class.getMethods`返回的顺序可能不同机器不一样,有问题的
32个问题,学习Java虚拟机的运行时数据区
学习JVM虚拟机是一个比较枯燥无味的过程,刚开始基本是看不懂学不懂,然后就是似懂非懂,最后觉得好像懂了一些,到后来又觉得还是没懂,反正就是懵懵懂懂,过目就忘,一问就卡住,说也说不清,其实说的就是我自己
通过生产者与消费者模型感受死锁
一. 实验目的及实验环境 1.实验目的通过观察、分析实验现象,深入理解产生死锁的原因,学会分析死锁的方法, 并利用 pstack、 gdb 或 core 文件分析( valgrind (DRD+Hel
Java OOM 高级篇:线上Docker 上Springboot程序OOM问题的排查分享
背景运维人员反馈一个容器化的java程序每跑一段时间就会出现OOM问题,重启后,间隔大概两天后复现。 问题调查 一、查日志由于是容器化部署的程序,登上主机后使用docker logs Containe
从一个Young GC变慢的案例来聊聊finalize方法
背景有一次一位同学上线之后,发现Young GC的时间飙升很多,监控如下图:监控显示老代码(04机器)的平均young gc时间之后23ms,而新代码(01机器)为平均时间84ms。上线去查看gc
java内存溢出问题分析过程
背景运维人员反馈一个容器化的java程序每跑一段时间就会出现OOM问题,重启后,间隔大概两天后复现。 问题调查 一、查日志由于是容器化部署的程序,登上主机后使用docker logs Containe
面试官一个线程池问题把我问懵逼了。
前几天,有个朋友在微信上找我。他问:why哥,在吗?我说:发生肾么事了?他啪的一下就提了一个问题啊,很快。我大意了,随意瞅了一眼,这题不是很简单吗?结果没想到里面还隐藏着一篇文章。故事,得从这个问题说
简单的 HTTP 调用,为什么时延这么大?
背景最近项目测试遇到个奇怪的现象,在测试环境通过 Apache HttpClient 调用后端的 HTTP 服务,平均耗时居然接近 39.2ms。可能你乍一看觉得这不是很正常吗,有什么好奇怪的?其实不
从实际案例聊聊Java应用的GC优化
当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化。但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很
一次艰难的内存泄露排查,BeanUtils的锅
现象2019.4.26 22:00左右,通过jstat -gcutil pid 5000 ,发现fgc次数很多而且频繁,此时老年代占比已经大约70%左右,且已经回收不了内存,我们这边设置的fgc阈值是
一次慢查询暴露的隐蔽的问题
最近解决了一个生产 SQL 慢查询的问题,排查问题之后发现一些比较隐匿且容易忽略的问题。 业务背景介绍最近业务上需要上线一个预警功能,需要查出一段时间内交易,求出当前交易成功率。当成功率低于设定阈值时
从应用到内核查接口超时(上)
某个接口超时会偶发,查了几个 case 的日志,发现 httpClient 在请求某三方接口结束后输出一条日志时间为 A,方法返回后将请求结果解析成为 JSON 对象后,再输出的日志时间为 B, AB之间的时间差会特别大,100-700ms 不等,而 JSON 解析正常是特别快的,不应该超过 1ms
认识HotSpot虚拟机第1篇-在Ubuntu 16.04上编译OpenJDK8的源代码(配视频)
本文将详细介绍在Ubuntu16.04 LTS上对OpenJDK8进行编译,为了方便大家快速搭建起OpenJDK8的调试开发环境,我还录制了对应的视频放到了B站上,大家可以参考。视频地址:[https
内存溢出及解决方案
什么是内存溢出 JVM运行过程中,程序不断的申请内存空间用于保存运行时数据,当程序申请的内存空间系统无法满足时,就会抛出内存溢出错误。内存溢出发生的区域以及相应的解决方案都不相同,下面我们逐一分析内
今天,进程告诉我线程它它它它不想活了
上一篇文章我们解剖了进程和线程的本质,进程和线程的实现方式,这篇文章我们来探讨它们是如何通信的,进程告诉我说线程不想活了,我不管它死活,我只想知道我是谁?进程是怎么告诉我的?进程的出现和线程的死亡和我
What?一个 Dubbo 服务启动要两个小时!
前言前几天在测试环境碰到一个非常奇怪的与 ```dubbo``` 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。希望对还未碰到或正在碰到的朋友有所帮助。 现象现象是这样
被虐后,分享一点点JVM调优原理相关的知识和经验
本文只介绍一些原理和思路的内容,希望对你与所帮助!‍- 先了解原理,然后在进行调优。一定要记住的是任何的调优都不是一蹴而就,不要指望改动一个参数就达到调优的目的,也不要仅仅改动了一个参数,就认为是做了
生产环境JVM内存溢出案例分析
如果我们所在公司的业务量比较大,在生产环境经常会出现JVM内存溢出的现象,那我们该如何快速响应,快速定位,快速恢复问题呢?本文将通过一个线上环境JVM内存溢出的案例向大家介绍一下处理思路与分析方法。案
一个线程罢工的诡异事件
背景事情(事故)是这样的,突然收到报警,线上某个应用里业务逻辑没有执行,导致的结果是数据库里的某些数据没有更新。虽然是前人写的代码,但作为 ```Bugmaker&killer``` 只能咬着牙上了。
分享一个新出炉的JVM里不痛不痒的BUG(Attach机制相关)
概述老早之前写过一篇文章,关于attach机制的,可以看下这篇老文章了解一下[JVM源码分析之Attach机制实现完全解读](https://heapdump.cn/article/65423
一次full gc的排查经历
问题描述1月22日准备发布设备指纹新版本迭代过程中,在预发环境进行采集请求的压测发现了个现象,监控中的RT存在规律的尖点。接着又尝试master代码,发现不存在这个问题,那基本确认是新代码引入的问题了
数学,离一个程序员有多近?
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn) 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言`数学离程序员有多近?`ifelse也
JFR 定位因为 SSL 导致 CPU Load 飚高的问题
问题场景在某一时刻,某个微服务的某个实例 CPU 负载突然飚高:同时建立了很多数据库链接:其他实例没有这个现象。 问题定位由于建立了很多数据库链接,猜想可能是数据库比较慢,查看数据库这段时间的 SQL
浅谈JDK并发包下面的分治思想及分治思想在高并发场景的运用
提到分治思想,大家比较容易想起其在归并排序与快速排序中的运用。今天先给大家分享一下JDK并发包下面分治思想的运用,再和大家分享一下如何利用分治思想解决高并发场景下面的一些问题。本文说的分治思想是广义范
为什么GC 异常,大家喜欢让Swap背锅呢
背景在公司内部技术群里,经常有人时不时的问到服务某次GC时间突然很高,有什么办法排查。基本上每次都会有人怀疑会不会Swap导致的,先看看Swap,如果真的使用了Swap区域,基本上就会让Swap区域背
一个JDK线程池BUG引发的GC机制思考
问题描述前几天在帮同事排查生产一个线上偶发的线程池错误逻辑很简单,线程池执行了一个带结果的异步任务。但是最近有偶发的报错:```javajava.util.concurrent.RejectedExe
一个fullgc引发的流血事件
本文正在参加「Java应用线上问题排查经验/工具分享」活动先点赞再看,养成好习惯背景 全国最大的短信平台,大家都用过我们的产品。数据量比较大,最多时候一天近7亿条短信。由于我们技术不很扎实,生产问题就
记录一次jvm调优过程
查看gc情况结果:服务启动时长是1天,进行了3240左右次minorGC,一共使用时间80s左右。也就是一次minirGC时间是0.02s,FGC是一次,时间是2.2s,fullGC时间过长,需要优化
JVM源码分析之FinalReference完全解读
概述 JAVA对象引用体系除了强引用之外,出于对性能、可扩展性等方面考虑还特地实现了四种其他引用:SoftReference、WeakReference、PhantomReference、FinalR
【全网首发】不经意的两行代码把CPU使用率干到了90%+
背景介绍某同学反映某个应用ECS CPU使用率90%+,希望分析下原因。该应用使用schedulerx来做定时任务执行,每隔一小时执行一次,每次执行5分钟左右,执行任务期间CPU使用率90%+。问题现象ECS配置是4c8g,从上图来看系统负载已经非常高了。分析过程寻找热点代码arth
升级到JDK9的一个BUG,你了解吗
概述前几天在一个群里看到一个朋友发了一个demo,说是JDK的bug,昨天在JVM的一个群里又有朋友发了,觉得挺有意思,分享给大家,希望大家升级JDK的版本的时候注意下是否存在这样的代码,如果存在记得
Java中,那些关于String和字符串常量池你不得不知道的东西
老套的笔试题在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true。```javaString s1 = new String("xy
又一次生产 CPU 高负载排查实践
前言前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。其实早在去年我也处理过类似的问题,并记录下来:《[一次生产 CPU 100%
一个 println 竟然比 volatile 还好使?
先点赞再看,养成好习惯前两天一个小伙伴突然找我求助,说准备换个坑,最近在系统学习多线程知识,但遇到了一个刷新认知的问题…… 小伙伴:Effective JAVA 里的并发章节里,有一段关于可见性的描述
实现线程的方式到底有几种?
这篇文章主要讲解实现线程的方式到底有几种?以及实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里?实现线程是并发编程中基础中的基础,因为我们必须要先实现多线程,才可以继续后续的一
从X86指令深扒JVM的位移操作
概述之所以会写这个,主要是因为最近做的一个项目碰到了一个移位的问题,因为位移操作溢出导致结果不准确,本来可以点到为止,问题也能很快解决,但是不痛不痒的感觉着实让人不爽,于是深扒了下个中细节,直到看到I
没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!
文末 JVM 思维导图,有需要的自取熟知并发编程的你认为下面这段代码的执行结果是怎么样的?我如果说,执行流程是:1. t1 线程和 t2 线程一直执行 num 的累加操作2. 主线程睡眠 1 秒,1
一个让人惊讶的排序导致的死循环问题
首先重现问题--表中的数据大概是这样的:```java+----------+---------------------+| image_no | create_time |+----
Java:100==100为true,1000==1000也可以为true!
现象我们先运行一段代码,代码片段如下:```javaInteger a = 1000, b = 1000;System.out.println(a == b);//1Integer c = 100,
这个Bug的排查之路,真的太有趣了。 #论程序员,你曾遇到关于性能的那些事#
在《深入理解Java虚拟机》一书中有这样一段代码:```public class VolatileTest { public static volatile int race = 0; p
如何优雅的使用和理解线程池
前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条:可见线程池的重要性。简单来说使用线程池有以下几个目的:- 线程是稀缺资源,不能频繁的创建。-
Java 动态调试技术原理及实践
动态调试要解决的问题断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调
内存迟迟下不去,可能你就差一个GC.Collect
背景我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还是有一点心疼的,可怜
震惊!ConcurrentHashMap里面也有死循环,作者留下的“彩蛋”了解一下?
JDK BUG这篇文章,聊一下我最近才知道的一个关于 JDK 8 的 BUG 吧。首先说一下我是怎么发现这个 BUG 的呢?大家都知道我对 Dubbo 有一定的关注,前段时间 Dubbo 2.7.7
JDK的BUG导致的内存溢出续集!
BUG到底是怎么修复的?《[我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏](https://heapdump.cn/article/2041676)》这篇文章发布后。
「每日五分钟,玩转JVM」:两种算法
前言上篇文章,我们了解了GC 的相关概念,这篇文章我们通过两个算法来了解如何去确定堆中的对象实例哪些是我们需要去回收的垃圾对象。 引用计数算法引用计数法的原理很简单,就是在对象中维护一个计数器,当有一
MySQL 死锁套路:一次诡异的批量插入死锁问题分析
线上最近出现了批量insert的死锁,百思不得解。死锁记录如下:```2018-10-26T11:04:41.759589Z 8530809 [Note] InnoDB: (1) TRANSACTI
使用google perf工具来排查堆外内存占用
作者:KL原文链接:https://qsli.github.io/2017/12/02/google-perf-tools/转载已获授权线上机器内存不足,经常被系统oom killer干掉。如果tom
JFR定位线上问题实例 - JFR导致的雪崩问题定位与解决
最近发现一个应用,使用默认的 JFR 配置,发生了类似于雪崩的现象,这里记录下,引以为戒。 Key takeaways1. JFR 的线程堆栈 dump 采集默认周期是everyChunk,也就是每次
豆列:从表到里学习JVM实现
在社会化分工、软件行业细分专业化的趋势下,会真的参与到底层系统实现的人肯定是越来越少(比例上说)。真的会参与到JVM实现的人肯定是少数。但如果您对JVM是如何实现的有兴趣、充满好奇,却苦于没有足够系统
JDK8在泛型类型推导上的变化
概述JDK8升级,大部分问题可能在编译期就碰到了,但是有些时候比较蛋疼,编译期没有出现问题,但是在运行期就出了问题,比如今天要说的这个话题,所以大家再升级的时候还是要多测测再上线,当然JDK8给我们带
JVM菜鸟进阶高手之路七新生代如何晋升到老年代
回顾```javaprivate static final int _1MB = 1024 1024;    public static void main(String[] args) throw
Java GC详解 - 最全面的理解Java对象结构 - 对象指针 OOPs
最近在抽时间阅读 JDK 的源码,主要是 GC 还有 Safepoint 相关的源码,发现很多我在之前拜读网上各种 JVM 原理大作时候的由于没有看源码导致我对于底层原理的误解。果然,一百个人读水浒传
我司基础组件更新本地缓存策略问题导致young gc时间升高
背景有次想研究一下服务QPS和young gc的时间的关系。假如服务对外提供的接口的平均响应时间是1s,那么最坏情况下该请求用到的对象就应该存活1s(为什么是最坏,因为很多中间变量不需要这么存活这么久
不敢相信?System.currentTimeMillis()存在性能问题
System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码执行时长等,在我们的印象中应该快如闪电。但实际上在并发调用或者特别频繁调用它的情况下
实战生产问题:真的别再使用TimerTask了!
问题背景说说大概的场景吧。由于系统里面增加了权限的限制,不同用户拥有不同的数据权限。当前的方案是查询用户uid和对应的数据列表存放在本地内存里,并且需要定时捞取对应的关系数据存储在本地缓存LocalC
记一次线上服务内存泄漏问题排查始末
故障案发缘起网关上线一周以来,运行一直稳定,从未出现CPU飙高的情况。发生故障的当天,CPU开始缓慢上升,但是上升的过程并不是直线,而是有下降,CPU下降一些后突然继续上升,到后期,CPU飙高速度开始
慌了!LinkedHashMap和hashTable的Entry居然有500w之多,还无法回收
故障介绍某一日早上七点,我还在睡梦之中,8点醒来发现运维群内有人at。一看说是用户服务的一个节点挂掉了。然后大概原因是因为OOM,运维还在群里发了一个jstack 的栈dump文件,未必是事故发生时的
PhantomReference? 虚引用? OOM?
背景关于各种引用参考https://www.geeksforgeeks.org/types-references-java/在我之前认知中,虚引用除了自身对象占用内存外,其引用对象referent在不
怎么才算掌握了JDK中的线程池
怎么才算掌握了JDK中的线程池JDK并发包下面的线程池是面试中经常被考查的点,之前我写过一篇[ThreadPoolExecutor源码分析](https://heapdump.cn/artic
大碰撞!当Linux多线程遭遇Linux多进程
背景 本文是描述多进程多线程编程中遇到过的一个坑,并从内核角度分析其原理。这里说的多进程多线程并不是单一的多进程或多线程,而是多进程和多线程,往往会在写一个大型应用时才会用到多进程多线程的模型。这是怎
借HSDB来探索HotSpot VM的运行时数据
有人问了个小问题,说:```public class Test { static Test2 t1 = new Test2(); Test2 t2 = new Tes
Java语言
Unsafe那些事
简介Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操
一次StackOverflowError排查,原因竟然和Dubbo有关!
前言某天业务方的同事和我反馈,说系统出现了StackOverflowError.坦白说,Exception见得过了,但是Error倒是很少出现,此时他的心情是这样的 一波猛如虎的操作我们先来看血淋淋的
如何降低young gc时间
基础知识young gc 主要采用的是copying GC算法;copying GC算法主要有以下两个步骤:1. Root Scanning2. Object Copycopying Gc的执行过程大
怎么排查CPU飙升
怎么排查CPU飙升线上有些系统,本来跑的好好的,突然有一天就会出现报警,CPU使用率飙升,然后重启之后就好了。例如,多线程操作一个线程不安全的list往往就会出现这种现象。那么怎么定位到具体的代码范围
认识HotSpot虚拟机第2篇-调试HotSpot源代码(配视频)
本文将详细介绍在Ubuntu16.04 LTS上对OpenJDK8进行编译,为了方便大家快速搭建起OpenJDK8的调试开发环境,我还录制了对应的视频放到了B站上,大家可以参考。 视频地址:[http
全网最硬核 JVM TLAB 分析(上)
1. 观前提醒本期内容比较硬核,非常全面,涉及到了设计思想到实现原理以及源码,并且还给出了相应的日志以及监控方式,如果有不清楚或者有疑问的地方,欢迎留言。其中涉及到的设计思想主要为个人理解,实现原理以
废弃fastjson!大型项目迁移Gson保姆级实战
前言大家好,又双叒叕见面了,我是天天放大家鸽子的蛮三刀。本篇文章是我这一个多月来帮助组内废弃fastjson框架的总结,我们将大部分Java仓库从fastjson迁移至了Gson。这么做的主要的原因是
探底分析Java原子类CAS的实现原理—从HotSpot源码到CPU指令cmpxchg
在Java的java.util.concurrent.atomic包中,提供了许多原子类。这些原子类,主要都是依赖于底层的CAS机制来实现内部值的原子更新操作。 AtomicInteger源码以下为J
记一次由 MQ SDK 太简陋引发的生产事故
本文正在参加「Java应用线上问题排查经验/工具分享」活动 背景由于公司所有系统都在云上,所以服务器/数据库/中间件啥的用的都是某云服务商的产品,包括 MQ/Redis 等。​某周边小系统在流程改造过
记一次通过Arthas定位解决spring-boot中内嵌tomcat的Bug问题
背景公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。最近在优化接口的响应时间,优化了代码之后,但是时间还是达不到要求;有一个诡异的
Shenandoah GC:一个来自OpenJDK12的全新并发压缩垃圾回收器
是不是才听说了JDK11的ZGC,并且还没搞懂?不好意思,OpenJDK12马不停蹄的带来了Shenandoah GC。 概述JDK12新增的一个名为Shenandoah的GC算法,它的evacuat
IDEA 的 debug 怎么实现?出于这个好奇心,我越挖越深!
对 Debug 的好奇初学 Java 时,我对 IDEA 的 Debug 非常好奇,不止是它能查看断点的上下文环境,更神奇的是我可以在断点处使用它的 Evaluate 功能直接执行某些命令,进行一些计
Netty堆外内存泄露排查与总结
导读Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程。Netty 底层基于 JDK 的
BitArray虽好,但请不要滥用,一次线上内存暴增排查
背景 讲故事前天写了一篇大内存排查在园子里挺火,这是做自媒体最开心的事拉,干脆再来一篇满足大家胃口,上个月我写了一篇博客提到过使用bitmap对原来的List<CustomerID进行高强度压缩,将原
新一代垃圾回收器ZGC的探索与实践
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:- 停顿时间不超过10ms;- 停顿时间不会随着堆的大小,或者活跃对象的大小而增加
一次系统性能瓶颈的寻找过程
玩过性能优化的朋友都清楚,性能优化的关键并不在于怎么进行优化,而在于怎么找到当前系统的性能瓶颈。性能优化分为好几个层次,比如系统层次、算法层次、代码层次...JVM 的性能优化被认为是底层优化,门槛较
Java踩坑记系列之Arrays.asList
java.util.Arrays.asList()可以方便的把一个数组转成ArrayList集合来使用,但是如果对集合使用增加或删除元素的操作将会报错,如下:```javaList list = Ar
不重启JVM,替换掉已经加载的类,偷天换日?
在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求
Java常用的几种属性拷贝工具类使用总结
Java属性拷贝工具类使用总结对项目中经常使用的属性拷贝工具类进行总结:- org.apache.commons.beanutils.BeanUtils- org.apache.commons.bea
一个困扰我122天的疑问。#论程序员,你曾遇到关于性能的那些事#
众所周知,编程是一门玄学。本文主要是描述输出语句、sleep以及Integer对线程安全的影响。第一次碰到这个问题是122天之前,当时就觉得很奇怪。至于为什么还有Integer?我也不知道,可能是玄学
Java对象大小内幕浅析
如果你能算出new String(“abc”)这个对象在JVM中占用内存大小(64位JDK7中压缩大小48B,未压缩大小64B), 那么看到这里就可以结束了~Java对象的内存布局:对象头(Heade
小心踩雷,一次Java内存泄漏排查实战
前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理、Bug 排查、运营 issue 处理的事。工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了。不知道是公司网络广了就这
一个小问题,挖出了一个吃了几万美金的bug
接手维护的一个项目,原来的开发同事都离职了。我一个代码都没改,服务跑着跑着出bug了。项目描述:离职的同事交给我维护后,服务一直稳定运行了大半年,且这大半年没有改动代码。接口根据客户端使用的语言下发对
线上排障技巧 | 动态修改LOGGER级别
前言大多数情况下,我们会在打印日志时定义日志的LOGGER级别,用来控制输出的信息范围。一方面,过多的输出会影响查看日志的效率,另一方面,过少的日志让问题定位变得困难。但当线上出现问题时,线上容器通常
Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量
今天 Java19 正式发布,带来了一个 Java 开发者垂涎已久的新特性—— 虚拟线程。在 Java 有这个新特性之前,Go语言的协程风靡已久,在并发编程领域可以说是叱咤风云。随着国内 Go 语言的快速发展与推广,协程好像成为了一个世界上最好语言的必备特性之一。Java19 虚拟线程就是来弥补这个
Java“魔法”-jstack命令解析
前情预告在介绍jstack之前,先简单介绍一下jps。因为jps使用相对简单,各位看官看一下便知。jps的作用是显示当前系统的java进程情况,及其id号。jps是【进程查询】魔法。Java进程Id的
面试官:你给我说一下线程池里面的几把锁。
其实线程池里面用到锁的地方还是非常的多的。
Rocketmq发送时异常system busy,start flow control for a while;broker busy start flow control for a while;
本文正在参加「Java应用线上问题排查经验/工具分享」活动先点赞再看,养成好习惯背景全国最大的短信平台,大家都用过我们的产品。数据量比较大,最多时候一天近7亿条短信。我们项目从RocketMQ3.2.
由多线程内存溢出产生的实战分析
一日凌晨,手机疯狂报警,短信以摧枯拉朽之势瞬间以百条的速度到达,我在睡梦中被惊醒,看到短信的部分内容如下:```javaCaused by: java.lang.OutOfMemoryError: u
那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)
创作目的互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云
升级到Spring 5.3.x之后,GC次数急剧增加,我人傻了
01 问题背景最近我们项目升级到了 Spring Boot 2.4.6 + Spring Cloud 2020.0.x,通过我的另一系列即可看出:[Spring Cloud 升级之路](https:/
首次排查 OOM 实录
前言距离上篇文章更新已经一月有余,之所以一直没更新一是工作最近比较忙,二是感觉产出不了什么对自己和他人有价值的文章。因此这段时间,主要的空闲时间在学习技术和写 GitHub,博客这边就暂时落下了。本篇
年纪轻轻,为什么要搞中间件开发?“路怎么走,让你们自己挑”
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言`年纪轻轻,为什么要搞中间件开发?`五年
高CPU消耗,这次又是lettuce的锅
起源于Thread.sleep最近在系统调优过程中遇到一个比较有意思的高CPU消耗的问题(当时CPU使用率已经到90%左右),先上图感受一下。是的,就是Thread.sleep这个方法,消耗了大概34
认识HotSpot虚拟机第4篇-HotSpot的启动过程
本文将详细介绍HotSpot的启动过程,启动过程涉及到的逻辑比较复杂,细节也比较多,下面我们开始以文章的形式简单介绍一下启动过程。HotSpot通常会通过java.exe或javaw.exe来调用/j
无异常日志,就不能排查问题了???
小声逼逼众所周知,日志是排查问题的重要手段。关于日志设计,以及怎么根据从【用户报障】环节开始到秒级定位问题这个我们下一期说(绝非套路),这一期,主要讲一下,在没有异常日志的情况下,如何定位问题。没有日
记一次MapReduce的内存溢出
背景:最近使用MapReduce做离线数据清洗,在map段做简单的数据过滤,有经纬度的发送到reduce端,没经纬的过滤掉。reduce端将数据整理出来,按业务模型拼接成字符串写入HDFS。供hive
神奇的"僵尸"进程问题
现象描述大概1个月多以前 在启动脚本中增加了tail -f,用来启动后追踪日志判断是否启动成功,后发现无法执行shutdown.sh(卡住 利用curl) 然后无奈使用kill -9,但通过ps -e
线程池线程何时减少
以下源码来自于jdk8----一、当没有获取到任务,则会减少工作线程二、获取任务时,线程池中线程数减少条件:1、线程池状态为stop2、线程池状态为shutdown,且任务队列为空3、当允许核心线程超
Java最前沿技术——ZGC
ZGC介绍ZGC(The Z Garbage Collector)是JDK 11中推出的一款追求极致低延迟的实验性质的垃圾收集器,它曾经设计目标包括:- 停顿时间不超过10ms;- 停顿时间不会随着堆
Java踩坑记系列之线程池
线程池大家都很熟悉,无论是平时的业务开发还是框架中间件都会用到,大部分都是基于JDK线程池ThreadPoolExecutor做的封装,比如tomcat的线程池,当然也有单独开发的,但都会牵涉到这几个
90%的程序员,都没用过多线程和锁,怎么成为架构师?
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn)Github:[https://github.com/fuzhengwei/CodeGuide/w
G1之REGION SIZE
说明:JDK7和JDK8的Region划分实现略有不同(差异非常小,且只有-Xmx和-Xms的值不一样才有区别),本篇文章讲解的是JDK8中Region的划分实现。 源码分析G1 Region划分的实
小心递归中内存泄漏
前段时间由于业务需要,需要从数据库中查询出来所有满足条件的数据,然后导入到文件中。于是随便写了个程序,查询出所有满足条件然后再写入文件。但是实际上线后却发现,程序刚开始运行马上看到部分数据写入到文件,
记一次线上服务不可用问题分析
问题描述线上接口服务隔一天就不能访问,重启大法好,只要重启就可以调用,间隔半天又会出现这种情况,由于该服务是mocker代理服务,所以开了443、80、11181等端口,但是只有80端口才会被阻塞,其
方案设计:基于IDEA插件开发和字节码插桩技术,实现研发交付质量自动分析
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn) 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言`如何保证代码质量?`业务提需求,产品
【全网首发】MQ-消息堆积-业务线程阻塞案例分析
业务背景业务中某个应用在消费MQ的时候,出现部分机器消息堆积,随着时间推移,堆积的机器数量越来越多,消息的堆积总量越来越多。问题现象系统监控CPU、Load、内存、网络、磁盘监控指标正常;JVM 内存、GC正常。MQ监控分析过程MQ消息堆积最常见的情况是:应用侧处理MQ消息比较慢,
没源码也没文档,但我还是解决了线上偶发的长耗时问题
本文正在参加「Java应用线上问题排查经验/工具分享」活动 先点赞再看,养成好习惯 背景公司某个规则引擎系统,主要用来做一些费用计算和业务逻辑核验的功能。不过由于一些不可描述的历史原因,导致该系统没有
Spring IOC 特性有哪些,不会读不懂源码!
一、前言多线程、锁、JVM调优,都背出花啦,怎么一写代码还是乱糟糟?为什么这些无论从书本、课堂、面试都显得非常重要的知识,但是在实际的编程中没有提升你的编码能力呢?首先这些这些知识在实际的互联网业务开
使用XPocket插件JConsole排查线上OOM异常案例
XPocket插件JConsole主要用于内存问题的排查,能够对堆中的Eden、Survivor、Old区以及堆外的Metaspace、Code Cache等区域进行观察。我们在使用JConsole时
日常问题排查-调用超时
前言日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^。 Bug现场这次的Bug是大家喜闻乐见的调用超时。即A调用B超过了5s搜索一下日志,发现
全网最硬核 JVM TLAB 分析(下)
1. TLAB 相关 JVM 日志解析 1.1. 准备 Java WhiteBox API首先需要准备好Java WhiteBox API 1.1.1. 什么是 WhiteBox APIWhiteBo
一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG
这一周线上碰到一个诡异的BUG。线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功。通过日志发现,从凌晨5:26分开始到5:56任务执行了三次,三次都
JVM调优实战:解决CMS concurrent-abortable-preclean LongGC的问题
背景 多个业务线的应用出现LongGC告警最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 分析前的一些JVM背景知识回顾 JVM堆内存划分- 新生代(You
Java 线程池中的线程复用是如何实现的?
前几天,技术群里有个群友问了一个关于线程池的问题,内容如图所示:那么就来和大家探讨下这个问题,在线程池中,线程会从 workQueue 中读取任务来执行,最小的执行单位就是 Worker,Worker
一个NullPointerException,竟然有这么多花样!
案发现场我们先看一下给出的异常栈```javajava.lang.NullPointerException at org.springframework.data.redis.cache.RedisC
码农会锁,ReentrantLock之公平锁讲解和实现
作者:小傅哥博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言 Java要学多少够?最近经常有小伙伴问我,以为我的经验来看,学多少够,好像更多的是
线程说:不是我想爆炸,只怪你Nd4j没用好
一、项目介绍 web_rec_comm_ctr 背景:去年接手了一个排序服务,用于播单、声音、主播排序。接手以来处理过内存溢出问题,后面也没再出现过其他状况。但是最近该项目用于离线任务计算后,出现了问
ThreadLocalRandom 安全吗
前言最近在写一些业务代码时遇到一个需要产生随机数的场景,这时自然想到 jdk 包里的 Random 类。但出于对性能的极致追求,就考虑使用 ThreadLocalRandom 类进行优化,在查看 Th
Thread.start() ,工作这么久,还不知道它是怎么让线程跑起来的!
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn)Github:[https://github.com/fuzhengwei/CodeGuide/w
从一个Java数组的小测验浅看字节码指令
前两天在查看订阅的Oracle Java Magazine邮件时,发现了一个有趣的Java Quiz(小测验),该Quiz的网址请右转[Java Magazine](https://blogs.ora
认识HotSpot虚拟机第3篇-HotSpot项目结构
之前已经介绍了在Ubuntu 16.04上编译OpenJDK8的源代码和调试HotSpot源代码。这一章将介绍HotSpot项目的目录结构。HotSpot目录下主要由agent、make、src和te
隐藏了2年的Bug,终于连根拔起,悲观锁并没有那么简单
接手的新项目,接二连三的出现账不平的问题,作为程序员中比较执着的人,不解决誓不罢休。最终,经过两次,历时多日终于将其连根拔起。实属不易,特写篇文章记录一下。 文章中不仅会讲到使用悲观锁踩到的坑,以及本人是如何排查问题的,某些思路和方法或许能对大家有所帮助。
记一次因 Redis 使用不当导致应用卡死 bug 的排查及解决!
首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理。但是后来问题出现频率越来越频繁
当Java中的+=遇到递归时出现的问题及原因探究(字节码相关)
昨天收到了我的算法老师给我发的一封邮件,他的一个学生在使用Java写算法时遇到了一个比较奇怪的问题。因为老师平时的主力语言是C++,所以他调试后也觉得问题很奇怪,就抛给了我这个Javaer。 问题问题
记一次因烂代码引起的 OOM 事件
本文正在参加「Java应用线上问题排查经验/工具分享」活动 背景某天,公司某内部财务相关系统的研发找到我,说他们的系统内存只增不减,jmap 也看了没什么问题,弄的他们现在只能每几天重启一次避免服务挂
内存迟迟下不去,可能你就差一个GC.Collect
一:背景 1. 讲故事 我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还
Java Flight Recorder - 事件机制详解
编者按:Java Flight Recorder(简称为JFR)曾经是 Oracle JDK 商业版的附属组件,在 JDK 11 中正式开源,后又被移植到 JDK8 中。JFR对本身应用的侵入性很小,
日常Bug排查-系统失去响应-Redis使用不当
前言日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^。 Bug现场开发反应线上系统出现失去响应的现象,收到业务告警已经频繁MarkAndSwe
FullGC没及时处理,差点造成P0事故
背景上线新功能后,要多观察。如果出现不稳定性的情况,需要高优先级查清原因,避免出现更大的问题。问题描述部分应用出现重启过程11:58,接到报警,一个pod1三分钟内存在重启12:02,pod1已经5分钟没有报警,数据已经正常恢复【有耗内存的功能,多人同时触发时,偶尔也会重启】12:0
高并发服务优化篇:从RPC预热转发看服务端性能调优
之前的文章中,我们详细阐述了RPC的调用过程,分析了其耗时组成,为我们日常性能调优提供了理论支持。有兴趣的可以点击《[详解RPC的一次调用过程](https://heapdump.cn/article
一次代码评审,差点过不了试用期!
作者:小傅哥博客:[https://bugstack.cn](https://bugstack.cn)沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言`好的代码往往也很好看`代码是给机器运行
一次简单的Java服务性能优化,实现压测 QPS 翻倍
背景前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了。在很低的 QPS 压力下服务器 load 就能达到 10-20,CPU 使用率 60% 以
ThreadDump堆栈分析
最近在进行一些系统问题追踪分析,顺便翻了翻以前的笔记和书籍,突然发现了以前写的 [ThreadDump分析笔记(一)解读堆栈]([https://www.jianshu.com/p/a4bcb36d3
一次 Java 内存泄漏排查过程,涨姿势
人人都会犯错,但一些错误是如此的荒谬,我想不通怎么会有人犯这种错误。更没想到的是,这种事竟发生在了我们身上。当然,这种东西只有事后才能发现真相。接下来,我将讲述一系列最近在我们一个应用上犯过的这种错误
线程池使用不当导致系统崩溃
前几天,发现一台阿里云服务器上的Web服务不可用。远程SSH登录不上,尝试几次登录上去之后,执行命令都显示```java-bash: fork: Cannot allocate memory```一看
CPU 优化线上实战篇:Java 生产环境 CPU 跑满 & 大量长耗时的问题排查 & 解决
本文正在参加「Java应用线上问题排查经验/工具分享」活动 背景公司某渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。就在今天早上,突然监
Java线程池中三种方式创建 ThreadFactory 设置线程名称
本文讲一下Java线程池中创建 ThreadFactory 设置线程名称的三种方式。设置线程名称是很重要的,如果你没有设置过,说明你还“涩世”不深,这里面的坑还不曾踩过,而我 在坑里进去然后坑里出来,
再聊 TCP backlog
这篇文章我们以 backlog 参数来深入研究一下建连的过程。通过阅读这篇文章,你会了解到下面这些知识:- backlog、半连接队列、全连接队列是什么- linux 内核是如何计算半连接队列、全连接
MySQL 死锁套路:再来看一例走不同索引更新的例子
前面有文章介绍了利用调试MySQL源码的方式来调试锁相关的信息,这里利用这个工具来解决一个比较简单的问题,线上的表字段较多,这里简单成为了一个表:```CREATE TABLE `t3` ( `id
记一次内存泄露,但并未溢出的问题 #论程序员,你曾遇到关于性能的那些事#
起因:服务器日常巡检发现内存占用较高,一直在报警线附近。(忘记截图~~)排查过程:1、看了一下当时的监控图,在业务请求量不大的情况下内存占用率长期较高,且fullgc后内存占用率没有明显下降,初步推断
空中楼阁之纸上谈兵 线程池执行流程图
一、jdk中的线程池线程池java.util.concurrent.ThreadPoolExecutor中execute方法执行流程图如下---如图所示,要想扩展线程池,任务队列是否已满部分可以进行重
MySQL 死锁套路:唯一索引下批量插入顺序不一致
死锁的本质是资源竞争,批量插入如果顺序不一致很容易导致死锁,我们来分析一下这个情况。为了方便演示,把批量插入改写为了多条 insert。先来做几个小实验,简化的表结构如下:```CREATE TABL
记一次线上服务不可用问题分析
问题描述线上接口服务隔一天就不能访问,重启大法好,只要重启就可以调用,间隔半天又会出现这种情况,由于该服务是mocker代理服务,所以开了443、80、11181等端口,但是只有80端口才会被阻塞,其
空中楼阁之纸上谈兵 mysql的dbcp的配置
maxWait=-1 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常,如果设置为-1表示无限等待testOnBorrow=true指明是否在从池中取出
Java性能优化之影响性能的那些细节
 CRUD麻木了吗?被xxx吐槽系统慢吗?你真的了解你的代码吗?今天聊聊一些关于java性能的细节。
使用虚线程进行同步网络 IO 的不阻塞原理
使用虚线程进行网络 IOProject Loom 主要目标是在 Java 平台上提供一种易于使用、高吞吐量的轻量级并发性和新的编程模型的 JVM 特性和API。这带来了许多有趣和令人兴奋的前景,其中之
java中WAITING状态的线程为啥还会消耗CPU
原文链接:https://juejin.cn/post/6844904001067040781 背景刚刚过去的双十一, 公司订单量又翻了一倍. 就在老板坐在办公室里面偷偷笑的同时,坐在工位上的我们却是
Spring Cloud Gateway 雪崩了,我人都傻了
大家好,我又人傻了。这次的经验告诉我们,出来写代码偷的懒,迟早要还的。 问题现象与背景昨晚我们的网关雪崩了一段时间,现象是:1.不断有各种微服务报异常:在写 HTTP 响应的时候,连接已经关闭:```
不可不知的 7 个 JDK 命令
这篇文章主要来介绍下 JDK 内置的命令,话不多说,让我们开始吧! javap使用 javap 可以查看 Java 字节码反编译的源文件,javap 的命令格式如下: javap下面来演示下用 jav
Log4j2 Jndi 漏洞原理解析、复盘
“ 2021-12-10一个值得所有研发纪念的日子。” 一波操作猛如虎,下班到了凌晨2点25。 基础组件的重要性,在此次的Log4j2漏洞上反应的淋漓尽致,各种“核弹级漏洞”、&ldquo
深入源码,深度解析Java 线程池的实现原理
java 系统的运行归根到底是程序的运行,程序的运行归根到底是代码的执行,代码的执行归根到底是虚拟机的执行,虚拟机的执行其实就是操作系统的线程在执行,并且会占用一定的系统资源,如CPU、内存、磁盘、网
CPU性能优化基本篇:一定要了解Linux CPU哪些基本概念
实际项目中,我们常常遇到一些CPU高的问题,本次专题由浅入深,从基本概念到线上实践,带着大家重新系统学习一些Linux CPU,Java CPU调优 基本知识和方法。
【全网首发】MQ-消息堆积-JDK Bug导致线程阻塞案例分析
背景介绍业务介绍在某学习APP浏览文章,客户端会将浏览的文章信息上传到服务端,服务端将浏览信息最终存储到HBase;在某学习APP首页点击【我的】->【历史】,会展示用户浏览文章的历史记录。技术介绍服务端的服务是【阅读历史离线服务】,从metaq消费用户阅读文章的信息,解析、处理相关
ThreadLocal全攻略:使用实战,源码分析,内存详解
前言说起ThreadLocal的即便你没有直接用到过,它也间接的出现在你使用过的框架里,比如春天的事物管理,休眠的会话管理,的logback(和log4j的)中的MDC功能实现等。而在项目中,接触的一
面试官:你给我讲一讲,Dubbo暴力停机,消费者是如何感知服务下线的?
重启的服务因为是主动关闭Spring容器,所以有时间也有主动权去告知注册中心“我要下线了”。 但是,对于暴力停机,比如kill -9或者机器宕机,Dubbo服务又是如何通知到注册中心的呢?
聊聊并发编程的12种业务场景
前言并发编程是一项非常重要的技术,无论在面试,还是工作中出现的频率非常高。并发编程说白了就是多线程编程,但多线程一定比单线程效率更高?答:不一定,要看具体业务场景。毕竟如果使用了多线程,那么线程之间的竞争和抢占cpu资源,线程的上下文切换,也是相对来说比较耗时的操作。下面这几个问题在面试中,你
【全网首发】一次jstack 的排查之旅
前言今天阳光明媚,天气真好,奈何是工作日,不然大睡一场,岂不美哉。还残留在昨天的美梦中,突然群内的告警把我拉回了现实,奈何还在车上,不能拿上电脑,疯狂输出。群内告警,接口频繁超时,运维查看了机器情况,超时的接口的应用的CPU,居高不下,如下图好家伙,一大早就给我喂饭,其实这个问题也没什么,
卷向字节码-Java异常到底是怎么被处理的?
你好呀,我是why,你也可以叫我歪歪。比如下面这位读者:他是看了我[《神了!异常信息突然就没了?》](https://mp.weixin.qq.com/s/2A_jhF4a31t8_us8v1zbsQ
代码改成多线程,竟有9大问题
前言很多时候,我们为了提升接口的性能,会把之前单线程同步执行的代码,改成多线程异步执行。比如:查询用户信息接口,需要返回用户基本信息、积分信息、成长值信息,而用户、积分和成长值,需要调用不同的接口获取数据。如果查询用户信息接口,同步调用三个接口获取数据,会非常耗时。这就非常有必要把三个接口调
【全网首发】记一次MySQL CPU被打满的SQL优化案例分析
背景介绍系统中有个公告模块,当用户登录后,根据用户所属机构查询公告列表,同时公告列表中需要展示出该用户对公告的阅读状态及阅读时间。公告(bulletin)、公告接收者(bulletin_receiver)、公告阅读者(bulletin_reader)定义及关联关系如下:应用使用的数据库连接池是
Java Record 的一些思考 - 序列化相关
Record 在设计之初,就是为了找寻一种纯表示数据的类型载体。Java 的 class 现在经过不断的迭代做功能加法,用法已经非常复杂,各种语法糖,各种多态构造器,各种继承设计导致针对 Java 的序列化框架也做得非常复杂,要考虑的情况有很多很多。
Redisson限流器RRateLimiter使用及源码分析
我们分析一下Redisson的限流器RRateLimiter的原理和源码。然后利用Redisson提供的限流器RRateLimiter自定义一个注解,在项目中简化限流器的使用。
面试官:cglib为什么不能代理private方法?
面试常考问题,你知道Spring AOP中的cglib代理方式么?
干货!Java代码优化必知的30个小技巧!
大家好,我是苏三,又跟大家见面了。前言我之前写过两篇关于优化相关的问题:《聊聊sql优化的15个小技巧》和《聊聊接口性能优化的11个小技巧》,发表之后,在全网受到广大网友的好评。阅读量和点赞率都很高,说明了这类文章的价值。今天接着优化这个话题,我们一起聊聊Java中代码优化的30个小技巧,希望
面试官:为什么jdk动态代理只能代理接口实现类?
我们日常业务能够使用jdk动态代理编码的场景非常少,但是我们使用的框架用到jdk动态代理的却非常多,今天结合jdk动态代理源码讲一讲“为什么jdk动态代理只能代理接口?”,先上一个目录: 一、把jdk动态代理跑起来 二、复现问题“jdk动态代理不能代理普通类” 三、深入源码分析 四、结语
HeapDump性能社区Young GC异常问题排查实战案例精选合集
在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务
深坑啊!同一个Spring AOP的坑,我一天踩了两次!
我之前发布过一篇文章《[自定义注解!绝对是程序员装逼的利器!!](https://www.hollischuang.com/archives/5742)》,介绍过如何使用Spring AOP + 自定
Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这篇文章就来聊下 Tomcat 调优,重点介绍下线程池调优及 TCP 半连接、全连接队列调优。To
舒服了,踩到一个关于分布式锁的非比寻常的BUG!
你好呀,我是歪歪。提到分布式锁,大家一般都会想到 Redis。想到 Redis,一部分同学会说到 Redisson。那么说到 Redisson,就不得不掰扯掰扯一下它的“看门狗”机制了。所以你以为这篇文章我要给你讲“看门狗”吗?不是,我主要
Tomcat分析--(一)从架构角度看Tomcat 对应用层协议的支持和底层socket的读写的支持的高内聚低耦合设计
Tomcat分析系列针对于Tomcat版本:9.0.38本文目标:从整体了解Tomcat源码包结构,Tomcat对各个模块如何解耦的,及其各模块怎么组装的,也就是高内聚低耦合。知道各个模块对上层模块提供获取数据的接口API,知道模块内部的入口或者说启动类,知道上层是如何对下层数据做处
硬核 - Java 随机数相关 API 的演进与思考(上)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算法,以及他们的设计思路是什么。本系列会分为两篇,第一篇讲述 Java 随机数算法的演变思路以
想看Dubbo源码?一定要先看一看这一篇!
大家好,我是tin,这是我的第16篇原创文章​ 真正开始深入阅读Dubbo的原理和核心源码前,今天先讲讲Dubbo的一些基本理解
一次java内存top res高排查记录
前言分享一个最近的问题,top 看java进程res不断升高,一天能涨3个G,使用jmap dump内存快照后,dump下来的文件只有300多M,没有发现内存泄漏。这是个什么情况呢,我们深入分析下。冰山一角首先,使用top来查看下当前进程的信息请添加图片描述可以看到top的res占用5
全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判。如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~本篇文章参考了大量文章,文档以及论文,但是这块东西真
性能优化之提升QPS:发现一个Java开源项目优化点,点进来就是你的了
hello,大家好呀,我是小楼。最近无聊(摸)闲逛(鱼)github时,发现了一个阿里开源项目可以贡献代码的地方。不是写单测、改代码格式那种,而是比较有挑战的性能优化,最关键的是还不难,仔细看完本文后,有点基础就能写出来的那种,话不多说,发车!相信大家在日常写代码获取时间戳时,会写出如下
在被线上大量日志输出导致性能瓶颈毒打了很多次之后总结出的经验
由于线上业务量级比较大(日请求上亿,日活用户几十万),同时业务涉及逻辑很复杂,线上日志级别我们采用的是 info 级别,导致线上日志量非常庞大,经常遇到因为日志写入太慢导致的性能瓶颈(各微服务每小时日
“堆外内存”这玩意是真不错,我要写进简历了。
一个服务的各项 JVM 的配置都比较合理的情况下,它的 GC 情况还是不容乐观。
线程池如何监控,才能帮助开发者快速定位线上错误?
大部分情况下,线程池的运行情况对于使用者来说是个黑盒,运行情况不可知,会导致 生产出现事故问题排查困难,以及线程池参数难以定义。文章围绕线程池监控展开,讨论 线程池如何监控、监控的指标以及监控数据的存储展示 01、如何监控运行数据设想一下,如果想监控线程池的运行数据,你会怎么操作?
JVM coredump分析系列(3):JNA 5.10.0升级到5.12.1进程core分析
笔者近期把JNA从5.10.0升级到5.12.1以后,发现进程会core,且hs_error中的堆栈全部是JDK的内部函数,很难分析出和JNA升级的关联。
30万行的框架代码,这样给Dubbo加扩展
Dubbo在国内微服务界的名气不用我说大家应该都知道,它有很多的突出的设计点,其中,扩展机制就是一个。如何给Dubbo自定义加一个扩……
Java性能优化之影响性能的那些细节(二)
Java性能优化之影响性能的那些细节 - 续来了。打算把这个标题整个系列文章,后面慢慢积累慢慢写。这是第一篇入口。这次内容主要来源于《Java程序性能优化实战》这本书,算是一份读书笔记,感兴趣的小伙伴可以阅读下这本书。
Java服务异常排查定位大图
真正的大师永远怀着一颗学徒的心引言研发工程师日常的工作除了开发实现新需求之外,排查定位问题也是重要的组成部分。如果在发生线上故障的时能够快速定位线上bug并且修复bug,不仅是研发工程师技术能力的重要体现,同时也可以帮助线上及时止血避免平台故障进一步蔓延,从而导致影响用户体验或者产生不可挽回的资
基本原理篇:什么是IO,为什么 I/O 会经常被阻塞?
我们应该都知道 socket(套接字),你可以认为我们的通信都要基于这个玩意,而常说的网络通信又分为 TCP 与 UDP 两种,下面我会以 TCP 通信为例来阐述下 socket 的通信流程。 不过在此之前,我先来说说什么叫 I/O。 1. I/O 到底是什么?&nb
Synchronized之轻量级锁自旋骗局
之前笔者分析了synchronized的偏向锁源码,我们今天继续来看synchronized的轻量级锁逻辑。关于轻量级锁,网上有很多说法都是轻量级锁在发生竞争时会进行自旋,但是经过笔者对源码的学习,并没有发现轻量级锁的自旋逻辑。
一次艰难的内存泄露排查,BeanUtils的锅
通过jstat -gcutil pid 5000 ,发现fgc次数很多而且频繁,此时老年代占比已经大约70%左右,且已经回收不了内存,我们这边设置的fgc阈值是老年代的70%
Java反射及性能
现如今的java工程中,反射的使用无处无在。无论是设计模式中的代理模式,还是红透半边天的Spring框架中的IOC,AOP等等,都存在大量反射的影子。我们今天不探讨框架层面的内容,暂且认为90%的框架
Cobar提出的一种在分库场景下对Order By / Limit 的优化
Cobar 虽然是一款“古老”的数据库中间件,但目前不少公司仍然在用它,且它包含了不少有意思的算法和实现,今天就来分享 Cobar 提出的一种在分库场景下对 Order By / Limit 的优化。原算法描述参考:https://github.com/alibaba
gpt被我问得连连认错:cglib还能代理私有方法?
我问gpt,cglib能不能代理私有方法,它说……我说我给你纠正这么多错误,你给我说下明天哪只鸡会涨吧,它给我说
【译】Java中内存泄漏的问题类型,原因和解决方案
20 多年来,Java语言 一直在世界技术市场上占据领先地位。  它的核心优势之一就是自动内存管理机制,比如GC机制,特别是与没有此功能的 C 和 C++ 语言相比。
聊聊ThreadLocal的八个关键知识点
前言大家好,我是捡田螺的小男孩。无论是工作还是面试中,我们都会跟ThreadLocal打交道,今天就跟大家聊聊ThreadLocal的八个关键知识点哈~ThreadLocal是什么?为什么要使用ThreadLocal一个ThreadLocal的使用案例ThreadLocal的原理为什么
8 个线程池最佳实践和坑!使用不当直接生产事故
这篇文章我会简单总结一下我了解的使用线程池的时候应该注意的坑以及一些优秀的实践
【全网首发】一种检测线程阻塞的实现思路
背景介绍在过去处理过的服务故障中,有一类比较典型的场景是业务线程被阻塞(造成阻塞的原因也是多种多样),慢慢导致业务线程池中的全部线程被阻塞,最终造成无法对外提供服务(现象则是CPU、Load、内存等指标都比较低,请求接口后响应超时或者没有响应)。典型的案例:【全网首发】记一次socket re
Java线程池实现原理及其在美团业务中的实践
本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。
太极限了,JDK的这个BUG都能被我踩到
hello,大家好呀,我是小楼。之前遇到个文件监听变更的问题,刚好这周末有空研究了一番,整理出来分享给大家。从一次故障说起我们还是从故障说起,这样更加贴近实际,也能让大家更快速理解背景。有一个下发配置的服务,这个配置服务的实现有点特殊,服务端下发配置到各个服务的本地文件,当然中间经过了一
【全网首发】关于可见性的这个例子,网上 95% 的文章都解释错了!
你好,我是坤哥上周我在查阅资料时无意中搜到一篇解释 volatile 用法的博文,这篇博文排得很靠前,不过很遗憾,虽然结论是对的,但分析过程完全错误,而且我发现网上很多文章都用这个例子来解释 volatile 的用法,但绝大多数的分析过程也是错误的,所以决定写篇博文澄清一下到底怎么回事呢,我们一
从20s优化到500ms,我用了这三招
前言接口性能问题,对于从事后端开发的同学来说,是一个绕不开的话题。想要优化一个接口的性能,需要从多个方面着手。其实,我之前也写过一篇接口性能优化相关的文章《聊聊接口性能优化的11个小技巧》,发表之后在全网广受好评,感兴趣的小伙们可以仔细看看。本文将会接着接口性能优化这个话题,从实战的角度出发,聊
我服了!SpringBoot升级后这服务我一个星期都没跑起来!(上)
最近由于各方面的原因在准备升级 Spring Cloud 和 Spring Boot,经过一系列前置的调研和分析,决定把Spring Boot 相关版本从 2.1.6 升级到 2.7.5,Spring Cloud 相关版本从 Greenwich.SR1 升级为 2021.0.4。升级包含基础的业务
JVM NativeMemoryTracking 分析堆外内存泄露
来源:狐狸糊涂https://my.oschina.net/foxty/blog/1934968Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用
刺激,线程池的一个BUG直接把CPU干到100%了。
你好呀,我是歪歪。给大家分享一个关于 ScheduledExecutorService 线程池的 BUG 啊,这个 BUG 能直接把 CPU 给飚到 100%,希望大家永远踩不到。但是,u1s1,一般来说也很难踩到。到底咋回事呢,让我给你细细嗦嗦。Demo老规矩,按照惯例,先搞个 Dem
从汇编源码看Synchronized还原最真实的偏向锁
本文笔者就从模板解释器汇编源码开始分析还原最真实的偏向锁实现,解释monitorenter字节码命令的方法开始,从汇编代码开始全面解析synchronized。
面试官:AQS实现的锁都是公平锁,对么?
就拿ReentranLock来说,它内部的公平锁与非公平锁的区别在于获取锁是否严格遵循排队顺序
想看kafka源码,跟我一起做 | kafka源码环境搭建
kafka源码超过50万行,设计得不要太好,想看它,就这么简单。
设计模式开发实践(外观、策略、代理)
一、背景  项目组接到新需求,在客运站站务系统窗口售票中,分销城际定制客运班线车票。传统汽车客运站班线客流逐年下滑,在网约车影响和政府政策主导下,传统汽车客运站开始寻求积极的业务转型,深度与城际出行、定制客运出行整合。  既支持传统站务系统班线客运–分销至–定制客运售票,也支持定制客运车票–分销
【全网首发】从一个死锁问题探讨Go和Java的读写锁
hello,大家好呀,我是小楼。最近我又双叒叕写了个BUG,一个线上服务死锁了,不过幸亏是个新服务,没有什么大影响。出问题的是Go的读写锁,如果你是写Java的,不必划走,更要看看本文,本文的重点在于Java和Go的读写锁对比,甚至看完后你会有一个隐隐的感觉:Go的读写锁是不是有BUG?故
【全网首发】定位频繁创建对象导致内存溢出风险的思路
背景介绍近来一段时间排查了几例由于应用程序频繁创建对象导致FGC的问题,问题产生的场景包括:同一条SQL语句,平时返回预期内的数据条数,出问题的时候返回了几十万条数据,短时间内创建了大量对象进而导致非预期的GC。应用程序在处理Excel文件的时候,短时间内创建了大量对象进而导致非预期GC。
【全网首发】JavaAgent寄生在目标进程中引起的ClassNotFoundException
引起ClassNotFoundException异常的原因有很多种,今天我们来介绍一种原因,有因有果有解决方法。
Java 问题排查技术分享
最近翻看以前写的 PPT, 发现了在2019年做的一次技术分享,关于 Java 问题排查,由于没什么公司机密可言,整理下分享给大家~线上问题处理流程直接放PPT截图吧,现在看来依然不过时问题排查可从三个方面入手知识:有些问题,思考一下就有答案,就像传说中多隆那样,回忆下就知
docker容器高性能之文件句柄
前段时间同事遇到了一个容器内文件句柄泄漏的问题,容器内部偶发性出现Too many open files报错。问题是不是来了,主机的文件句柄和容器的文件句柄数有关系吗?是什么关系呢?这就是以下要探究讨论的问题。
【全网首发】Tablestore-OTSClient连接池连接无法复用分析
问题现象某应用在压测过程中,发现OTSClient与OTS服务端之间的TCP连接有大量处于TIME_WAIT状态。查看与OTS服务端进行交互的不同TCP连接状态的数量:netstat -ant | grep 10.4.170.39 | awk '/^tcp/{++state[$NF]};END
一次 RocketMQ 顺序消费延迟的问题定位
问题背景与现象昨晚收到了应用报警,发现线上某个业务消费消息延迟了 54s 多(从消息发送到MQ 到被消费的间隔):```2021-06-30T23:12:46.756 message processi
【译】一个Java UUID生成导致的性能问题和解决方案
Java 开发者们平时经常用 “java.util.UUID#randomUUID()” API 来生成 UUID(通用唯一标识符)编号(即“b8bbcbed-ca07-490c-8711-5118ee0af2f9”)。在某些情况下,用这个API会影响到程序的性能。‘java.util.UUI
面试官:Dubbo服务重启下线,消费者继续调用,都异常了怎么办
在分布式系统中,服务节点重启的时候,消费者流量继续调用该节点,那么这部分调用全部异常,怎么办?
线程池使用不当,一定会踩这10个坑!
前言大家好,我是捡田螺的小男孩。日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。今天田螺哥跟大家聊聊线程池的10个坑。大家看完肯定会有帮助的~线程池默认使用无界队列,任务过多导致OOM线程创建
【全网首发】JVM时区配置-两行代码让我们一帮子人熬了一个通宵
问题描述某产品线应用【A】接收应用【B】发送到MQ的消息,经过业务逻辑处理后,将数据存储到数据库中,近期发现应用【A】数据库表中有些记录的时间比应用【B]数据库表中对应记录的时间少了8个小时。产品线反馈当前线上会断断续续的产生这种异常数据,异常数据量不清楚,估计不算多。分析过程相差整整8小时
Java线程池没用好,系统直接崩溃了...
目录背景介绍线程池的基本工作原理线程池高并发场景下问题剖析线程池高并发场景下性能优化总结背景介绍 大家好,今天给大家讲一个比较偏硬核技术类的知识,就是 Java 线程池在生产项目中的高并发优化。&nbs
Java并发编程解析 | 解析AQS基础同步器的设计思想与实现原理
关健术语本文用到的一些关键词语以及常用术语,主要如下:信号量(Semaphore): 是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用,也是作系统用来解决并发中的互斥和同步问题的一种方法。信号量机制(Semaphores): 用来解决同步/互斥的问题的,它是
【全网首发】chrome自动更新到104版本居然引起Java服务内存泄漏
前言近期在工作中,遇到了一次很有意思的内存泄漏,把排查过程和思路记下来,供大家参考和学习,如有不正确的,欢迎指正。起因最近几天很多半托管客户,突然报连接服务失败,登上服务器后查看内存很高,为了让客户尽快恢复业务,运维同事第一时间选择了重启。重启后,内存肉眼可见的速度涨了上来,研发同事判断后
【全网首发】主线程异常会导致 JVM 退出?
上周线程崩溃为什么不会导致 JVM 崩溃在其他平台发出后,有一位小伙伴留言说有个地方不严谨?主线程崩溃,JVM 并没有崩溃,这是怎么回事, JVM 又会在什么情况下完全退出呢?在 Java 中并没有所谓主线程的概念,只是我们习惯把启动的线程作为主线程而已,所有线程其实都是平等的。
Guava Cache缓存设计原理
Google开源的Java重用工具集库Guava里的一款缓存工具,实现的缓存功能:- 自动将entry节点加载进缓存结构- 当缓存的数据超过设置的最大值时,使用LRU移除- 具备根据entry节点上次
高并发服务优化篇:详解RPC的一次调用过程
只要涉及到分布式服务,就绕不开RPC调用。RPC是什么,我认为大部分同学都能说出个一二三。那么RPC一次调用,到底经历了哪些过程?一直在说RPC耗时优化,那到底时间耗在了哪里? 本篇带大家一起来梳理清
案例分享-被*队友的mybatis蠢哭的一天
昨晚加班的时候被队友拉着看一个mybatis的问题,耗费了我一个小时时间,最后差点没被我打死,实在是觉得滑稽,今天回家写下来跟大伙分享一下。
如何监控 Log4j2 异步日志遇到写入瓶颈
在之前的一篇文章中(一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位),我们详细分析了一个经典的 Log4j2 异步日志阻塞问题的定位,主要原因还是日志文件写入慢了。并且比较深入的分析了 Log4j2 异步日志的原理,最后给出了一些解决方案。
我试图通过这篇文章,教会你一种阅读源码的方式。
啃源码的过程,一定是非常枯燥的,特别是啃自己接触不多的框架源码的时候,千头万绪,也得下手去捋,所以一定要耐得住寂寞才行。调试源码,一定要亲!自!动!手!只是去看相关的文章,而没有自己一步步的去调试源码,那你相当于看了个寂寞。
一次全面的性能优化,从5秒优化到1秒!
前言性能优化,有时候看起来是一个比较虚的技术需求。除非代码慢的已经让人无法忍受,否则,很少有公司会有觉悟投入资源去做这些工作。即使你有了性能指标数据,也很难说服领导做一个由耗时 300ms 降低到 150ms 的改进,因为它没有业务价值。这很让人伤心,但这是悲催的现实。性能优化,通常由有技术
基于JDK源码解析Java领域中的并发锁,我们可以从中学习到什么内容?
写在开头在Java领域中, 尤其是在并发编程领域,对于多线程并发执行一直有两大核心问题:同步和互斥。其中:互斥(Mutual Exclusion):一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。即就是同一时刻只允许一个线程访问共享资源的问题。同步(Sy
当Synchronized遇到这玩意儿,有个大坑,要注意!
你好呀,我是歪歪。前几天在某技术平台上看到别人提的关于 Synchronized 的一个用法问题,我觉得挺有意思的,这个问题其实也是我三年前面试某公司的时候遇到的一个真题,当时不知道面试官想要考什么,没有回答的特别好,后来研究了一下就记住了。所以看到这个问题的时候觉得特别亲切,准备分享给你一
由浅入深理解Java线程池及线程池的如何使用
本文将从总体到细致,来共同探讨线程池。
Java代码审计之不安全的Java代码
在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御。环境搭建https://github.com/j3ers3/Hello-Java-SecSQL注入​ SQLI(SQL Injection), SQL注入是因为程序未能正确对用户的输
关于SimpleDateFormat线程安全问题根因探究
运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面。
Java如何绑定线程到指定CPU上?
 不知道你是啥感觉,但是我第一次看到这个问题的时候,我是懵逼的。而且它还是一个面试题。我懵逼倒不是因为我不知道答案,而是恰好我之前在非常机缘巧合的情况下知道了答案。我感觉非常的冷门,作为一个考察候选者的知识点出现在面试环节中不太合适,除非是候选者主动提起做过这样的优化。而且怕
JVM系列之:JVM如何执行方法调用
背景我们来看一下某个类中这样一段代码:  public static void main(String[] args) {    OverWriteCode object&n
ConcurrentHashMap是如何实现线程安全的
ConcurrentHashMap是怎么做到线程安全的?get方法如何线程安全地获取key、value?put方法如何线程安全地设置key、value?size方法如果线程安全地获取容器容量?底层数据结构扩容时如果保证线程安全?初始化数据结构时如果保证线程安全?并发效率是如何提高的?
单服务并发出票实践
一、背景 项目组上线集团客运站系统,该集团旗下六家客运站,每日出票量在1万~2万张左右(疫情期间票量下滑)。前期系统只能部署在一台单服务器上,应用程序与数据库(mysql)同服。 客运站出票业务有两大特点,一是出票渠道分散(人口窗口、自助设备、线上各分销渠道均支持出票);二是出票时间集中,全天出
Java性能:如何保证高并发下接口的幂等性?
前言接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景:1、有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只
社招两年半10个公司28轮面试面经
个人情况学历:二本工作年限:2
虽然是我遇到的一个棘手的生产问题,但是我写出来之后,就是你的了。
这个案例就是一个纯技术的问题导致的,和业务的相关度其实并不大,所以你拿过去直接添油加醋,稍微改改,往自己的服务上套一下,那就是你的了。
JAVA使用CompletableFuture实现流水线并行处理,加速你的接口响应
关于JAVA中CompletableFuture的使用,以及并行编程相关的内容.
接口超时,到底如何处理
导语:当前互联网的系统几乎都是解耦隔离后,会存在各个不同系统的相互远程调用。调用远程服务会有三个状态:成功,失败,或者超时。前两者都是明确的状态,而超时则是未知状态。我们转账超时的时候,如果下游转账系统做好幂等控制,我们发起重试,那即可以保证转账正常进行,又可以保证不会多转一笔。所以掌握幂的用法非
HikariCP这波性能优化,太炸裂了!
你好呀,我是why。 不是,这不是我。我还年轻,也比他帅。 这是今天文章的主人公。 他叫做 Brett Wooldridge,你应该是不认识的。 但是我把他的 github 截图给你看看
【全网首发】聊聊那些年遇到过的奇葩代码
引言无论是开发新需求还是维护旧平台,在工作的过程中我们都会接触到各种样式的代码,有时候会碰到一些优秀的代码心中不免肃然起敬,但是更多的时候我们会遇到很多奇葩代码,有的时候骂骂咧咧的吐槽一段奇葩代码后定睛一看作者,居然是几个月以前自己的写的,心中难免浮现曹操的那句名言:不可能,绝对不可能。很多同学可
【全网首发】解Bug之路-应用999线升高
某应用的999线突然升高。由于是个QPS高达几十万的查询服务,1分钟的升高就会影响数千个请求。初步判断应用容量不够,直接进行相关扩容,扩容后反而加剧了问题!
我在新公司做的第一个技术优化
你好,我是yes。我相信大部分人到新公司都会有阵痛,不管是环境的改变、流程的不适、新同事的磨合还是项目上的熟悉。关于这方面的我到时候再写一篇文章,今天来盘盘我看到的项目里面的一个小小优化点。起因入职后比较重要一点就是快速上手项目,也就是熟悉需求以及代码,作为一个新人我肯定是能毫无感情的发现项
聊聊接口性能优化的11个小技巧
大家好,我是苏三,又跟大家见面了。前言接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。该问题说简单也简单,说复杂也复杂。有时候,只需加个索引就能解决问题。有时候,需要做代码重构。有时候,需要增加缓存。有时候,需要引入一些中间件,比
【全网首发】记一次SSL握手导致业务线程阻塞的案例分析
问题描述产品线反馈RocketMQ某Group ID出现消息堆积,重启后正常,一段时间后再次堆积,近期堆积问题出现的频次有些高,希望能够分析解决下
Redis——由分布式锁造成的重大事故
前言基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!
小心 MybatisPlus 的一个坑与面试题
昨天测试说有个 xx 功能用不了,扔给我一个截图,说有报错:报错信息就是:Transaction rolled back because it has been marked as rollback-only,很好理解:事务被回滚了,因为它已经被标记了只能回滚。
数据结构:“答应我,别再逃避我了好吗?”
大型互联网的高并发、高性能、高可用系统,对技术要求越来越高,我们引入各种中间件,这些中间件底层涉及到的各种数据结构和算法,是其核心技术之一
【全网首发】一次 Java log4j2 漏洞导致的生产问题
一、问题近期生产在提交了微信小程序审核后(后面会讲到),总会出现一些生产告警,而且持续时间较长。我们查看一些工具和系统相关的,发现把我们的 gateway 差不多打死了。 有一些现象。网关有很多接口处理慢。网关健康检查不通过,发生重启。前面我们提到是微信小程序审核后,为什么我们觉得是和这
一文详解JDK中的ThreadLocal(全网最透彻易懂)
一文详解JDK中的ThreadLocal(全网最透彻易懂) 1 ThreadLocal概述​ ThreadLocal 提供了一种变量与线程绑定的机制,通常把这种机制称为线程本地变量,在线程调用栈(方
对不起,我错了,这题不简单!
hello,大家好呀,我是小楼。前几天不是写了这篇文章《发现一个开源项目优化点,点进来就是你的了》嘛。文章介绍了Sentinl的自适应缓存时间戳算法,从原理到实现都手把手解读了,而且还发现Sentinel-Go还未实现这个自适应算法,于是我就觉得,这简单啊,把Java代码翻译成Go不就可以混
记一次线程池调优经历
原文链接:https://www.cnblogs.com/superfj/p/8313469.html作者:Janti 背景最近的一个项目需要用到招标,临时加了给我们的系统增加了一个性能需求,多少呢?
腾讯云和阿里云tcp三次握手的区别
前言近日同事遇到一个诡异的问题,帮忙进行了排查,好家伙不查不知道,一查让我知道了,腾讯云和阿里云TCP三次握手居然还有差异,没有想到云厂商这种Iass级别的服务,还有不同的标准~问题现象•客户是半托管客户,我们部署服务请求阿里云的nginx,nginx作为LB,反向代理了N个java
为什么我建议线上高并发量的日志输出的时候不能带有代码位置
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判。如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~本文是“为什么我建议”系列第
【译】Java HashMap的内部实现原理
HashMap 是Java 中用于存储键值对的数据结构,其中get()和put()操作的平均检索时间是恒定的,即O(1)。
你一定要知道的保证线程安全的10个小技巧
大家好,我是苏三,又跟大家见面了。导语对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题。线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题。比如:变量a=0,线程1给该变量+1,线程2也给该变量+1。此时,线程3获取a的值
99%的Java程序员会踩的6个坑
大家好,我是苏三,又跟大家见面了。前言作为Java程序员的你,不知道有没有踩过一些基础知识的坑。有时候,某个bug,你查了半天,最后发现竟然是一个非常低级的错误。有时候,某些代码,这一批数据功能正常,但换了一批数据就出现异常了。有时候,你可能会看着某行代码目瞪口呆,心里想:这行代码为什么会出错?
zookeeper恢复了,线上微服务却全部掉线了,怎么回事?
注册中心zookeeper重启恢复后,线上微服务却全部掉线了,怎么回事?!最近因为一次错误的运维操作,导致线上注册中心zk被重启。而zk重启后发现所有线上微服务开始不断掉线,造成了持续30分钟的P0故障。
【译】Java:对象重用如何降低延迟并提高性能
通过阅读本文熟悉对象重用的艺术,并了解多线程 Java 应用程序中不同重用策略的优缺点。它能让你以更少的延迟编写更高性能的代码。虽然在 Java 等面向对象语言中使用对象提供了一种抽象复杂性的极好方法,但频繁的对象创建可能会带来内存压力和垃圾收集方面的不利影响,这将对应用程序的延迟和性能产生不利影
堆内存OOM泄露-mat工具分析实践
线上程序在运行几天后,服务无法访问。查看日志,发现程序出现OutOfMemory 异常。
JDK 19 Virtual Threads 虚拟线程
前言JDK 19 支持了virtual thread(虚拟线程):JEP 425: Virtual Threads (Preview),虚拟线程是 Loom 项目中的一个重要特性。Project LoomLoom 是什么?Loom 项目的目标是提升 Java 的并发性能。Java 自诞生就提
深度长文:Java 读写锁 ReentrantReadWriteLock 源码分析
读写锁 ReentrantReadWriteLock 的源码分析,基于 Java7/Java8。
JAVA中计算两个日期时间的差值竟然也有这么多门道
上半年春招的时候,作为面试官,对于面试表现的
【全网首发】记一次socket read导致业务线程阻塞的案例分析
问题描述TAM同学反馈某个应用阻塞了:访问应用健康检查URL也访问不通,目前排查了EDAS、SLB及WAF等云产品均没有发现明显问题。我登录到ECS,curl健康检查URL,确实已经访问不通了(建立连接超时)。基本情况流量是从互联网终端请求过来的,最终经过云产品SLB负载均衡到该应用,该应用
一次大量出现Full GC、内存泄漏问题及内存溢出错误排查和分析
导读:老是出现堆内存不足,大量Full GC深知出现内存溢出应该怎么办,怎样通过排查找到源头分析来解决问题? 正文:我们有个新服务上线运行一段时间后,老是出现堆内存不足,大量出现 Full GC,有些实例甚至出现内存溢出错误: java.lang.OutOfMemor
硬核 - Java 随机数相关 API 的演进与思考(下)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算法,以及他们的设计思路是什么。本系列会分为两篇,第一篇讲述 Java 随机数算法的演变思路以
图解并发包中锁的通用实现
阅读完本篇文章,你将了解到:抽象同步器AQS的实现原理、ReentrantLock实现原理、非公平锁和公平锁实现的区别;基于这些内容,您也可以自己进一步探索可中断锁的实现原理、AQS的核心是state字段以及双端等待队列、如何优雅的中断一个线程
一场因OpenJDK引发的血案 之JavaFx
案发现场最近做了个项目,本地调试通过了,可在服务器上部署时却编译失败,报错如下编译失败的原因是缺少javafx.util。package javafx.util does not exist原因分析查看代码,是因为使用了javafx.util中的Pair类那为什么本地可以编译通
Java代码是如何被CPU狂飙起来的?
无论是刚刚入门Java的新手还是已经工作了的老司机,恐怕都不容易把Java代码如何一步步被CPU执行起来这个问题完全讲清楚。但是对于一个Java程序员来说写了那么久的代码,我们总要搞清楚自己写的Java代码到底是怎么运行起来的。
Java并发编程解析 | 基于JDK源码解析Java领域中的并发锁,我们需要特别关注哪些内容?
写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。<br />主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题:线程之间内存共享,需要通过加锁进行控制,但是加锁会导致性能下降,同时复
调优 mybatis saveBatch 25倍性能
最近在压测一批接口,发现接口处理速度慢的有点超出预期,感觉很奇怪,后面定位发现是数据库批量保存这块很慢。
聊一聊Java异常:JVM是如何捕获异常原理和实例分析
异常的基本概念在 Java 语言规范中,所有异常都是 Throwable 类或者其子类的实例。Throwable 有两大直接子类。Throwable 是所有异常的根,java.lang.ThrowableError 是错误,java.lang.ErrorException 是异常,j
一次应用程序间歇性出现HTTP 502坏网关错误的排查过程
在这篇文章中我们来探讨应用程序在亚马逊网络服务(AWS)的Elastic Beanstalk(EBS)服务上运行,此应用程序会间歇性地出现HTTP 502坏网关错误。这篇文章详细的介绍了应该如何对Elastic Beanstalk服务中的HTTP 502坏网关错误进行故障排除和故障解决。关于AWS
Gson 核心流程源码与对应设计模式浅析
​ 本文分析了Gson在处理序列化与反序列化流程中核心类TypeAdapter相关的源码,介绍了其中采用的适配器设计模式、工厂方法设计模式、代理设计模式。Gson#getAdapter获取TypeAdapter的时采用的代理设计模式是非常的精妙,可以多次细品。
深入理解 Spring 事务原理
大家好,我是树哥。Spring 事务是复杂一致性业务必备的知识点,掌握好 Spring 事务可以让我们写出更好地代码。这篇文章我们将介绍 Spring 事务的诞生背景,从而让我们可以更清晰地了解 Spring 事务存在的意义。接着,我们会介绍如何快速使用 Spring 事务。接着,我们会介绍 S
【译】java.lang.System.getProperty() 的性能影响和解决方法
‘java.lang.System.getProperty()’ 是 Java 开发人员用来读取在程序启动期间配置系统属性的通用 API。当你将“-DappName=buggyApp”作为应用程序的启动JVM 参数传递时,可以通过调用“java.lang.System.getProperty()”
聊聊Spring事务控制策略以及@Transactional失效问题避坑
大家好,又见面了。在大部分涉及到数据库操作
CPU性能优化干货总结
通过压力测试并配合监控系统,以QPS、RPS、接口响应时间、接口成功率、SQL耗时、JVM运行情况、CPU和内存运行情况等数据指标为依据,找出系统中存在的性能瓶颈。
【全网首发】SSL Session默认设置导致线程阻塞了几十秒的案例分析
SSLContext sessionCacheSize&sessionTimeout避坑指南,看着社区内还没有类似的案例,分享出来以避免不慎掉坑
【全网首发】关于RocketMQ Producer某个性能优化点的分析
背景介绍在上一篇文章【一次RocketMQ ons Bug导致消息不断堆积到重试队列的案例分析】,我们有提到为了优化Producer性能问题对Pandora进行了升级,升级后出现了问题。下面我们对Producer的这个优化点进行下分析记录。问题描述SLB(LVS+TEngine)在云平台的重要
同事改Bug飞快,原来掌握了这些代码Debug技巧
引言代码Debug调试是研发工程师日常工作中必不可少的重要组成部分。进行代码Debug调试的目的无非就两个,一个是自我检查代码逻辑是否有问题,便于自己将Bug消灭在测试介入之前;另一个是进行线上问题排查定位,找到实际在跑业务的过程中出现的Bug。但是无论是哪个目的,高效率的进行代码Debug调试必
我试图通过这篇文章告诉你,这行源码有多牛逼。
这次给你盘一个特别有意思的源码,正如我标题说的那样:看懂这行源码之后,我不禁鼓起掌来,直呼祖师爷牛逼。
填坑来了!关于“Thread.sleep(0)这一行‘看似无用’的代码”里面留下的坑。
我只是给你指个路,剩下的路就要你自己走了,天黑路滑,灯火昏暗,小心脚下,不要深究,及时回头,阿弥陀佛!
JAVA中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器
容器设计是项目编码中非常常见的一个场景,本文从项目中习以为常的一些场景作为切入点,聊一聊容器设计的一些思考、聊一聊元素遍历的思路、以及身为设计模式之一的迭代器模式。
【面试必备】我跟面试官聊了一个小时线程池!
大家好,这篇文章主要跟大家聊下 Java 线程池面试中可能会问到的一些问题。全程干货,耐心看完,你能轻松应对各种线程池面试。相信各位 Javaer 在面试中或多或少肯定被问到过线程池相关问题吧,线程池是一个相对比较复杂的体系,基于此可以问出各种各样、五花八门的问题。若你很熟悉线程池,如果可以,
【译】什么是线程dump文件,我们又该如何分析?
让我们谈谈线程转储,以及如何分析它。我们还将讨论它如何帮助查明问题以及您可以使用的一些分析器。什么是线程?进程是加载到计算机内存中并正在执行的计算机程序。它可以由一个处理器或一组处理器执行。进程在内存中被描述为具有重要信息,例如变量存储、文件句柄、程序计数器、寄存器和信号等。一个进程可以
一文读懂|栈溢出攻击
什么是栈简单来说,栈 是一种 LIFO(Last In Frist Out,后进先出) 形式的数据结构。栈一般是从高地址向低地址增长,并且栈支持 push(入栈) 和 pop(出栈) 两个操作。如下图所示:push&nbs
【全网首发】优雅上下线之如何安全的关闭Tomcat持久连接
为了保证应用在下线的时候尽可能少的丢失流量,我们期望达到以下两个目标:在停止应用之前,所有新的请求不再发送到该应用上(本次分析的问题)在停止应用之前,应用正在处理的请求能够完整的处理
讲透JAVA Stream的collect用法与原理,远比你想象的更强大
本篇文章就来专门剖析collect操作,一起解锁更多高级玩法,让Stream操作真正的成为我们编码中的神兵利器。
这次调优横跨java和Groovy(SimpleTemplateEngine)
一、前言最近给客户调优过程中,频繁遇到java调用groovy的情况,在排查过程中也发现了一些相关的性能瓶颈。其中比较突出的是调用groovy api时导致的频繁类加载问题,就这个问题在本地模拟了客户
夯实Java基础,一篇文章全解析线程问题
1. 线程是什么操作系统支持多个应用程序并发执行,每个应用程序至少对应一个进程 ,彼此之间的操作和数据不受干扰,彼此通信一般采用管道通信、消息队列、共享内存等方式。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程,提高了CPU利用率。有了进程,为什么还要线程?因为进程的成本太高了。启动
JVM系列之:宏观分析Java代码是如何执行的
前言作为一名 Java 程序员,平日里都是和 Java 代码打交道,但是仅限于使用,比如说使用 Java 核心类库,以及调用第三方类库里的 API。凭借上述“本事”便可以专注于实现具体业务,并且依赖 Java 虚拟机自动执行乃至优化我们的应用程序。那么自己就仅限于此了
完了完了!线上发生 OOM 了!
先从监控链路分析了一波,发现请求是已经打到服务上了,处理之前不知道为什么等了 3s,猜测是不是机器当时负载太大了,通过 QPS 监控查看发现,在接口慢的时候 CPU 突然增高,同时也频繁的 GC ,并且时间很长,但是请求量并不大,并且这台机器很快就因为 Heap满了而被下掉了。
一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位
问题现象线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的操作。这种情况断断续续持续了半小时左右。 核心问题定位由
深入理解 Spring Cloud Gateway 的原理
你好,我是悟空。本篇给大家带来的是微服务框架中非常重要的一个组件:API 网关。本文已收录至《深入剖析 Spring Cloud 底层架构原理》,已更新 16 讲。前言在 PassJava 项目中,我用到了 Spring Cloud Gateway 作为 API 网关,客户端的所有的请求都
顶级Java才懂的,长尾请求hack工具!
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。在很久很久之前,有两篇关于JMH的文章。如果你做过性能优化,对于它自然是再熟悉不过。JMH屏蔽了一些环境的差异,可以让狗子们快速的获取吞吐量、平均响应时间等关键性指标。但是,性能的评测标准并不仅仅是单个维度。比起那
【全网首发】稳定运行了多年的网关,偏偏让我掉进了坑
背景介绍在服务刚启动的时候,服务的运行状态并没有达到最佳,如果一下子将流量提升到日常运行的状态,会存在大量的请求超时。为什么服务刚启动的时候,服务不是最佳状态呢?Java应用类加载是按需加载的,在服务刚启动的时候,只会加载启动过程中需要的类;当服务接口被调用的时候,才会加载、初始化接口用到的
手摸手 Spring Cloud Gateway + JWT 实现登录认证
你好,我是悟空。前言上篇我已经讲解了 Spring Cloud 的原理和实战,这次就要结合 JWT 来实现登录认证的功能了。本文已收录至《深入剖析 Spring Cloud 底层架构原理》,已更新 17 讲。目录通过本文你会掌握以下知识点:如何用认证服务做登录认证。如何生成 JWT
重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来
作为缓存系列专栏内容,秉持着不重复造轮子的理念,本篇文章中我们就开始深入剖析JAVA本地缓存的优秀轮子 —— 来自Google家族的Guava Cache。聊一聊其实现机制、看一看如何使用。
排查死锁的 4 种工具,秀~
死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。死锁示例接下来,我们先来演示一下 Java 中最简单的死锁,我们创建两个锁和两个线程,让线程 1 先拥有锁 A,然后在 1s 后尝试获取锁 B,
千万不要再这样创建集合了!极容易内存泄露!
由于Java语言的集合框架中(collections, 如list, map, set等)没有提供任何简便的语法结构,这使得在建立常量集合时的工作非常繁琐。每次建立时我们都要做:1、定义一个空的集合类
获取异常信息里再出异常就找不到日志了,我人傻了
最近组里用第三方给的 SDK 搞了点开发,最近线上突然开始报错,并且发现一个特别奇怪的问题,组员和我说,代码运行到一半不走了,跳过了一段(这代码是刚参加东奥会参加跳远么???)。代码如下,逻辑非常简单
【译】Java 并发处理的5种常见方法
介绍了在基于 Java 的应用程序中的5种处理并发的方法。

有开始,就会有进​步!

在追求性能的道路上,记录每一刻的成长!源码解读,编程技巧,外文翻译,技术实践,线上案例等等,记录自己,启发他人!

专家作者推荐

巡山小汪

关注微信公众号《解Bug之路》,有问题请在公众号中咨询:) 无论多么艰苦的时刻,都不要忘记,辉煌的未来,在你的眼中闪耀!

飞哥开发内功

《深入理解Linux网络》作者,腾讯搜狗十年工程师,公众号「开发内功修炼」作者!

踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

Brand

搜索关注微信公众号【架构与思维】:撰稿者为bat、字节的几位高阶研发/架构,专注技术分享。

专题推荐

本系列文章主要针对Dubbo2.6.2(dubbox2.8.4)版本,从源码的角度分析Dubbo内部的实现细节,加深对Dubbo的各配置参数底层实现原理的理解,更好的指导Dubbo实践。
14篇文章29067阅读量
在我们日常开发中常常会有一些CPU资源占用过高的问题,这些问题往往会导致我们系统运行的缓慢,甚至造成系统的奔溃,那我们如何进行这种问题的定位及性能优化呢?
 
本期的专题就为大家带来Linux CPU性能调优的原理。 特别针对Java程序遇到高CPU的高级进阶及调优实战!深入的理解CPU占用率较高的问题,希望对大家的平时的工作会有所帮助,也欢迎在下面留言你想了解的CPU 的话题。
6篇文章13008阅读量