java
文章平均质量分 76
gentlezuo
热爱技术,喜欢思考与分享
展开
-
APM工具对比
市面上有很多分布式链路监控的工具,客观对比。调研市面上的APM(Application Performance Management)理论模型大多都是借鉴,Google Dapper论文。我最近也在选取使用哪一个工具,这里的对比是在Spring Cloud 中的使用。对比三种工具:zipkin:Twitter公司开源的一个分布式追踪工具,被Spring Cloud Sleuth集成,...原创 2019-07-16 21:28:56 · 17566 阅读 · 0 评论 -
druid连接池RemoveAbandanded导致的性能问题
DB driuid连接池 removeAbandanded 配置导致CPU使用率飙高单机压测发现请求QPS不高也很吃CPU,通过观察火焰图和热点代码发现是获取DB连接池的问题。DB连接池底层使用了driuid,并且将removeAbandanded默认配置为true。在com.alibaba.druid.pool.DruidDataSource#getConnectionDirect中有一段逻辑if (removeAbandoned) { StackTraceElem原创 2021-09-19 15:29:22 · 796 阅读 · 0 评论 -
java日志总结系列4-log4j2配置及常见问题
java日志总结系列4-log4j2配置及常见问题java日志总结系列1-日志规范文章目录java日志总结系列4-log4j2配置及常见问题log4j2配置日志常见问题log4j2配置配置可参考 https://logging.apache.org/log4j/2.x/manual/configuration.html几个注意的点Logger是一个树形结构,最上层是Root,一个日志如果没有匹配的logger,最终会走到Root,即使匹配到了一个Logger,没有配置additivity,也会原创 2021-05-29 22:35:04 · 232 阅读 · 0 评论 -
java日志总结系列3-大型日志收集处理系统
java日志总结系列3-大型日志收集处理系统文章目录java日志总结系列3-大型日志收集处理系统日志系统架构一些问题总结之前说到日志可以存储到磁盘,但是有如下问题:微服务架构下,一个服务部署在不同的机器上,排查问题时需要登录不同的机器grep日志,显然不是一个好的做法。4根据日志的内容制作报表,配置告警不易实现…因此通常大型服务日志都是存储在一个日志系统中,该日志系统包含日志收集功能、日志存储功能、日志查询功能、其他根据日志数据开发的功能,例如告警等。日志系统架构日志系统需要解决如下几件原创 2021-05-29 17:06:25 · 1811 阅读 · 0 评论 -
java日志总结系列2-日志框架
最近在进行日志标准化治理,准备做一番总结。本章讲述日志框架、日志实现。理清日志门面:SLF4J、JCL日志实现:JUC、log4j、logback、log4j2、slf4j文章目录java日志总结系列2-日志框架日志门面SLF4JJCL日志具体实现log4jlogbacklog4j2jucslf4j-simple项目中SLF4J搭配日志实现`SLF4J+logback``SLF4J+log4j``SLF4J+JUC``SLF4J+log4j2``其他`使用SLF4J替换其他日志框架总结注意事项jav原创 2021-05-29 15:08:58 · 239 阅读 · 2 评论 -
java日志总结系列1-日志规范
最近在公司做日志标准化治理,准备总结一些日志相关的文档。文章目录java日志总结系列1-日志规范日志级别日志内容日志注意事项java日志总结系列1-日志规范日志是系统的重要组成部分,用于记载系统的执行记录、审计、排查问题、数据采集等。日志需要持久化,通常日志仅仅需要持久化到磁盘,或者存储到ES,有些场景也需要将日志存储到MySQL中,例如重要的请求日志、用户抽奖的执行记录、提现操作等。本系列主要讲述java系统中存储到文件、ES中的日志。日志级别由高到低可分为error、warn、info、de原创 2021-05-28 22:23:46 · 462 阅读 · 0 评论 -
数据迁移:双写调研
注:没有实践过,完全是为了学习目的目的:将A库中N张表中的数据迁移到B库的M张表中,在B库中做分表操作。在迁移过程中要求不停服。方案方案:双写具体流程在B库中建表,在代码中实现双写的开关以及功能(读老库,增删改老库和新库)由于只读老库,所以新库中的功能实际上未对外提供数据,即使期间新库数据存在问题,依旧不影响服务功能新增操作:老库和新库都新增,因此新增的数据新老库是一致的。(新老库自动生成的主键不一致问题,可以先插入老库,得到id,再插入新库,插入数据带上id)删操作:删除操作幂等,原创 2021-02-10 12:14:05 · 1995 阅读 · 1 评论 -
OGNL简介
Ognl文章目录Ognl数据结构访问属性实例属性静态属性赋值调用方法实例方法静态方法操作符集合操作构造访问投影选择选择第一个选择最后一个索引机制官方文档例子Ognl (Object-Graph Navigation Language)是对象图导航语言,用于访问一个容器中的对象的属性,调用对象的方法。主要是为了方便访问对象的属性和方法。应用Struts2arthas中,命令参数数据结构OgnlContext是一个容器,本质是一个Map,key是String类型的值,value是对象。因此它具原创 2020-11-29 10:39:28 · 2227 阅读 · 1 评论 -
单元测试进阶Mockito
Mockito文章目录Mockito简介使用准备工作创建mock对象验证mock对象是否执行了某些操作打桩参数匹配器验证方法的调用次数/最多/最少/从不等返回值为void的方法调用时抛异常打桩验证执行顺序验证没有任何交互检查是否还有没有验证的交互简化Mock创建,注解驱动连续打桩回调打桩doReturn()、doThrow()、doAnswer()、doNothing()、doCallRealMethod()系列方法的运用监视真实的对象resetdetail自定义失败打印信息laambda支持原理限制简原创 2020-08-29 14:06:16 · 2059 阅读 · 0 评论 -
HBase运行机制概览
HBase运行机制概览原创 2020-08-21 23:14:54 · 264 阅读 · 0 评论 -
Junit单元测试简要总结
Junit单元测试文章目录Junit单元测试简介常用注解使用参数化测试其他简介单元测试在开发中占据很重要的地位,它能发现问题,提高效率,在java中应用最广泛的单元测试框架就是Junit,它被集成在了多个框架或者工具中,例如IDEA、Spring等。通常我们使用注解的方式使用Junit。常用注解注解描述@Test注解于方法上,表示作为测试案例@Before注解于方法上,在每一个注解案例运行前,都会执行此方法@After注解于方法上,在每一个注解案例执行后,都原创 2020-08-21 23:10:20 · 1380 阅读 · 0 评论 -
maven总结
maven原文章地址:maven总结简介maven是一个Apache下由java开发的开源项目。基于对象模型的概念(POM),Maven利用能管理一个项目的构建、报告和文档等步骤。需求当写一个项目的时候往往需要引入第三方依赖包,但是一个第三方包可能又要依赖其他的包,一旦依赖过多,就会给开发人员造成很大的负担,而且容易出错。maven使用一个仓库存储需要的第三方库,而且可以自动解决依赖问题...原创 2019-05-30 16:29:19 · 212 阅读 · 0 评论 -
springcloud-链路追踪skwalking
文章目录简介原理简介搭建下载服务端配置数据持久化方式MySQL数据自动清理告警配置客户端UI简介在一个微服务中,链路追踪能够准确监控所有调用链路,从而定位慢调用,失败调用。简介skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。发起者是吴晟,现在是Apache项目。官方文档原理简介skywalking分为四个部分:探针,平台后端,存储,UIProbes,探针,探针因使用的语言不同而不通,收集数据并且格式原创 2020-08-01 11:02:24 · 1408 阅读 · 0 评论 -
SpringCloud-链路追踪sleuth
文章目录版本说明简介术语Zipkin示例启动zipkin依赖配置文件验证使用rabbitmq进行链路数据传输(可选)日志收集(可选)Elasticsearch+Kibana+Logstash在分布式系统中,链路将总是十分重要。版本说明组件版本说明zipkin2.12.9rabbitmq3.7.15erl10.4rabbitmq依赖elasticsearch6.5.3使用7.x会与zipkin冲突kibana6.5.3使用7.x会与zi原创 2020-08-01 10:59:42 · 273 阅读 · 0 评论 -
SpringCloud配置中心nacos
文章目录配置nacos使用mysql持久化解决不支持mysql8.x的问题登录问题依赖配置文件发布于获取配置发布获取启动类集群搭建nacos配置配置文件nacos的配置功能比springcloud原生的要强大,更简洁。配置nacos使用mysql持久化创建一个mysql数据库,例如create database nacos将nacos/cofn/nacos-mysql.sql中的sql语句在该数据库中执行。修改nacos/conf/application.properties,在文件之后追加原创 2020-08-01 10:55:15 · 421 阅读 · 0 评论 -
SpringCloud注册中心nacos
文章目录nacos简介下载安装服务注册于发现依赖配置文件启动类集群配置部署nacosapplication.yaml其它参考为什么要使用nacos?nacos简介nacos=consul+config,既可以作为配置中心,还可以作为注册中心,并且具有web ui,可以在线优雅的进行配置,服务下线,监控等。减少组件的集合。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。单论注册的功能来来说,它与co原创 2020-08-01 10:53:10 · 210 阅读 · 0 评论 -
SpringCloud注册中心Consul
文章目录简介下载安装单机版搭建依赖配置文件启动类效果集群搭建consul参数agent参数vs others参考既然eureka不再维护,那么我们可以考虑其他的组件,比如consul。consul生态很好。简介Consul的主要特点是:服务发现:Consul的客户可以注册服务,并且其他客户可以使用Consul来发现给定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到它们所依赖的服务。运行状况检查:Consul客户端可以提供任意数量的运行状况检查,这些检查与给定服务(“是Web服务器返回2原创 2020-08-01 10:50:39 · 151 阅读 · 0 评论 -
SpringCloud注册中心eureka
文章目录eureka服务端搭建依赖配置文件启动类服务注册依赖配置启动类流程简述在springcloud中eureka被用来作为一个注册中心组件。但是eureka2.x已经不再维护了,不过目前使用还是没什么问题,而且1.x也够用了。而且还有多种注册中心可供选择,比如consul。eureka服务端搭建依赖<parent> <groupId>org.springframework.boot</groupId> <artifac原创 2020-08-01 10:45:01 · 114 阅读 · 0 评论 -
Java排查问题工具
文章目录jinfo用法例子问题jps用法例子jconsole用法例子jcmd用法例子jstack例子jmap使用例子jhat使用例子jstat使用总结jdk自带一些工具来查看或更改java程序的信息。在程序出现问题时可以用它们分析。jinfojinfo用来查看JVM的参数,更改参数等。用法$ jinfo Usage: jinfo [option] <pid> (to connect to running process) jinfo [optio原创 2020-07-29 22:34:16 · 624 阅读 · 0 评论 -
JMH基准测试
文章目录简介使用测试目标环境配置测试注解@BenchmarkModeWarmupMeasurementThreadsForkoutputTimeUnit@BenchmarkParamSetupTearDownState总结简介本文转载自https://gentlezuo.github.io/2019/11/06/jmh%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95通...转载 2019-11-09 18:00:06 · 332 阅读 · 0 评论 -
自定义java注解
java注解java注解java内置注解自定义注解元注解注解支持的属性原文章地址java注解概念:注解用于给java代码添加元数据,在编译或者运行时解析处理这些元数据。注解可用于包,类,字段,方法,参数等。可以将理解为给这些包或类等等添加一个标签。在使用框架的时候会发现各种框架都实现了自己的注解。实际上就是在类扫描的时候特殊处理这些含有注解的类或方法或字段而已。java内置注解@O...原创 2019-05-23 18:19:33 · 90 阅读 · 0 评论 -
java反射
java反射java反射Class类获取Class对象的方法Class类的常用的方法Constructor类常用方法Field类常用方法Method类常用方法配置文件+反射工具类Modifier常用方法一些常量缺点原文章地址java反射java反射最近使用到了java反射,记一笔笔记。定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,...原创 2019-05-27 16:32:14 · 191 阅读 · 0 评论 -
StackOverflowError
StackOverflowErrorStackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。在栈中会保存局部变量,操作数栈,方法出口等等。jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。典型的例子:public class ...原创 2019-05-26 20:31:51 · 95425 阅读 · 6 评论 -
java并发编程:进程和线程
java并发编程:进程和线程java并发编程:进程和线程进程的由来线程的由来java并发的问题其他参考java并发编程:进程和线程进程的由来为什么有进程:现在计算机的功能已经十分丰富了,可以一边看视屏,一边浏览网页等等。但是在计算机开始出现的时候,计算机的功能十分简单,人们输入特定的指令,计算机就执行该指令,但是当人们休息或者思考的时候计算机就不工作,效率十分低下。为了更好的利用计算机,...原创 2019-06-09 23:18:08 · 330 阅读 · 0 评论 -
springcloud系列导读
springcloud系列导读spring cloud是微服务的集大成者,它集成了许多优秀的工具,因此使用spring cloud 全家桶就可以很容易的开发微服务项目。它基于spring boot,因此配置简单,容易学习。zookeeper入门springcloud-erueka注册中心springcloud-consul注册中心springcloud-服务调用-robbin负载均...原创 2019-06-30 23:28:40 · 148 阅读 · 0 评论 -
垃圾回收-标记整理算法的两种实现
https://gentlezuo.github.io/2019/08/10/gc-%E6%A0%87%E8%AE%B0%E6%95%B4%E7%90%86%E7%AE%97%E6%B3%95%E7%9A%84%E4%B8%A4%E7%A7%8D%E5%AE%9E%E7%8E%B0/#more原创 2019-08-24 20:54:39 · 539 阅读 · 0 评论 -
计算机数值表示&Integer
计算机数值表示&Integer原码 反码 补码为什么在计算机中使用补码将减法转换为加法的正确性证明IntegerShort,Long,ByteDouble,Float原文章 计算机数值表示&Integer在分析Integer类之前,先复习一下在计算机中数值的表示原码 反码 补码有符号数在计算机中存储,用数的最高位存放符号, 正数为0, 负数为1原码:原码就是符号位加上真...转载 2019-05-22 16:47:55 · 496 阅读 · 0 评论