- 博客(264)
- 资源 (1)
- 收藏
- 关注
原创 Windows下Git Bash乱码问题解决
个人用的电脑是Mac OS,系统和终端编码都是UTF-8,但公司给配发的电脑是Windows,装上Git Bash在使用时会乱码。
2024-07-28 17:50:23 529
原创 Spring Data Redis 报错 WRONGPASS invalid username-password pair问题解决
spring data redis版本:3.2.5redis server版本:社区版6.0.2。
2024-07-25 19:51:47 970
原创 Spring Boot集成logback出现log.dir_IS_UNDEFINED问题
logging:log:(不要使用和-- 部分配置 --> < configuration debug = " false " scan = " false " >
2024-07-04 11:00:42 714
原创 Jmeter压测问题汇总
公司的Elasticsearch流量日益减少,经过评估,我们计划迁移到成本更低的Mysql集群上,需要对接口进行压力复测。原因是:在Java 17中,当消费者初始数组大小大于流大小时,stream.toArray()会抛出异常。原因是我在windows下设置了csv的绝对路径,但在服务器上没这个路径导致报错。截止到文章发表日,JDK17未修复此问题,换成17以下的版本即可。大多的Jmeter在使用GUI配置好后都会生成。
2024-05-09 18:52:53 410
原创 Spring Boot使用Logback将某些日志输出到单独的文件
重构了某个接口,想监控下新接口各个处理过程的时间,从而评估和监控日常性能。监控使用Spring自带的。
2024-04-30 17:32:38 1567 1
原创 SpringWebFlux RequestBody多出双引号问题——ProxyPin抓包揪出真凶
查看Flink日志发现了JSON解析失败,Flink是从Kafka拿数据,Kafka本身不处理数据,Kafka前面是埋点收集服务,这个服务是SpringWebFlux+ReactorKafka做的,收集到数据后对数据做一些解码(如UrlDecode,Base64Decode或者Aes解密等),写入日志并且扔进Kafka。仔细比对了大量日志,发现只有MacOs和Windows下的微信打开小程序时会出现这个问题,安卓,iOS系统的微信小程序不会出现这个问题,分别使用了一台Macos和Windows,成功复现。
2024-04-27 00:01:21 831 3
转载 JVM学习之垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、泛型API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池等。
2024-01-15 23:54:34 466 1
转载 JVM学习之垃圾回收相关概念
1、一般的垃圾回收算法至少会划分出两个年代,年轻代和老年代。但是单纯的分代理论在垃圾回收的时候存在一个巨大的缺陷:为了找到年轻代中的存活对象,却不得不遍历整个老年代,反过来也是一样的。2、如果我们从年轻代开始遍历,那么可以断定N, S, P, Q都是存活对象。但是,V却不会被认为是存活对象,其占据的内存会被回收了。这就是一个惊天的大漏洞!因为U本身是老年代对象,而且有外部引用指向它,也就是说U是存活对象,而U指向了V,也就是说V也应该是存活对象才是!而这都是因为我们只遍历年轻代对象!
2024-01-15 23:53:24 107
转载 JVM学习之垃圾回收概述和相关算法
垃圾回收概述Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。
2024-01-15 23:51:40 94
转载 JVM学习之字符串常量池
在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串内容相等的字符串,则返回池中的字符串地址。如果不是用双引号声明的String对象,可以使用String提供的intern方法:intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。2、使用 intern() 方法:由于数组中字符串的引用都指向字符串常量池中的字符串,所以程序需要维护的 String 对象更少,内存占用也更低。常量池就类似一个Java系统级别提供的缓存。
2024-01-15 23:49:54 122
转载 JVM学习之执行引擎
执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部。
2024-01-15 23:47:03 114
转载 JVM学习之对象的实例化内存布局与访问定位
因此一般来说(由字节码中跟随invokespecial指令所决定),new指令之后会接着就是执行init方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完成创建出来。将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。在Java程序的视角看来,初始化才正式开始。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。所有属性设置默认值,保证对象实例字段在不赋值可以直接使用。
2024-01-15 23:45:41 56
转载 JVM学习之方法区
原文链接:https://github.com/youthlql/JavaYouth方法区栈、堆、方法区的交互关系从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。栈、堆、方法区的交互关系下面涉及了对象的访问定位Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中
2024-01-15 23:44:10 127
转载 JVM学习之堆
从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为快速分配策略。据我所知所有OpenJDK衍生出来的JVM都提供了TLAB的设计。1、每个线程都有一个TLAB空间2、当一个线程的TLAB存满时,可以使用公共区域(蓝色)的。
2024-01-15 23:42:37 194
转载 JVM学习之虚拟机栈
具体问题具体分析如果只有一个线程才可以操作此数据,则必是线程安全的。如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。如果对象是在内部产生,并在内部消亡,没有返回到外部,那么它就是线程安全的,反之则是线程不安全的。/*** 面试题:* 方法中定义的局部变量是否线程安全?具体情况具体分析* 何为线程安全?* 如果只有一个线程才可以操作此数据,则必是线程安全的。* 如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。
2024-01-15 23:40:33 201
原创 Spring Cloud Feign上传文件
最近有个需求就是把图片格式化成300*240的大小并且作为小程序分享时的封面,A服务负责处理图片,B服务是公共服务,负责上传图片到OSS并且生成访问链接。
2023-12-27 18:06:08 741
原创 JVM学习之运行时数据区
JVM的PC寄存器是对物理PC寄存器的抽象模拟,是软件层面的概念,主要存储指令相关的现场信息。CPU只有把数据加载到寄存器才能使用。PC寄存器是用来存储指向下一条指令的地址,也可以理解为即将要执行指令的代码。由执行引擎读取下一条指令。它是一块很小的内存空间,小到可以忽略不计,也是运行速度最快的存储区域。在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程一致。任何时间,一个线程只有一个方法在执行,也就是所谓的当前方法。
2023-12-16 23:17:08 256
原创 JVM学习之类加载子系统
引导类加载器(Bootstrap Classloader)和自定义类加载器(User-Defined ClassLoader)从概念上来讲,自定义类加载器一般是指程序中由开发人员自定义的一类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个:注意:上面的ClassLoader是类似等级关系,不是继承关系。不是Java语言实现的。//获取系统类加载器。
2023-12-16 23:13:08 192
原创 JVM学习之JVM概述
Java虚拟机的启动是通过引导类加载器(Bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。在今天,Java程序的运行性能已经达到了可以和C/C++程序一较高下的地步。Hotspot VM是目前市面上高性能虚拟机代表作之一。Java编译器输入的指令流基本上是一种基于。HotSpot只使用的PC寄存器,所以是。它采用解释器与即时编译器并存的架构。JVM整体结构详细图。
2023-12-16 23:10:06 279
原创 Spring Boot 升级3.x 指南
先创建一个parent项目,打包类型为pom,继承自spring boot的parent项目然后把版本集中放在这个pom里面,示例如下
2023-11-23 20:08:18 1737
原创 Kafka Rebanlace次数过高问题
为什么会下线:1.心跳原因:hearbeat.interval.ms和session.timeout.ms2. 拉取间隔 : max.poll.interval.ms
2023-11-09 23:55:30 2536
原创 埋点日志最终解决方案——Golang+Gin+Sarama VS Java+SpringWebFlux+ReactorKafka
以上一步一个坑,有些是自己能力不够踩的,有些是为了解决某个问题踩的,最后终于消停的一阵。但又出现新问题了,这次问题没那么紧急,但比较重要。按照一般的剧本,上面的坑都踩完,基本上也就不会怎么去改这个服务,但新的问题还是出现了,就是容器化部署基础镜像要升级,从原来的debian10升级成了debian11,当然这是大版本,小版本几乎没周都会升级,升级时也不会通知项目组测试,运维直接升。在debian10升级debian11的时候,出现了一个问题细思极恐,就是zlib。
2023-10-25 19:29:33 1533 6
原创 cAdvisor监控Docker容器做性能测试
当前有个服务做技术选型,服务要求比较高的性能,要做性能测试。部署的环境是容器话部署,但申请新的容器流程较长,于是我打算在流程走完之前简单评估下性能,来确定技术选型是否可行。当前有一个测试服务器上装有Docker。
2023-10-20 19:11:25 453
原创 Redis不支持集群错误——ERR This instance has cluster support disabled
我没公司RedisServer权限,公司的RedisServer不是集群部署,就是单个,那就只能从配置上修改一下了,Configuration从Cluster变成Standalone即可。说明RedisServer不支持集群,网上很多文章都是修改Server配置重启解决此问题的,这不再赘述。最近手动配置了Redis的连接池。
2023-08-18 11:43:37 1737
原创 SpringBoot版本升级引起的FileNotFoundException——WebMvcConfigurerAdapter.class
就是这了,Jar里面没法排掉某个特定的类,只能在当前项目中创建一个和这个类一模一样的类,代码改成自己想要的。因为Java中,某个类(同一个classloader+全限定名)已经被加载了,就不会再次被加载,项目中的类加载优先于Jar包中的,又都是同一个类加载器加载,所以会优先加载到项目中类,Jar中的则不会被加载了,曲线救国。这TM和大海捞针没区别啊,这项目光依赖自己的包就几十个,大部分都是公司内部包,我都没有源码,这可怎么找啊,只能去报异常的地方碰碰运气了。里面翻找了一下,感觉最有价值的就是里面的。
2023-07-28 21:41:24 2083
原创 记一次Mysql慢SQL优化过程
讲道理的话,连结查询的字段一定是要加索引的,这个表因为历史原因没有加,最开始我感觉这玩意儿正常人都会加吧,结果就是没有,可能当时设计人员认为没有很多数据吧。历史问题就不追究了,主要是要知道怎么去定位问题和解决问题。
2023-07-21 18:50:23 161
原创 Nginx接收Http协议请求转发使用Https协议
公司使用阿里的apigateway,规定不太友好,同是SIT环境,A系统的SIT1环境居然不能调用B系统的SIT2环境的接口。因为各个系统之间部署的SIT环境数量不同A系统可能只有1套,B系统可能有8套,这样的话,可能会随时切换调用B系统的环境,管理员不允许,于是想着用Nginx做下转发。因为A系统调用B系统是内部调用,不计划使用HTTPS,因为还要去申请证书,但是B系统调用入口必须使用HTTPS,这样就要求Nginx可以接收HTTP协议的请求,转发出去的协议是HTTPS。
2023-06-13 20:06:03 5523 2
原创 关于OpenResty+doujiang24/lua-resty-kafka写入kafka故障转移模拟测试——踩坑
某个ip如果一直无法访问就没法将请求消息正确发送到kafka,此ip恢复时即可正确发送到kafka
2023-03-22 21:16:39 1088
原创 nginx+lua写入kafka报buffered messages send to kafka err: not found broker
[error] 9#0: *4029703 [lua] producer.lua:272: buffered messages send to kafka err: not found broker, retryable: true, topic: xxx, partition_id: 11, length: 2
2023-03-13 20:34:03 717
原创 Zuul迁移至Spring Cloud Gateway踩坑记录
Zuul1.x已经不维护了,需要迁移。这里记录一下从Zuul1.x迁移到Spring Cloud Gateway 3.x遇到的坑
2022-11-29 13:46:41 1828
原创 Spring Boot Nacos配置无法覆盖@Value定义的默认值
SpringCloud Swagger2 Nacos配置无法覆盖@Value设置的默认值
2022-06-03 18:08:48 3864
原创 K8s部署Spring Boot Admin,Actuator监控(不使用主机名通信)
---------------- 特别感谢:wang dayu 同学整理 ----------------集成说明1.由于环境上部署无法访问pod地址,需要将client的客户端服务 url和管理网址进行转换覆盖pod的地址2.插件需要严格遵守与springboot,springcloud版本兼容性,具体对应关系请参考该地址:https://blog.csdn.net/q283614346/article/details/121146721以下集成案例以springboot 版本1.5.7.RE
2022-03-12 21:03:40 1528
原创 Lua将Nginx请求数据写入Kafka——埋点日志解决方案
缘起有一个埋点收集系统,架构是Nginx+Flume。web,小程序,App等客户端将数据报送至Nginx,Nginx将请求写入本地文件,然后Flume读取日志文件的数据,将日志写入Kafka。这个架构本来没什么问题,但是部署在K8s容器就有问题了,当前一个Nginx后面是3个Flume,Nginx根据渠道将日志写入web.log,mp.log,app.log,3个log文件各对应一个Flume将数据写入Kafka,遇到的问题首先是health check问题,K8s一个容器只能提供1个health ch
2022-01-28 20:10:29 5410
原创 JUC笔记(二)
打断park的线程: public static void main(String[] args) throws InterruptedException { Thread myThread = new Thread(()->{ System.out.println("park---->"); LockSupport.park(); System.out.println("unpark---->"); Syste
2022-01-23 20:08:14 450
C语言文件操作快速上手手册
2014-07-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人