当前位置: 首页 > news >正文

Jackson 序列化的隐性成本

我们常以为接口的瓶颈在数据库或业务逻辑,但在高并发、海量请求下,真正吞噬 CPU 的,可能是“把对象变成 JSON”的那一步。当监控把序列化时间单独拆出来,你会惊讶它能让账单失控。这篇《The Hidden Cost of Jackson Serialization》对我启发很大:默认好用的 Jackson,在某些场景可能成为热路径的成本中心。下面顺手分享给大家参考,以下内容翻译整理自 《The Hidden Cost of Jackson Serialization》。

Jackson 很强大,直到你看到它真正让你付出了什么代价。我们的 REST API 正在大把大把的花钱。每个 JSON 响应要消耗 3–5ms 的 CPU 时间。把它乘以每天 5000 万次请求,你就会得到一张能让 CTO 掉眼泪的 AWS 账单。罪魁祸首?Jackson。Java 生态里最流行的 JSON 库,那个大家几乎不假思索就会用的默认选项。

事情是怎么开始的?

我们有一个标准的 Spring Boot 微服务,很普通。

@RestController
public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return userService.findById(id);}
}

干净、简单,跟每篇 Spring Boot 教程教你的几乎一样。

Spring Boot 默认用 Jackson 把 Java 对象转换成 JSON。你不用配置什么,它就能工作。

直到你看了指标数据。

当头棒喝

我们的监控面板显示出一些奇怪的东西:

  • 数据库查询时间:8ms
  • 业务逻辑:2ms
  • JSON 序列化:47ms

等等,什么?

实际工作只花了 10ms。把结果转换成 JSON 花了 47ms。就像你做饭用了 2 分钟,装盘却花了 10 分钟。

我以为是测量误差,于是跑了一个 profiler。

Method                          Time    Calls
-------------------------------- ------- -------
Jackson.writeValueAsString()     47ms    1
UserService.findById()           8ms     1

不是。Jackson 确实在每次请求里,用 47ms 序列化一个简单的 User 对象。

排查开始

我抓起我们的 User 实体,看了看:

@Entity
public class User {private Long id;private String email;private String firstName;private String lastName;@OneToMany(fetch = FetchType.EAGER)private List<Order> orders;@OneToMany(fetch = FetchType.EAGER)private List<Address> addresses;@ManyToMany(fetch = FetchType.EAGER)private List
http://www.dtcms.com/a/520456.html

相关文章:

  • ProcDump 学习笔记(6.5):指定转储文件路径与命名策略
  • STM32项目分享:智能植物灌溉系统
  • 高级软考-系统架构设计师知识点1
  • 东城企业网站建设潍坊网站优化培训
  • 信阳网站建设哪个好河北邢台重大新闻
  • 《Python 自动化上传豆瓣电影到飞书:十个真实踩坑记录与避坑指南》
  • ubuntu24.4下载mysql报错解决、下载maraiDB
  • 建设银行网站修改预留手机号企业展厅设计公司100%正品保障
  • 数据结构 08 线性结构
  • 【Linux网络】Socket编程UDP
  • 互动网站建设多少钱wordpress怎么开发app
  • Linux 常见命令汇总:从入门到实用的效率工具包
  • Linux修炼:进程控制(二)
  • 机器学习笔记-假设检验
  • 自然语言处理(NLP)—发展历程(背景、技术、优缺点、未来方向)
  • 【实战】自然语言处理--长文本分类(1)DPCNN算法
  • 兰州网站建设多少钱网页制作和设计实验目的
  • 专门做动漫的网站有哪些网站开发文件结构组成
  • Flexbox
  • `.bat`、`.cmd`、`.ps1`的区别
  • MySQL 安装教程(Windows 版):从入门到配置全流程
  • 网站建设责任分解杭州市建筑业协会官网
  • 【数据库】MySQL数据库基础
  • 四川省建设厅官方培训网站网站顶部
  • 图解Vue3 响应式,手动实现核心原理
  • 压缩与缓存调优实战指南:从0到1根治性能瓶颈(三)
  • 【设计模式】外观模式/门面模式(Facaed)
  • 矽塔 SA8206 36V/2.5A 过压/过流保护芯片
  • 莱州做网站网站建设给客户看的ppt
  • Windows - Maven 安装到 IDEA 配置全流程