线上(生产)问题解决
文章平均质量分 63
AlbenXie
这个作者很懒,什么都没留下…
展开
-
Java启动参数、调优及分析
java启动参数共分为三类;其一是(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;一、标准参数参数描述-client设置jvm使用client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者PC应用开发和调试-server。转载 2023-06-30 21:22:22 · 1810 阅读 · 0 评论 -
一次Full GC导致CPU飙升的排查过程
我们决定调整jvm参数,扩大内存,修改jvm垃圾收集器,扩大内存后,后面还是出现了该问题,不过这次只是cpu飙升,系统没有出现卡顿,出现问题后,我们使用如下命令,查看jvm堆内存快照,线程堆栈,等信息。因为这次调整了堆内存大小,触发问题后,没有进行full gc,对象还在,查看内存对象占用比,发现相关代码问题,一次性加载了150万的实例到对象中,调整内存之前加载该对象后,导致内存飙升,触发gc,进而引起cpu使用率飙升。从监控看到,cpu,内存,磁盘,网络在异常发生时都有明显的抖动。转载 2023-05-04 21:35:28 · 1010 阅读 · 0 评论 -
性能优化-内存泄漏、内存溢出、cpu占用高、死锁、栈溢出、FullGC频繁检测手段-总结与分享
含义:内层溢出通俗理解就是内存不够,程序要求的内存超出了系统所能分配的范围。危害:内存溢出错误会导致处理数据的任务失败,甚至会引发平台崩溃等严重后果。应用程序CPU使用率高,甚至超过100%死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。Java 里的 StackOverflowError。抛出这个错误表明应用程序因为深递归导致栈被耗尽了。转载 2023-05-04 21:27:01 · 1524 阅读 · 0 评论 -
java程序CPU使用率高可能的原因
在Java并发编程计算密集型要进行大量的计算、逻辑判断等操作,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数,我们设置线程数一般是:计算机核数n+1。计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的脚本语言运行效率很低,完全不适合计算密集型任务。原创 2023-05-04 20:53:23 · 4653 阅读 · 0 评论 -
Java 定位导致CPU飙升的代码过程
线上的一个日志实时输出的程序曾经出过这样一个问题,刚开始上线java程序占用的CPU的资源很少,但是到了整点的时候,CPU直线飙高,直接到达100%根本没有要下降的趋势,唯一的方法只能杀掉它了,后面在借助jstack与top排查到线程然后定位到某行代码出的问题。转载 2023-05-04 20:24:05 · 148 阅读 · 0 评论 -
JVM调优工具使用手册
上面介绍到的各个命令,都是JDK提供给我们的最基础的调优工具,如果还有功能更好的,那也是基于上面的基础功能进行开发封装。所以我们只要理解会用上面的各个命令,调优也不是什么问题。转载 2023-04-23 10:34:45 · 92 阅读 · 0 评论 -
全链路压测降低 rt之路
最近在进行全链路压测,实际负责订单相关接口。转载 2023-04-23 10:23:11 · 259 阅读 · 0 评论 -
线上排查:内存异常使用导致full gc频繁
本次问题产生的根本原因是因为开启了@EnableCircuitBreaker注解,开启了Hystrix指标功能,导致Histogram实例大量进入老年代,只有full gc才可以回收。转载 2023-04-21 17:05:53 · 283 阅读 · 0 评论 -
logback配置
<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="./logs"/> <property name="APP_NAME" value="benefits-core"/> <pr.原创 2022-05-27 22:51:00 · 169 阅读 · 0 评论 -
Fastjson 1.2.80 及之前版本中反序列化漏洞
修复建议:1.升级到最新版本1.2.83,下载链接:Release FASTJSON 1.2.83版本发布(安全修复) · alibaba/fastjson · GitHub2.升级到 Fastjson v2,Fastjson v2地址:https://github.com/alibaba/fastjson2/releases原创 2022-05-26 15:16:55 · 1530 阅读 · 0 评论 -
HTTP503错误
HTTP503错误——服务不可用 (Service unavailable)介绍因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket)连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。HTTP 循环中的 503 错误任何客户端 ( 例如您的浏览器或我们的 CheckUpDown 机器人 ) 在和您的网络服务器通讯时,都需经过以下循环:转载 2022-04-08 19:53:42 · 3115 阅读 · 0 评论 -
JVM -Xms -Xmx -Xmn -Xss
常见配置汇总堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 -XX:MaxPermSize转载 2022-03-25 22:07:07 · 198 阅读 · 0 评论 -
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。网络中搜索到的常见原因:1、检查xml文件所在package名称是否和Mapper interface所在的包名<mapper namespace="me.tspace.pm.dao转载 2022-03-25 21:54:49 · 1359 阅读 · 1 评论 -
如何查看linux服务器内存使用情况
1. free命令free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。直接输入free命令,显示如下free命令默认是显示单位kb,可以采用free -m和free -g命令查看,分别表示MB和GB另外,free -h会自动选择以适合理解的容量单位显示Mem:表示物理内存统计,如果机器剩余内存非常小,一般小于总内存的20%,则判断为系统物理内存不够Swap: 表示硬盘上交换分区的使用情况,如剩余空间较小,需要留意当前系统内存使用.转载 2022-03-17 14:49:15 · 14722 阅读 · 0 评论 -
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 文件提前结
自己在写ssm项目进行mapper的单元测试时遇到这个问题,根据网上的方法(XML头配置错误)检查自己的mapper.xml后没有发现错误。之后发现在建立mapper时将其他表一起建了mapper.java和mapper.xml。但是其他表的这俩个文件什么都没有写,在进行单元测试时会先扫描XML文件,而其他表的XML文件无内容,也就是没有头文件,所以报错。之后把其他表的删除,问题得到解决。一点小感受,对于初学者来说在学习新内容时一定要一个功能一个功能的去实现,从网上copy太多,出错后就不晓得哪里的问题转载 2021-04-27 11:01:09 · 1333 阅读 · 0 评论 -
异常:java.lang.IllegalArgumentException: Illegal character in scheme name at index 0: 1xx.xxx.x.xx
异常:原因&解决:一般是因为URL的拼写问题192.168.154.131:8080/solrURL必须要是完整的http://192.168.154.131:8080/solr若这样还有错误,建议检查一下你的这个字符串中间有没有空格,http前后有没有空格的问题本人遇到:我遇到的情况是这样的:我把路径写在yml配置文件中了,如下获取上面的url后调用,就会报上面写的异常信息。后来我在Windows中打印日志,并没有空格,但是在Linux中打印日.原创 2021-04-09 15:39:01 · 2924 阅读 · 0 评论 -
数据库报错create connection SQLException,............ errorCode 1129, state HY000
报错:com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://mysql:3306/config?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai, errorCode 1129, state HY000错误:Host is blocke...转载 2021-03-23 14:58:42 · 4696 阅读 · 0 评论 -
Mybatis+PageHelper查询结果排序两种方式
1.使用PageHelper排序PageHelper.startPage(pageNum , pageSize);PageHelper.orderBy("A B");其中A为排序依据的字段名,B为排序规律,desc为降序,asc为升序或者一步到位String orderBy="字段名 排序规律";PageHelper.startPage(pageNum, pageSize, orderBy);2.使用Mybatis排序XXXExample example = new XXXE转载 2021-03-16 19:08:50 · 1608 阅读 · 0 评论 -
springboot项目里用MultipartFile获取前端传的file为null问题
问题原因:看了很多博客,原因好像是springboot自带的org.springframework.web.multipart.MultipartFile和Multipart冲突。解决方法:记录一种亲测有效的解决方法,@EnableAutoConfiguration排除冲突的依赖@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})补充:后面仔细查看了代码发现是由于旧项目代码迁移到springboot框架转载 2020-10-29 17:34:57 · 4076 阅读 · 0 评论 -
JAVA线上故障排查全套路
线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。一、CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用js转载 2020-09-22 17:45:24 · 400 阅读 · 0 评论 -
记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?
去年年底的时候,我们线上出了一次事故,这个事故的表象是这样的:系统出现了两个一模一样的订单号,订单的内容却不是不一样的,而且系统在按照 订单号查询的时候一直抛错,也没法正常回调,而且事情发生的不止一次,所以 这次系统升级一定要解决掉。经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。这里简要展示下当时的代码:/***OD单号生成*订单号生成规则:OD + yyMMddHHmmssSSS + 5位数(商户ID3..转载 2020-09-15 09:56:59 · 245 阅读 · 0 评论 -
SpringBoot 解决时区问题
1、在启动类里加上下面方法@PostConstructvoidsetDefaultTimezone(){TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));}2、在application.properties加上##jsonsettingspring.jackson.date-format=yyyy-MM-ddHH:mm:ssspring.jackson.time-zone=Asia/Shanghai...转载 2020-09-03 18:30:28 · 1098 阅读 · 0 评论 -
Java不同时区(timezone)的坑
最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间。我的机子的JVM经常时区出错,每次用导入注册表的方法恢复,但是不长久,而且在C系统中很正常。后来在程序代码中加入设置默认时区的方法解决:TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");//将JVM的默认时区设为东部+8时间,也就是北京时间TimeZone.setDefa原创 2020-09-03 13:39:18 · 636 阅读 · 0 评论 -
spring-boot 多线程并发定时任务的解决方案
spring-boot 多线程并发定时任务的解决方案刚刚看了下Spring Boot实现定时任务的文章,感觉还不错。Spring Boot 使用Spring自带的Schedule来实现定时任务变得非常简单和方便。在这里个大家分享下。开启缓存注解@SpringBootApplication@EnableScheduling //开启定时任务public class Application { public static void main(String[] args) { Spr转载 2020-09-01 14:51:50 · 961 阅读 · 1 评论 -
Insert into select语句引发的生产事故
前言 Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使用网络I/O,直接使用SQL依靠数据库I/O完成,这样简直不要太棒了。然后他就被开除了。事故发生的经过。 由于数据数据库中order_today数据量过大,当时好转载 2020-08-30 11:25:22 · 405 阅读 · 0 评论 -
三 实战:第09讲:案例实战:面对突如其来的 GC 问题如何下手解决
本课时我们主要从一个实战案例入手分析面对突如其来的 GC 问题该如何下手解决。想要下手解决 GC 问题,我们首先需要掌握下面这三种问题。如何使用 jstat 命令查看 JVM 的 GC 情况? 面对海量 GC 日志参数,如何快速抓住问题根源? 你不得不掌握的日志分析工具。工欲善其事,必先利其器。我们前面课时讲到的优化手段,包括代码优化、扩容、参数优化,甚至我们的估算,都需要一些支撑信息加以判断。对于 JVM 来说,一种情况是 GC 时间过长,会影响用户的体验,这个时候就需要调整某些 J原创 2020-06-28 18:08:03 · 569 阅读 · 1 评论 -
二 垃圾回收:第08讲:案例实战:亿级流量高并发下如何进行估算和调优
本课时主要讲解如何在大流量高并发场景下进行估算和调优。我们知道,垃圾回收器一般使用默认参数,就可以比较好的运行。但如果用错了某些参数,那么后果可能会比较严重,我不只一次看到有同学想要验证某个刚刚学到的优化参数,结果引起了线上 GC 的严重问题。所以你的应用程序如果目前已经满足了需求,那就不要再随便动这些参数了。另外,优化代码获得的性能提升,远远大于参数调整所获得的性能提升,你不要纯粹为了调参数而走了弯路。那么,GC 优化有没有可遵循的一些规则呢?这些“需求”又是指的什么?我们可以将目标归结为三点原创 2020-06-27 23:19:18 · 566 阅读 · 0 评论 -
二 垃圾回收:第07讲:大厂面试题:有了 G1 还需要其他垃圾回收器吗?
本课时我们主要来看下这两个高频的面试考题:G1的回收原理是什么?为什么 G1 比传统 GC 回收性能好? 为什么 G1 如此完美仍然会有 ZGC?我们在上一课时,简要的介绍了 CMS 垃圾回收器,下面我们简单回忆一下它的一个极端场景(而且是经常发生的场景)。在发生 Minor GC 时,由于 Survivor 区已经放不下了,多出的对象只能提升(promotion)到老年代。但是此时老年代因为空间碎片的缘故,会发生 concurrent mode failure 的错误。这个时候,就需要降级为.原创 2020-06-27 21:16:48 · 868 阅读 · 2 评论 -
二 垃圾回收:第06讲:深入剖析:垃圾回收你真的了解吗?(下)
由于上一课时篇幅比较多,我们在这一课时重点讲解上一课时中提到的 CMS 垃圾回收器,让你可以更好的理解垃圾回收的过程。在这里首先给你介绍几个概念:Minor GC:发生在年轻代的 GC。 Major GC:发生在老年代的 GC。 Full GC:全堆垃圾回收。比如 Metaspace 区引起年轻代和老年代的回收。理解了这三个概念,我们再往下看。CMS 的全称是 Mostly Concurrent Mark and Sweep Garbage Collector(主要并发标记清除垃圾收原创 2020-06-27 20:42:19 · 423 阅读 · 0 评论 -
二 垃圾回收:第06讲:深入剖析:垃圾回收你真的了解吗?(上)
本课时我们重点剖析 JVM 的垃圾回收机制。关于 JVM 垃圾回收机制面试中主要涉及这三个考题:JVM 中有哪些垃圾回收算法?它们各自有什么优劣? CMS 垃圾回收器是怎么工作的?有哪些阶段? 服务卡顿的元凶到底是谁?虽然 Java 不用“手动管理”内存回收,代码写起来很顺畅。但是你有没有想过,这些内存是怎么被回收的?其实,JVM 是有专门的线程在做这件事情。当我们的内存空间达到一定条件时,会自动触发。这个过程就叫作 GC,负责 GC 的组件,就叫作垃圾回收器。JVM 规范并没有规定垃圾回原创 2020-06-27 18:46:42 · 454 阅读 · 0 评论 -
二 垃圾回收:第05讲:大厂面试题:得心应手应对 OOM 的疑难杂症
在前面几个课时中,我们不止一次提到了堆(heap),堆是一个巨大的对象池。在这个对象池中管理着数量巨大的对象实例。而池中对象的引用层次,有的是很深的。一个被频繁调用的接口,每秒生成对象的速度,也是非常可观的。对象之间的关系,形成了一张巨大的网。虽然 Java 一直在营造一种无限内存的氛围,但对象不能只增不减,所以需要垃圾回收。那 JVM 是如何判断哪些对象应该被回收?哪些应该被保持呢?在古代,刑罚中有诛九族一说。指的是有些人犯大事时,皇上杀一人不足以平复内心的愤怒时,会对亲朋好友产生连带责任。诛原创 2020-06-27 17:24:22 · 595 阅读 · 0 评论 -
一 基础原理:第04讲:动手实践:从栈帧看字节码是如何在 JVM 中进行流转的
在上一课时我们掌握了 JVM 的内存区域划分,以及 .class 文件的加载机制。也了解到很多初始化动作是在不同的阶段发生的。但你可能仍对以下这些问题有疑问:怎么查看字节码文件? 字节码文件长什么样子? 对象初始化之后,具体的字节码又是怎么执行的?带着这些疑问,我们进入本课时的学习,本课时将带你动手实践,详细分析一个 Java 文件产生的字节码,并从栈帧层面看一下字节码的具体执行过程。工具介绍工欲善其事,必先利其器。在开始本课时的内容之前,先给你介绍两个分析字节码的小工具。java原创 2020-06-27 15:24:14 · 936 阅读 · 0 评论 -
一 基础原理:第03讲:大厂面试题:从覆盖 JDK 的类开始掌握类的加载机制
本课时我们主要从覆盖 JDK 的类开始讲解 JVM 的类加载机制。其实,JVM 的类加载机制和 Java 的类加载机制类似,但 JVM 的类加载过程稍有些复杂。前面课时我们讲到,JVM 通过加载 .class 文件,能够将其中的字节码解析成操作系统机器码。那这些文件是怎么加载进来的呢?又有哪些约定?接下来我们就详细介绍 JVM 的类加载机制,同时介绍三个实际的应用场景。我们首先看几个面试题。我们能够通过一定的手段,覆盖 HashMap 类的实现么? 有哪些地方打破了 Java 的类加载机制?原创 2020-06-27 14:03:51 · 533 阅读 · 0 评论 -
一 基础原理:第02讲:大厂面试题:你不得不掌握的 JVM 内存管理
本课时我们主要讲解 JVM 的内存划分以及栈上的执行过程。这块内容在面试中主要涉及以下这 3 个面试题:JVM 是如何进行内存区域划分的? JVM 如何高效进行内存管理? 为什么需要有元空间,它又涉及什么问题?带着这 3 个问题,我们开始今天的学习,关于内存划分的知识我希望在本课时你能够理解就可以,不需要死记硬背,因为在后面的课时我们会经常使用到本课时学习的内容,也会结合工作中的场景具体问题具体分析,这样你可以对 JVM 的内存获得更深刻的认识。首先,第一个问题:JVM的内存区域是怎么高效划分原创 2020-06-27 13:04:15 · 514 阅读 · 0 评论 -
一 基础原理:第01讲:一探究竟:为什么需要 JVM?它处在什么位置?
从本课时开始我们就正式进入 JVM 的学习,如果你是一名软件开发工程师,在日常工作中除了 Java 这个关键词外,还有一个名词也一定经常被提及,那就是 JVM。提到 JVM 我们经常会在面试中遇到这样的问题:为什么 Java 研发系统需要 JVM? 对你 JVM 的运行原理了解多少? 我们写的 Java 代码到底是如何运行起来的?想要在面试中完美地回答这三个问题,就需要首先了解 JVM 是什么?它和 Java 有什么关系?又与 JDK 有什么渊源?接下来,我就带你拨开这些问题的层层迷雾,想要...原创 2020-06-27 11:19:49 · 654 阅读 · 1 评论 -
深入浅出 Java 虚拟机——专题
课程目录开篇词开篇词:JVM,一块难啃的骨头基础原理第01讲:一探究竟:为什么需要 JVM?它处在什么位置?第02讲:大厂面试题:你不得不掌握的 JVM 内存管理第03讲:大厂面试题:从覆盖 JDK 的类开始掌握类的加载机制第04讲:动手实践:从栈帧看字节码是如何在 JVM 中进行流转的垃圾回收第05讲:大厂面试题:得心应手应对 OOM 的疑难杂症第06讲:深入剖析:垃圾回收你真的了解吗?(上)第06讲:深入剖析:垃圾回收你真的了解吗?(下)第07讲:大厂面试题:有了 G原创 2020-06-27 11:03:22 · 358 阅读 · 0 评论 -
IDEA错误:Cannot start compilation: the output path is not specified for module "Test". Specify the out
错误是发生在从github上checkout自己的项目时。因为没有将配置文件一起上传,所以在运行java程序时有了这个报错:Cannot start compilation: the output path is not specified for module “Test”. Specify the output path in Configure Project.其实这个错误是因为...转载 2020-03-19 14:00:55 · 503 阅读 · 0 评论 -
idea新打开项目java类左下角显示黄色的J
我们在初学java的时候使用idea进行开发,但突然发现项目不可运行,并且文件上标有小黄色的j。打开项目工程的工程结构设置(快捷键:ctrl+alt+shift+s),如图中所示选择第一栏的Moduls然后在第三栏选择source然后在按照途中所示选择删除当前的内容跟路径按照图中所示点击添加内容根路径最后一步选择你的项目根路径然后点击 ok,一直确认就行了。...原创 2020-03-19 13:35:52 · 12288 阅读 · 3 评论 -
Linux防火墙firewalld安全设置
背景描述防火墙是具有很好的保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙设置,大多数生产环境都建议开启,这样才能有效避免安全隐患等问题;本文文字偏多,但是建议大家还是花个十多分钟好好看一下防火墙的原理,这样便于后期问题排查,最后一小节也会有常用命令操作。主要内容...转载 2019-11-21 10:22:09 · 898 阅读 · 0 评论 -
日志:链路追踪、异常通知
1、日志排查问题困难?分布式日志链路跟踪来帮你2、异常通知转载 2019-11-11 17:20:54 · 661 阅读 · 0 评论