- 博客(60)
- 收藏
- 关注
原创 jstack命令排查cpu占用过高问题
1、当系统cpu占用率过高时,可以通过top命令查看当前cpu占用率最高的线程可以看到排在第一位的pid为22705的进程cpu占用率最高2、可以通过top -H -p pid命令查看某个pid的进程下各线程的cpu占用情况这里可以看到pid为22758的线程cpu占用率最高,因为线程ID在jstack日志中是以十六进制显示的,所以我们将22758转换成十六进制58e6这里通过jstack 命令查看进程22705的cpu占用,并找到线程Id为58e6的日志在这里可以看到当前java线程的状态
2021-11-02 17:22:47
1574
原创 rocketmq消息积压监控java代码实现
最近在做彩信下发,需要下发的内容是以消息的形式存放在rocektMQ,遇上彩信消息未下发的情况,需要实时去查各topic的消息积压量1、启动时装配监控客户端的bean@Componentpublic class MQAdminExtConfig { private static final Logger log = LoggerFactory.getLogger(MQAdminExtConfig.class); @Value("${rocketmq.name-server}")
2021-10-25 11:25:57
1671
原创 logback配置解析
1、读取自定义属性先自定义一个类,继承PropertyDefinerBase类public class LogIpConfig extends PropertyDefinerBase { private static String LOCAL_IP = null; @Override public String getPropertyValue() { try { LOCAL_IP= InetAddress.getLocalHost()
2021-08-24 10:02:54
461
原创 堆栈信息不打印的情况下如何定位报错原因
不知道小伙伴们有没有遇见过这种问题,即linux环境jar包执行时,执行到某一行后,后面的代码不再执行,log日志中也没有打印错误信息(try-cat堆栈信息被吃掉)。此时该怎么定位原因呢身边的大神给介绍了个阿里的神器,arthas。先给出官方文档:官方文档点这里下面是简单示例一个操作流程下面再简单介绍一下官方文档提供的几个关键字作用dashboard当前系统的实时数据面板,按 ctrl+c 退出thread查看当前线程信息,查看线程的堆栈jvm查看当前J
2021-05-23 13:00:38
670
原创 不走索引的一些情形——替你们躺过的坑
参与一场面试,jvm、多线程、架构设计一一过关,最后死在了这看似简单,但却因为大意忽视了的sql优化上,这里把知道的一些情形都整理罗列出来,防止再次踩坑!列与列对比某个表中,有两列(id和c_id)都建了单独索引,下面这种查询条件不会走索引select * from test where id=c_id;这种情况会被认为还不如走全表扫描。测试如下explain select * from product where PRODUCT_ID =100101 ;当有两个带索引的列比较时存在NU
2021-05-07 00:20:33
927
原创 如何优化你的网站性能(一)——GC调优、即时编译JIT
优化一个java程序的执行有很多种途径,下面分别从代码、并发、缓存、异步、网络、jvm调优等方面一一描述。GC调优先说一下经验,就是要不断的去调,选择一个合适的堆大小,再去应用调优的目的GC次数够少GC时间够小调优原则和步骤1、大多数的java应用程序不需要GC调优2、大多数需要GC调优的不是参数问题,是代码问题3、GC调优是最后的手段,逼不得已才用调优调的是什么?第一:选择合适的GC回收器第二:选择合适的堆大小第三:选择年轻代在堆中的大小1、监控GC的状态2、分析GC结果,判
2021-04-25 13:10:36
389
转载 建造者模式(Builder模式)
建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同。通俗的讲,创建一个对象一般都会有一个固定的步骤,这个固定的步骤我们把它抽象出来,每个抽象步骤都会有不同的实现方式,不同的实现方式创建出的对象也将不同。举个常见的例子,想必大家都买过电脑,电脑的生产或者组装其实就是属于建造者模式,我们知道,电脑的生产都需要安装CPU、内存条、硬盘等元器件。我们可以把这个安装步骤抽象出来,至于到底装哪种CPU,比如i5还是i7就是对该抽象安装步骤
2021-04-10 22:52:00
712
原创 记一次mycat日活量数亿级别分库分表方案及数据迁移
先说一下业务场景。项目是负责公司短信下发的,目前每日下发量大概在千万级别,采取了每天一张表的分表方案,但为了后续新的发送方接入,需要支持每日近亿级别的发送量,此时每天一张发送日志表的分表方案明显已不再支持。经过激烈讨论,我们引入了mycat的解决方案。考虑到发送量的大小,我们对发送日志表进行了分库分区操作,保证每一个库和区能够均匀承担数据压力,我们决定对两个字段进行取模。即手机号对200取模决定在哪一个库(分了两百个库,每天一个分区),再传入日期(比如20200127),决定数据落在哪一个分区。myca
2021-01-27 17:26:04
580
原创 类加载机制
一、类加载的几个阶段1、初始化的条件以下五种情形会触发类的初始化1、通过new关键字创建对象2、调用类的静态属性3、反射4、初始化一个类,但父类还没有初始化,要先初始化父类5、应用程序主类,main方法的类6、动态语言支持...
2021-01-05 23:58:06
209
原创 idea集成阿里巴巴规范扫描插件
为了码出高效、码出质量,尽量避免开发过程中的各种坑,互联网一线大厂基本都有自己的一套规范手册,这里介绍IDEA怎么去集成阿里的一套编码规范。阿里规范插件GitHub:规范文档地址IDEA安装该插件步骤1、打开IDEA,File-> Setteings->Plugins->Browse Repositories,在Browse Repositories搜索栏搜索Alibaba,然后安装安装完成重启IDEA2、去远程地址下载本地压缩包,版本需要和上面安装的插件版本一致选择从硬
2020-12-22 00:41:29
2936
原创 redis排查读取超时、连接超时
最近公司现网查询速度极慢,原因是因为有一个调度频繁查询产品详情,经理安排进行优化笔者第一时间想到的是使用缓存,但因为生产环境产品信息量将近上千条热点数据,为防止撑爆服务器内存,考虑到了使用redis缓存。代码实现如下1、先在详情查询接口添加缓存注解2、在所有需要更新缓存信息的地方,添加删除缓存注解注意,坑就在这个allEntries注解!先通过info命令查询发现redis内存占用才1g,而我们线上redis内存有5g多。那么考虑是否是因为某些查询过慢导致的读取超时呢?获取慢查询数量slo
2020-12-17 01:18:06
2500
1
原创 spring整合redisson开启缓存
先来了解几个注解:@Cacheable表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段。这个注解可以用condition属性来设置条件,如果不满足条件,就不使用缓存能力,直接执行方法。可以使用key属性来指定key的生成规则。支持如下几个参数:value:缓存位置名称,不能为空,如果使用EHCache,就是ehcache.xml中声明的cache的name, 指明将值缓存到哪个Cache中
2020-11-24 17:37:44
1197
原创 垃圾收集器之G1
Garbage First(G1) 垃圾优先g1把堆分成了很多块,每一块可能被定义成年轻代,或者年老代首先,G1的设计原则就是简单可行的性能调优开发人员仅仅需要声明以下参数即可:指令意义-XX:+UseG1GC开启G1垃圾收集器-Xmx32g设计堆内存的最大内存为32G-XX:MaxGCPauseMillis=200设置GC的最大暂停时间为200ms需要调优,在内存大小一定的情况下,我们只需要修改最大暂停时间即可。(可预测停顿:消耗在垃圾收集器上得时间
2020-11-02 17:17:27
220
原创 几种常见垃圾收集器原理及使用
1、判断对象是否可回收(存活)之前介绍过的引用计数法存在一定的缺陷,即循环引用的对象无法被回收,因此jvm中未使用,这里介绍一种新的算法可达性分析算法这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。作为GC Roots的对象包括下面几种:1 虚拟机栈(栈帧中的本地变量表)中引用的对象。2 方法区中类静态属性引用
2020-10-30 09:55:09
4496
原创 不会这些你敢说你会nginx?
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-09-06 17:05:12
2472
2
原创 别再说不知道元空间和永久代的区别了
java8之前永久代:用来存储类的编译信息,常量、和静态变量堆和方法去逻辑上是分开的,但是在物理内存上两者又是连续的在精确一些,实际上是方法区和老年代是相连的,所以永久代的垃圾收集是和老年代捆绑在一起的,因此无论谁满了,都会触发永久代和老年代的垃圾收集。...
2020-08-31 18:06:43
1666
1
原创 list集合按日期排序并处理空数据情况
Collections.sort(result,Comparator.nullsLast(new Comparator<SendMessageStaResp>() { @Override public int compare(SendMessageStaResp o1, SendMessageStaResp o2) { if(o1.getSendTime2()==null){ return 1; } if(o
2020-08-25 15:39:16
1694
原创 UDP协议简单了解和使用
UDP协议udp是传输层协议,提供不可靠的服务,无连接UDP无连接,时间上不存在建立连接需要的时延大部分视频是UDP的,有部分是TCP结合 UDP
2020-08-25 15:32:29
892
原创 SELECT * 为什么效率低
一、效率低的原因不需要的列会增加数据传输时间和网络开销用“SELECT * ”数据库需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。增大网络开销;* 有时会误带上如log、IconMD5之类的无用且大文本字段,数据传输size会几何增涨。如果DB和应用程序不在同一台机器,这种开销非常明显即使 mysql 服务器和客户端是在同一台机器上,使用的协议还是 tcp,通信也是需要额外的时间。对于无用的大字段,如 varchar、blob、t
2020-08-07 18:01:03
488
原创 将不规则EXCEL表格以json形式导出数据——工具类(代码可用)
package com.sgcc.custom.common.utils.excel.yupont;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.sgcc.custom.common.utils.ResultInDBSaver;import com.yupont.util.DbUtil;import lombok.extern.slf4j.Slf4j;import
2020-07-08 12:55:28
346
原创 LeeCode编程——括号匹配问题、时区间合并(附代码)
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。首先进行对题目进行分析。1.因为是无规则的括号字符组成一串无规则的括号字符串。这里可以确认使用字符串String和字符char2.明确使用String,char之后,我们如何进行对字符判断是否符合规则呢?3.我们需要考虑使用Stack,因为左括号和右括号必须成对出现。使用栈方便逻辑编写。算法思路:1.左括号全部入栈2.判断是否有左括号,没有直接返回false3.遇到左括号进行全部压栈4.如果
2020-07-05 23:45:59
211
原创 TCP连接原理、网络模型
最近面试了一些大厂,都有问道通讯协议方面的东西,这里做一个系统总结网络模型这里对OSI模型的每一个部分做一个解释:应用层:OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。表示层表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准
2020-07-05 17:40:49
870
原创 dubbo源码解读——SPI机制
先来了解一下java中的spi机制jdk中的spiSPI简介一种策略模式,通过在META-INF/services/包下定义接口命名的文件,来决定使用哪个实现调用过程public class Main { public static void main(String[] args) { System.out.println("---加载接口--"); ServiceLoader<SpiService> serviceLoader = Serv
2020-07-04 16:57:25
381
原创 dubbo启动原理
dubbo是怎么在spring里面解析自定义的标签的先来了解spring中一个NamespaceHandlerSupportpublic abstract class NamespaceHandlerSupport implements NamespaceHandler {//省略}Spring在设计之初就一贯坚持的设计原则:开闭原则:对扩展开放(Open for extension),对修改关闭(Closed for modification)。所以你可以在不修改Spring源代码的情况下扩展
2020-07-03 23:19:18
631
原创 dubbo——回声测试、泛化调用、RPC调用原理
回声测试检测服务是否可用,dubbo获取的所有服务代理对象都实现了EchoService接口,用于监控代码实现所输出结果实际生产中可以部署这样一个接口进行测试service的可用性
2020-06-26 23:46:44
687
原创 dubbo缓存、异步、集群容错、负载配置、回调
weight在服务发起方dubbo:service标签中配置指定方法使用缓存缓存策略dubbo异步1.什么时候需要使用异步?当你需要同时调用多个Dubbo服务,这些服务又没有先后顺序,就可以使用异步调用。2.如何开启异步调用?//优惠服务@Reference(async = true)private PromotionDubboService promotionDubboService;//库存服务@Reference(async = true)private Inventor
2020-06-25 23:25:08
224
原创 Dubbo入门——快速搭建一个dubbo项目
分布式服务架构当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。dubbo的一些核心结构节点角色说明Provider暴露服务的服务提供方Consumer调用远程服务的服务消费方Registry服务注册与发现的注册中心Monitor统计服务的调用次数和调用时间的监控中心Container服务运行容
2020-06-24 23:47:20
3160
原创 Zookeeper集群介绍和搭建
集群特点顺序一致性客户端的更新顺序与它们被发送的顺序相一致(针对同一个Follower A提交的写请求request1、request2,某些Follower虽然可能不能在请求提交成功后立即看到(也就是强一致性),但经过自身与Leader之间的同步后,这些Follower在看到这两个请求时,一定是先看到request1,然后再看到request2,两个请求之间不会乱序,即顺序一致性)原子性更新操作要么成功要么失败,没有第三种结果。单一视图无论客户端连接到哪一个服务器,客户端将看到相同的 Zo.
2020-05-18 15:10:23
396
原创 linux环境下部署oracle——三步搞定版(绝对简单!)
目前网上各种版本的安装oracle数据库需要修改各种配置文件,安装可视化软件比较复杂,这里提供一种基于docker的简单安装运用版本废话不多说,直接敲命令1、启动Dockersystemctl start docker拉取镜像docker pull jaspeen/oracle-11g本地下载oracle文件,上传并解压至/serverroot编辑环境变量 vi /etc/pro...
2020-04-16 16:56:36
670
原创 分布式一致性——2PC、3pc、Paxos算法
关于分布式系统有以下几个理论CAP理论一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中的两项TIPS:不可能把所有应用全部放到一个节点上,因此架构师的精力往往就花在怎么样根据业务场景在A和C直接寻求平衡;BASE理论:即使无法做到强一致性,但分布式系统可以根据自己的业务特点,采用适当的方式来使系统达到最终的一致性;Basically Aval...
2020-04-09 14:10:17
550
原创 Zookeeper——java操作客户端(有代码注释可运行)
先引入Zookeeper原生的jar包 <!--zookeeper连接包--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> ...
2020-03-31 10:59:33
144
原创 Zookeeper——ACL授权机制、四字命令
ACL授权机制ACL主要是用来对zoolkeeper的某些节点进行加密授权作用主要涉及到三个命令getAcl获取指定节点的ACL信息setAcl设置指定节点的ACL信息addauth给当前会话增加username1密码为password1的权限这里主要结合setAcl和addauth介绍一下如何对指定节点进行加密授权访问通过getAcl命令获取节点加密信息[zk: local...
2020-03-30 14:57:07
1159
原创 Zookeeper入门——安装、配置解析、节点
Zookeeper简介Zookeeper是提供高性能、高可用 且具备严格的顺序访问控制能力的分布式协调服务。设计目标简单的数据结构:共享的树形结构,类似文件系统,存储于内存可以构建集群:避免单点故障,3-5台机器就可以组成集群,超过半数正常工作就能对外提供服务顺序访问:对于每个读请求,zk会分配一个全局唯一的递增编号,利用这个特性可以实现高级协调服务;高性能:基于内存操作,服务于非事务...
2020-03-26 15:48:13
692
原创 Docker入门一docker的安装和镜像打包、拉取、运行、发布
docker 就是一个容器,用来打包项目,批量发行用的,基于linux服务器linux ,可以看作集装箱式隔离linux服务器=linux内核+文件系统docker服务=linux内核共享+自己的文件系统首先安装Docker,比较简单1、安装依赖docker依赖于系统的一些必要的工具,可以提前安装。yum install -y yum-utils device-mapper-persi...
2020-03-15 17:47:34
1073
原创 spring容器中Bean的生命周期——绝对简单易懂!
先上总结!1、bean生命周期执行的方法可以分为两部分,A、初始化和销毁(init-method 、destroy-method) B、初始化前后进行的工作(postProcessBeforeInitalization、postProcessAfterInitialization)2、以上调用顺序如下1 构造器及赋值 (get,set,构造器赋值等)2 postProcessBefor...
2020-03-04 16:16:00
2770
1
原创 延迟队列的使用和理解——附代码
package com.example.demo.ThreadPool;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;/*** * 定义消息体,必须实现Delayed且重写方法 */public class DelayQueneMessage implements Delayed {...
2020-02-21 17:31:28
207
原创 多线程——线程安全相关问题
类的线程安全定义如果多线程下使用这个类,不管多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性内存的可见性不做正确的同步,在多个线程之间共享状态的时候,就会出现线程不安全。怎么才能做到类的线程安全?栈封闭所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。无状态没有任何成员变量的类,就叫无状态的类让类不可变让...
2020-01-13 16:24:08
322
原创 线程池的理解和使用(附代码说明)
为什么要用线程池?1、降低资源的消耗。降低线程创建和销毁的资源消耗;2、提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间3、提高线程的可管理性。线程池模型我们不妨动手写一个线程池,主要有以下几个核心概念,阻塞队列中待执行的任务,线程正在执行的任务,线程数。package com.xiangxue.ch6.mypool;import java.u...
2019-12-20 11:34:56
345
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人