java

排查记录: Java所有接口卡死

线上接口, 每天凌晨三四点后开始卡死, 重启后恢复调用后等待两分钟, 然后504两分钟正好是nginx反代的超时时间排查过程日志把nginx和应用日志都找出来看了下, 没发现什么问题应用机器状态看了下cpu占用率/内存, 没问题磁盘占用也没问题应用状态通过jps查找到java进程然后jstack 进
2024-11-07

基于Redis ZSet的滑动窗口限流

private boolean limit() { String ip = ServletUtil.getClientIP(request); String banKey = "limit_ban_" + ip; Boolean b = redisTemplate.hasK
2024-10-29

ThreadPool和内部类的内存泄露

private void getItemInfo(String site) { // ... ExecutorService pool = Executors.newSingleThreadExecutor(); pool.submit(task); } getItemInf
2024-01-10

XXL-JOB 客户端执行流程

客户端内嵌服务器com.xxl.job.core.server.EmbedServer, 内建线程池, 基于netty的事件循环模型, 异步处理调度端的请求ThreadPoolExecutor bizThreadPool = new ThreadPoolExecutor( 0, 200, 60L,
2023-11-22

Kubernetes Cloud Native 实践 ( 五 ) 应用上云

全文目录Kubernetes Cloud Native 实践 ( 一 ) 安装Kubernetes Cloud Native 实践 ( 二 ) 简单使用Kubernetes Cloud Native 实践 ( 三 ) NFS/PV/PVCKubernetes Cloud Native 实践 ( 四
2023-06-13

使用字节数组创建String后通过getBytes()得到的数组与创建时不同

问题:使用默认编码创建字符串后,通过生成的字符串的getBytes()方法获得的数组与创建时的数组不同。demo代码如下byte[] bytes=new byte[]{-42, -48, -50, -60, -78, -30, -54, -44}; System.out.println(Arrays
2023-02-28

自定义HttpServletRequestWrapper报错

Bug代码public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { private final byte[] body; public BodyReaderHttpServletR
2023-02-28

sun.misc.CharacterEncoder#encode(byte[])自动添加\r\n

当编码的字节较长时,encode出来的字符串会自动加入\r\n进行自动换行。这是因为是rfc规范规定76个字符要换一次行导致编码后无法正常显示图片解决方法: 换个工具类
2023-02-28

Java重载匹配算法

算法如下找出全部可以调用的方法。(可以调用的方法意味着形參个数等于实參个数,实參的类型可以转换为方法形參的类型。)假设实參与形參的类型可以直接相应。则运行该方法。假设可以调用的方法仅仅有一个。则运行该方法。可以调用的方法不止一个时, 逐一作出推断: 假设一个方法的类型签名都可以赋值给还有一个方法。则
2022-11-29

浅谈ThreadLocal

ThreadLocal是为了避免共享, 避免锁竞争, 使用了空间换时间的思路若使用Map, Thread做Key, 则回到了问题本身, 仍会发生锁竞争, 降低效率所以数据实际上是存储在java.lang.Thread#threadLocals的 ThreadLocal相当于一个钥匙/桥梁去访问Thr
2022-11-28

站点版本更新后周期性卡顿分析

本站在今天发版后, 对线上应用自测时发现, 接口出现了周期性的卡顿, 在此记录一下排查过程怀疑是FULLGC影响的, 因为启动时内存确实分配的较少, 且有周期性, 遂调整设置. 重启后问题仍然稳定重现使用jmap -dump将堆内存信息以二进制的方式转储到文件, 使用jdk的jvisualvm工具查
2022-08-18

Java类加载器机制及应用

0x00 何时触发类加载动作显式加载通过ClassLoader的loadClass方法通过ClassLoader的findClass方法通过Class.forName隐式加载遇到new、getstatic、putstatic、invokestatic这4条字节码指令时对类进行反射调用时当初始化一个类
2022-08-08

MyBatis-Plus动态返回实体类

1. 自定义SqlSession@Slf4j public class GenericSqlSession extends DefaultSqlSession { private static final ThreadLocal<Class<?>> CTX = new ThreadLoca
2022-07-18

java.lang.ClassCastException: xxx cannot be cast to [C

上代码 public class Test { public static Map<String, Object> MAP = new HashMap<>(2); static { MAP.put("int", 1); MAP.put("string
2022-07-11

SpringBoot自定义枚举序列化方式

在平常web开发中, 或多或少的会使用到枚举类型但是springboot对枚举的序列化并不太符合实际开发需求比如public enum MerchantStatusEnum { NORMAL(100, "正常"), BAN(200, "封禁"); private fina
2022-06-22

Java9-17新特性总结

年底即将发布的SpringBoot3.0最低支持Java17版本这里记录下新语法和值得注意的库语法特性moduleJDK9模块系统 Java 9 模块的重要特征是在其工件的根目录中包含了一个描述模块的 module-info.java 文 件通过exports向外开放接口/类, 限定模块使用范围同时
2022-06-09

Slf4j+Logback MDC使用

MDC 可用于绑定日志上下文信息Slf4j: org.slf4j.MDCslf4j作为日志门面, 定义了相当多的规范例: 生成一个唯一id, 来区分输出的日志归属于哪次http请求效果20:43:30.204 [xid=1529443036298219520] [XNIO-1 task-1 ] I
2022-05-25

SpringBoot LocalDateTime序列化配置

项目中用LocalDateTime替换Date后, 许多地方需要增加配置配置Json响应格式化方式注册JavaTimeModule/** * 序列化LocalDateTime */ @Bean public JavaTimeModule javaTimeModule() { JavaTi
2022-05-25

Java服务高CPU占用代码排查方法

1.查找进程通过top -c命令可以确定出现问题的进程2.查找线程 接下来就要找到这个进程中是哪个线程出现问题这个确定也是比较简单的,只需要输入命令:top -Hp PID例top -Hp 9828 3.定位代码jstack 进程PID | grep 线程id的16进制 -c 显示行数jstack
2022-03-31