自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(345)
  • 资源 (7)
  • 收藏
  • 关注

原创 整理一下:遇到的Java服务故障问题及排查方案

常见问题 1:CPU 利用率高问题CPU 使用率是衡量系统繁忙程度的重要指标,一般情况下单纯的 CPU 高并没有问题,它代表系统正在不断的处理我们的任务,但是如果 CPU 过高,导致任务处理不过来,这个是非常危险需要关注的。CPU 使用率的安全值没有一个标准值,取决于你的系统是计算密集型还是 IO 密集型,一般计算密集型应用 CPU 使用率偏高 load 偏低,IO 密集型相反。问题原因:1、频繁 FullGC/YongGC如何排查:查看 gc 日志;jstat -gcutil pid 查看

2021-03-28 13:45:20 1132

原创 重温Mysql及部分原理挖掘

01 | 基础架构:一条SQL查询语句是如何执行的?大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件...

2020-08-21 18:26:31 18436

原创 使用 MAT 排查分析 OOM 问题案例

MAT相信有一定经验的开发者多少都会在生产环境上碰到过内存溢出(OOM)的问题吧。对于排查 OOM 问题、分析程序堆内存使用情况,最好的方式就是分析堆转储。Java 的 OutOfMemoryError 是比较严重的问题,需要分析出根因,所以对生产应用一般都会这样设置 JVM 参数,方便发生 OOM 时进行堆转储:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/xxx/xxx关于分析堆存储文件的话,推荐使用Eclipse 的 Memory Ana

2020-08-13 15:56:54 2514

原创 HashMap引发死链问题(HashMap、ConcurrentHashMap原理解析)

事故背景一个CPU使用率飙升至100%的线上故障,原因是在并发情况下使用HashMap导致死循环。当cpu使用率100%时,查看堆栈,发现程序都卡在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。HashMap结构HashMap 是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示:HashMap通常会用一个指针数组...

2020-03-31 23:06:12 4386 7

原创 记一次通过优化日志解决高并发服务性能瓶颈问题

事故发现服务在生产环境中,由于同一时间段请求量过大,导致服务响应速度急剧下降。甚至会出现拒绝服务的问题,第一时间想到是机器性能问题,无法满足并发如此大的场景,需要进行扩容或者服务限流。经过扩容之后平稳了一个多月之后,又一次大量请求打进来的时候出现了此问题。这时才意识到开始从各个角度去排查问题。事故排查过程一个系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。...

2020-03-18 17:50:24 36581

原创 JVM调优和垃圾回收相关参数整理

一、内存调优-Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize)-Xms和-Xmx可以说是最流行的JVM参数,它们可以允许我们指定JVM的初始和最大堆内存大小。一般来说,这两个参数的数值单位是Byte,但同时它们也支持使用速记符号,比如“k”或者“K”代表“kilo”,“m”或者“M”代表“mega”,“g”或者“G”代表“gi...

2019-05-10 11:42:12 48033

原创 JVM内存模型和GC算法分析

JVM运行时数据区JVM在运行过程中会把它所管理的内存划分成若干不同的数据区域。线程私有:程序计数器、虚拟机栈、本地方法栈 (主要存放指令)线程共享:堆、方法区 (主要存放数据)一、程序计数器程序计数器是用于存放下一条指令所在单元的地址的地方。我们可以随意拿一个class文件进行反编译,看看其结构。如下,JvmDemo.class文件:cafe babe 0000 0033...

2019-05-09 12:32:19 48923

原创 同步锁的优化思路及JDK对锁的一些优化

一、锁优化的思路和方法主要有以下5点:减少锁持有时间主要就是精准的确定需要加锁的模块,不需要加锁的代码模块分离在同步块之外。减小锁粒度将大对象(这个对象可能会被很多线程访问),拆成小对象,大大增加并行度,降低锁竞争。降低了锁的竞争,偏向锁,轻量级锁成功率才会提高。最最典型的减小锁粒度的案例就是ConcurrentHashMap。锁分离最常见的锁分离就是读写锁ReadWri...

2019-04-10 16:47:08 52515

原创 深入理解ThreadLocal的原理和内存泄漏问题

ThreadLocal作用和原理分析:ThreadLocal主要为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。要理解ThreadLocal需要理解下面三个问题:①、每个线程的变量副本是存储在哪里的?(参考ThreadLocal的get()源码) 每个线程都有一个threadLocals成员,引用类型是ThreadLocalMap,以ThreadLocal和T...

2018-09-03 22:51:43 20442 14

原创 springmvc运行流程分析,手写spring框架尝试

该文章主要是分析Springmvc启动的流程(配置阶段、初始化阶段和运行阶段),可以让自己对spring框架有更深一层的理解。对框架比较感兴趣的朋友都可以了解阅读下,对于我所描述的内容有错误的还望能不吝指出。对于springmvc中的整个流程我个人把他分为这几个阶段,包括个人手写的spring也是参照此按阶段实现:1.配置阶段根据web.xml ,先定义Dispa...

2018-06-10 23:28:18 119241 11

原创 ClickHouse入门及适用场景(Chat-GPT产物)

此篇文章是由chat-GPT(gpt-4)对话而来的产物(不得不感慨AI确实带来了很多便利)。

2023-04-03 20:19:02 1508 1

原创 4S店提车注意事项

4S店提车注意事项。

2022-12-02 00:35:32 389

原创 arthas实用工具梳理篇

arthas实用梳理篇。

2022-09-29 17:01:05 1136

原创 IO、NIO、Netty分别实现服务端与客户端通信

简化下场景:客户端每隔两秒发送一个带有时间戳的 “hello world” 给服务端,服务端收到之后打印。IO编程IO服务端:public class IOServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8000); // (1) 接收新连接线程 new Thread(

2020-08-27 11:45:43 3999

原创 SpringBoot源码部分阅读总结

关于启动类注解@SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeF

2020-08-26 11:05:15 303

原创 Redis配置文件redis.conf中常用配置详解

什么是Redis?Remote Dictionary Server(Redis) 是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,它也通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。与传统数据库不同的是 Redis 的数据是存在内存中的,所以存写速度非常快,因此 Redis 被广泛应用于缓存方向。Redis为分布式缓存,

2020-08-06 16:42:38 320

原创 时间、空间复杂度分析

时间复杂度时间复杂度表示算法的执行时间与数据规模之间的增长关系。虽然代码千差万别,但是常见的复杂度量级并不多。我稍微总结了一下,这些复杂度量级几乎涵盖了你今后可以接触的所有代码的复杂度量级。O(1)首先你必须明确一个概念,O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行代码。比如这段代码,即便有 3 行,它的时间复杂度也是 O(1),而不是 O(3)。 int i ...

2020-04-15 18:38:10 302

原创 MQ的常用场景 && 最佳实践

RocketMQ消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰填谷的能 力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。建议统一消息格式统一消息格式,message由两部分组成id:由生产者生成,每次不重复,...

2020-04-01 16:10:22 33424

原创 消息队列 RocketMQ原理和使用整理

背景由于公司之前使用的队列中间件是kafka,近期变更为使用阿里的RocketMQ,所以对RocketMQ进行一下简单的知识整理。后续研究其内部原理后,再来一篇深入理解。说明消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具...

2020-03-23 15:11:17 3713

原创 Java动态代理相关简述

一、概念:Java动态代理的优势是实现无侵入式的代码扩展,也就是方法的增强;让你可以在不用修改源码的情况下,增强一些方法;在方法的前后你可以做你任何想做的事情(如Spring AOP、cglib等)。代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。(个人理解就是对调用目标的一种...

2020-01-20 11:53:39 388

原创 Sentry基本原理

官方文档:sentry官网Sentry基本介绍Sentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web页方便查看。Sentry由pyth...

2019-11-08 19:30:37 6142

原创 Java位运算符

一、Java中所支持的位运算符一共有7个符号说明&按位与。当两位同时为1时才返回1。|按位或。只要有一位为1即可返回1。~按位非(取反)。单目运算符,将操作数的每个位(包括符号位)全部取反。^“异或”运算。当两位相同时返回0,不同时返回1。<<左移运算符。>>右移运算符。>>>...

2019-09-17 22:04:52 347

转载 KMP、BM、Sunday、Horspool、strstr 字符串匹配算法介绍和性能比较

文章转自:https://blog.csdn.net/qq_33515733/article/details/81163135

2019-08-26 16:25:46 1038

原创 kafka架构分析和配置使用整理

一、软件简介Apache Kafka是开源的分布式流处理平台,也是高吞吐量的分布式跨平台订阅消息系统,主要包含Broker服务器、Topic消息类别、Partition物理分区、Producer生产者、Consumer消费者、Consumer Group消费组部分。二、架构图总结:•Broker : Kafka消息服务器,消息中心。一个Broker可以容纳多个Topic。•Prod...

2019-06-21 17:41:43 696

原创 基于Dubbo的分布式服务日志追踪实现

日志系统中的MDC可以在服务内部提供很好的日志追踪支持。 MDC.put(C.LOG.TRACE_ID, "唯一标识串");但是分布式(RPC)的情况下,如何实现呢?以Dubbo为例,我们可以借助Dubbo的上下文信息RpcContext配合Dubbo的SPI扩展实现扩展拦截器来完成服务间的日志追踪。一、上下文信息上下文中存放的是当前调用过程中所需的环境信息。RpcContex...

2019-04-26 11:03:33 51611 7

原创 基于Redis实现分布式锁剖析

之前的文章《分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实现也顺带进去,特此做一些利用Redis实现分布式锁的分析。PS:让我做选择的话,分布式锁的选择还是更愿意选择利用Zookeeper去实现的。原因的话可以参考下面这张图:一、关于Redis分布式锁的基础知识1、缓存有效期:redis中的数据,不一定都...

2019-04-25 21:30:34 50139 4

原创 雪花算法

雪花算法雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。结构:算法描述:最高位是符号位,始终为0,不可用。41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。10位的机器标识,10位的长度最多支持部署1024个节点。12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生...

2019-04-23 17:07:21 53556

原创 分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁

一、锁的相关描述1、锁的使用流程:首先参考一下JDK所实现的锁的通用接口Lock.java接口:/* * @since 1.5 * @author Doug Lea */public interface Lock { /** * 加锁 */ void lock(); /** * 锁中断 */ void l...

2019-04-23 15:10:16 7528

原创 总结一些索引使用和优化规范

1、索引列的数据长度能少则少。答:这个原因很简单,B-Tree各个节点能存储信息更多,减少树的告诉,效率自然也能得到提示。2、索引一定不是越多越好,越全越好,一定是建合适的。答:索引多了,检索速度虽然可能得到提升。但是“写”相关操作的效率可就不容小觑了。3、匹配列前缀可用到索引like abc%。但是 like %9999%、like %9999用不到索引。答:最左匹配原则。4、Whe...

2019-04-01 20:40:15 51823

原创 自旋锁、阻塞锁、可重入锁使用解析

自旋锁自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。如下:public class SpinLock { private AtomicReference<Thread> sign =new AtomicReference<>(); public void lock(){ Thread curre...

2019-03-29 16:39:46 55858

转载 Fork/Join - 并发框架源码解析

什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+ … +100...

2019-03-28 22:01:47 54940

原创 ConcurrentLinkedQueue线程安全的队列源码解析

ConcurrentLinkedQueue简介在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现。ConcurrentLinkedQueue是一个基于链接节点的...

2019-03-28 19:43:17 51029

原创 XStream注解使用简介

Xstream简介Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。本文章主要介绍Xstream相关注解的使用。XStream注解使用假设要生成如下 xml报文:<...

2019-03-20 10:17:14 57764

原创 【xxl-job分布式任务调度系统】特性整理

一、概述XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。二、使用细节1、调度中心集群调度中心支持集群部署,提升调度系统容灾和可用性。调度中心集群部署时,几点要求和建议:DB配置保持一致;登陆账号配置保持一致;集群机器时钟保持一致(单机集群忽视);建议:推荐通过nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回...

2019-02-27 14:51:36 53946

原创 Dubbo原理简述四:服务暴露、服务引用和调用流程

关于服务暴露,首先需要了解:ServiceBean.java此类实现了几个Spring中比较重要的接口:如InitializingBean、ApplicationContextAware、ApplicationListener等,查看该类结构图:接下来分析一下该类的一些主要方法:在ServiceBean.afterPropertiesSet()方法中,就是将配置文件的各项属性信息都配置到该...

2019-01-15 19:38:41 56368

原创 Dubbo原理简述三:启动解析、加载配置信息

&lt;dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"&gt;&lt;/dubbo:registry&gt; &lt;dubbo:protocol name="dubbo" port="20882"&gt;&lt;/dubbo:protocol&gt; &lt;dubbo:ser

2019-01-15 19:24:51 55263 2

原创 Dubbo原理简述二:Dubbo框架设计分析

Dubbo框架设计:看起来比较复杂一些,但是其标注的非常清晰。层次结构分为三层:(1)、Business:主要实现业务内容,也就是作为Dubbo用户的我们最经常见到的。其内部仅包含了Interface和其对应的实现Implement。(2)、RPC:config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可...

2019-01-15 19:14:10 529

原创 Dubbo原理简述一:RPC原理和Netty通信原理

一、RPC原理:一次完整的RPC调用流程(同步调用,异步另说)如下:1)服务消费方(client)调用以本地调用方式调用服务;2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;3)client stub找到服务地址,并将消息发送到服务端;4)server stub收到消息后进行解码;5)server stub根据解码结果调用本地的服务;6)本地...

2019-01-15 18:25:20 27641

原创 Java进程CPU占用率高的排查和常见解决方案

当系统出现卡顿或者应用程序的响应速度非常慢,就可能要考虑到服务其上排查一番,以下是我常用的排查流程:1、top:观察占用CPU或者MEN(内存)使用情况最高的进程,记录PID;TIP:(1)、“1” 显示出多个逻辑CPU使用情况;(2)、“X” 高亮显示CPU列,并排序,&quot;Z&quot;红色展示;(3)、“shift + &amp;lt;” 或者 “shift + &amp;gt;” 变更高亮的列;(4)、“F...

2019-01-10 17:13:15 62575

转载 JAVA 内存泄露详解(示例及解决方式)

尝试了通过一张图片转载,效果还可以,就是原博主的代码格式太酷炫,亮瞎了。

2019-01-10 15:10:42 55098

activemq官方安装包

ActiveMQ介绍: 特点: 1、支持多种语言编写客户端 2、对spring的支持,很容易和spring整合 3、支持多种传输协议:TCP,SSL,NIO,UDP等 4、支持AJAX

2019-06-13

WinSCP软件安装包

linux文件传输工具!linux文件传输工具!linux文件传输工具! 可以直接拖拽

2018-06-22

java实现生成二维码和解析二维码

java实现生成二维码和解析二维码,只需要传入二维码图片或者传入要生成的二维码数据,就可以解析或生成对应的信息

2018-06-11

java实现根据数据库表自动生成实体,支持各种数据库,填入数据库连接参数,运行即可生成

java实现根据数据库表自动生成实体,支持各种数据库,填入数据库连接参数,运行即可生成

2018-06-11

oracle SQL优化

oracle SQL优化,说明+举例使用,为了提高系统性能,写好SQL语句是很有必要的

2018-04-27

阿里巴巴 Java 开发手册

阿里巴巴java开发规范~阿里巴巴java开发规范~阿里巴巴java开发规范

2018-04-22

vc_redist.x64.exe

无法启动此程序,因为计算机中丢失api-ms-win-crt-runtimel1-1-0.dll,安装此软件即可解决

2018-04-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除