文章分类 -  JAVA 优化

摘要:相信大家应该还记得我们最早做这个JVM优化实战专栏的初衷,因为国内绝大多数的Java工程师对JVM这块知识的学习,总是停留在一些理论的层面 从没有人系统化的告诉你,JVM到底应该如何做优化。 网上也只有一些看不太明白的博客分享少数人自己的JVM优化经验,但是很多新手面对这些优化博客往往只能看到表面, 阅读全文
posted @ 2020-03-26 14:38 klvchen 阅读(501) 评论(0) 推荐(0)
摘要:案例背景 首先说一下案例背景,线上有一个数据同步系统,是专门负责从另外一个系统去同步数据的,简单来说,另外一个系统会不停的发布自己的数据到Kafka中去,然后我们有一个数据同步系统就专门从Kafka里消费数据,接着保存到自己的数据库中去,大概就是这样的一个流程。 我们看下图,就是这个系统运行的一个流 阅读全文
posted @ 2020-03-26 14:04 klvchen 阅读(781) 评论(0) 推荐(0)
摘要:案例背景引入 公司里有一个非常正常的线上的服务,采用的是 Web 系统部署在 Tomcat 中的方式来进行启动的。 但是有一段时间,我们突然收到一些反馈,说是这个服务非常的不稳定,经常会出现访问这个服务的接口的时候出现服务的假死问题。 一旦出现这种接口调用时服务假死的情况,相当于我们的这个服务就完全 阅读全文
posted @ 2020-03-26 13:48 klvchen 阅读(726) 评论(0) 推荐(0)
摘要:案例背景引入 今天的案例背景是一个每天10亿数据量的日志清洗系统,这个系统做的事情其实非常的简单,他主要就是从Kafka中不停的消费各种日志数据,然后对日志的格式进行很多清洗,比如对一些涉及到用户敏感信息的字段(姓名、手机号、身份证号)进行脱敏处理,然后把清洗后的数据交付给其他的系统去使用。 比如推 阅读全文
posted @ 2020-03-20 17:49 klvchen 阅读(607) 评论(0) 推荐(0)
摘要:案例背景 这个案例也是我们线上曾经出现过的一个真实的生产案例,是一个年轻的工程师在使用mybatis写SQL语句的时候在某些情况下允许不加where条件就可以执行,结果导致一下子查询出来上百万条数据引发了系统的OOM。 这个案例本身是属于比较简单的那种,不涉及太多其他的技术问题,的确就是纯系统代码自 阅读全文
posted @ 2020-03-17 13:47 klvchen 阅读(571) 评论(0) 推荐(0)
摘要:背景 这个OOM的案例是发生在微服务架构下的一次RPC调用过程中的,也是一次非常奇怪的故障案例 大家应该还记得昨天的文章里讲的一个解决系统OOM故障的核心能力积累,你必须对你线上系统使用的各种技术,从服务框架,到第三方框架,到Tomcat/Jetty等Web服务器,再到各种底层的中间件系统,对他们的 阅读全文
posted @ 2020-03-12 14:53 klvchen 阅读(1002) 评论(0) 推荐(0)
摘要:案例发生现场 有一天突然收到线上的一个报警:某台机器部署的一个服务突然之间就不可以访问了。 此时第一反应当然是立马登录上机器去看一下日志,因为服务挂掉,很可能是OOM导致的崩溃,当然也可能是其他原因导致的问题。 这个时候在机器的日志中发现了如下的一些信息: 过多的日志信息给省略掉了,因为都是非常杂乱 阅读全文
posted @ 2020-03-11 14:06 klvchen 阅读(1917) 评论(2) 推荐(0)
摘要:系统发生OOM的生产现场 我们从系统发生OOM的生产现场开始说起,某一天突然收到线上系统的一个报警,说这个系统发生了异常 因此我们立马登录到系统的线上机器去查看对应的日志,在这里插一句,大家记住一点,一旦你收到系统OOM的报警,或者是有人突然反馈说你负责的线上系统崩溃了,第一件事情:一定是登录到线上 阅读全文
posted @ 2020-03-10 14:19 klvchen 阅读(1203) 评论(0) 推荐(0)
摘要:栈内存溢出能依托之前的办法解决吗? 首先大家思考一个问题:栈内存溢出能按照之前的方法解决吗? 也就是说,GC日志、内存快照,这些东西对解决栈内存溢出有帮助吗? 首先明确一点,栈内存溢出跟堆内存是没有关系的,因为他的本质是一个线程的栈中压入了过多方法调用的栈桢,比如几千次方法调用的几千个栈桢。 此时就 阅读全文
posted @ 2020-03-09 14:45 klvchen 阅读(664) 评论(0) 推荐(0)
摘要:解决OOM问题的一个初步思路 首先第一个问题,假设发生OOM了,必然说明系统中某个区域的对象太多了,塞满了那个区域,而且一定是无法回收掉那些对象,最终才会导致内存溢出的。 既然是这个思路,要解决OOM的话,首先就得知道到底是什么对象太多了最终导致OOM的? 所以你想知道什么对象太多导致OOM的,就必 阅读全文
posted @ 2020-03-09 14:24 klvchen 阅读(7895) 评论(0) 推荐(1)
摘要:最佳的解决方案 我们先给大家说一种最佳的OOM监控方案,其实说白了也很简单,之前一直给大家强调,公司最好是应该有一种监控平台,比如Zabbix、Open Falcon之类的监控平台。 如果有监控平台的话,就可以接入系统异常的一些监控和报警,你可以设置一旦系统出现了OOM异常,就发送报警给对应的开发人 阅读全文
posted @ 2020-03-03 14:19 klvchen 阅读(2432) 评论(1) 推荐(0)
摘要:一个超大数据量处理系统是如何不堪重负OOM的 大家是否还记得我们不止一次提过的一个超大数据量的计算引擎系统?这个系统是我们自己研发的一个非常复杂的PB级数据计算系统,远比很多流行的开源技术要强悍,架构上也非常复杂,同时处理的数据量也特别大。 首先用最最简化的一张图给大家解释系统的工作流程。简单来说, 阅读全文
posted @ 2020-03-03 14:12 klvchen 阅读(189) 评论(0) 推荐(0)
摘要:无限制的调用方法是如何让线程的栈内存溢出的? 一个线程调用多个方法的入栈和出栈 下图是一个相对较为完整的JVM运行原理图,如下所示: 看下面的代码: 按照我们之前所说的,JVM启动之后,HelloWorld类被加载到了内存里来,然后就会通过main线程执行main()方法 此时在main线程的虚拟机 阅读全文
posted @ 2020-03-03 13:46 klvchen 阅读(316) 评论(0) 推荐(0)
摘要:普通4核8G服务器配置JVM模板 参数|说明 : |: Xms4096M|最小堆内存 Xmx4096M|最大堆内存 Xmn3072M|新生代内存 Xss1M|每个线程的栈内存大小 XX:MetaspaceSize=256M|元数据大小 XX:MaxMetaspaceSize=256M|元数据最大大小 阅读全文
posted @ 2020-01-21 15:28 klvchen 阅读(162) 评论(0) 推荐(0)
摘要:Metaspace区域是如何因为类太多而发生内存溢出的 Metaspace区域是如何触发内存溢出的? 好,我们通过之前的学习都知道,在启动一个JVM时是可以设置很多参数的,其中有一些参数就是专门用来设置Metaspace区域的内存大小的,大家如果有遗忘的回顾一下之前的文章即可。 如下两个参数就是用来 阅读全文
posted @ 2020-01-09 14:17 klvchen 阅读(257) 评论(0) 推荐(0)
摘要:作为 Java 程序员而言,先不考虑自己系统外部依赖的缓存、消息队列、数据库等等东西挂掉,就我们自己系统本身而言,最常见的挂掉的原因是什么? 其实就是系统OOM,也就是所谓的内存溢出! 什么是内存溢出?在哪些区域会发生内存溢出? 运行一个 Java 系统就是运行一个JVM进程 首先的话呢,大家得先搞 阅读全文
posted @ 2020-01-09 14:05 klvchen 阅读(611) 评论(0) 推荐(0)
摘要:阶段性复习:JVM运行原理和GC原理你真的搞懂了吗 JVM和GC的运行原理 JVM的内存区域划分,最核心的就是这么几块了:年轻代、老年代、Metaspace(也就是以前的永久代)。 其中年轻代又分成了Eden和2个Survivor,默认比例是8:1:1,如下图 接着我们来思考一下,我们写好的系统会不 阅读全文
posted @ 2020-01-09 13:56 klvchen 阅读(431) 评论(0) 推荐(0)
摘要:案例实战:一次线上大促营销活动导致的内存泄漏和Full GC优化 线上故障场景 先简单说一下业务背景:一次我们线上推了一个大促销活动,大致就是类似于在某个特定节日里,突然给所有用户发短信、邮件、APP Push消息,说现在有个特别优惠的活动,如果参与的话肯定可以得到很大的实惠! 这类大促活动一般都会 阅读全文
posted @ 2019-12-27 14:24 klvchen 阅读(309) 评论(0) 推荐(1)
摘要:案例实战:新手工程师不合理设置JVM参数,是如何导致频繁Full GC的 问题的产生 一般中大型公司都是接入类似Zabbix、OpenFalcon或者公司自研的一些监控系统的,监控系统一般都做的很好,可以让你的系统直接接入进去,然后在上面可以看到每台机器的CPU、磁盘、内存、网络的一些负载。而且可以 阅读全文
posted @ 2019-12-16 13:40 klvchen 阅读(275) 评论(0) 推荐(0)
摘要:案例实战:每秒十万QPS的社交APP 如何优化GC性能提升3倍 案例背景 本案例的背景是一个有高峰期每秒十万QPS的社交APP,QPS 的英文全称就是 “Query Per Second”,也就是每秒钟的查询数量,大致可以理解为是APP每秒钟的访问数量。 可以用下面一幅图来让大家了解一下这个社交AP 阅读全文
posted @ 2019-12-12 14:08 klvchen 阅读(305) 评论(0) 推荐(0)