Xu Blog

分享生活与技术

FastJson 读取超大json文件引起OOM问题排查与解决

滚动阅读全文 背景 最近工作有一个需求,需要读取一个约2GB的json文件(存储了约3千万个json对象的集合),解析其中的每个json对象,并进行一些数据转换,最后把转换后的json对象存储到es中。json文件格式大概是这样的: [ { lng: 116.22 lat: 22.00, count: xxxx },...

XXL-Job源码分析(I)--调度中心启动

XXL-Job source code analysis(I)

滚动阅读全文 前言 XXL-Job是一个轻量的分布式任务调度平台,任务的定时调度管理是基于开源定时任务调度框架Quarts来实现的,任务的调度执行采用注册和RPC的方式实现,将任务的管理和执行进行了分离。我们先来了解一下调度中心的源码,调度中心主要负责任务的管理,本身并不复杂任务的业务逻辑,任务触发后,调度中心根据配置的相应规则将任务分配到执行器,执行器处理相应的业务逻辑。 ...

一次Redis内存飙升的排查

A troubleshooting of Redis memory soaring

滚动阅读全文 一、现象 在该项目中,多个微服务使用一台Redis虚拟机,项目开发完成后,进入试运行阶段,在项目平稳运行五天后,Redis使用的虚拟机内存在某一时刻突然飙升,很短的时间内内存耗尽,Redis虚拟机宕机,所有微服务连接Redis超时无法使用。 二、问题排查 怀疑在某一时刻出现大量写入数据导致内存飙升。我们的业务存到redis的数据量几乎是可以预估的,应该向之前一...

基于Semaphore实现QPS,吞吐率限制

One QPS limiter

滚动阅读全文 业务场景 在一个项目中需要频繁调用一个第三API接口来实现业务功能,但是这个第三方接口有QPS和吞吐率的限制,如果超过限制将请求失败;故我们需要在我们的业务功能中加上吞吐率(吞吐率 < QPS)的限制, 当达到限制时让当前的请求等待到下一个可执行时间段执行。 吞吐率实现 吞吐率的限制是当前时段内(1S内)最多能处理的任务数量,超过限制必须等待;这个有点类似生产...

利用反射+策略模式优化过多的if else 代码

Reducing "if else" code with Java Reflect and Strategy design mode

滚动阅读全文 前言 最近刚看完《设计模式之禅》,在写代码前总是想着能不能尝试用上一些设计模式。前几天看到一篇公众号推文利用策略模式来优化过多的if else代码,正好符合目前我面临的一个场景,作者使用一个枚举类来维护所有的策略,这样的话,没增加一个策略,都要去枚举类里增加相应的枚举常量,不太符合“开闭原则”。同时,随着策略的增加,这个枚举类源码的理解性也会变得越来差,也比较难维护。...