Skip to main content

· 7 min read
加菲猫

alt text

封面图:牛逼了!2月编程语言榜单:Go首次进入前十

🌟 AI 相关

How to Cut RAG Costs by 80% Using Prompt Compression

RAG vs Fine-tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture

RAG vs Finetuning — Which Is the Best Tool to Boost Your LLM Application

大语言模型之LlaMA系列- LlaMA 2及LLaMA2_chat(上)

RAG还是微调?微软出了一份特定领域大模型应用建设流程指南

谷歌全新大模型突然发布!100万token完爆GPT-4,仅靠提示词就能学会新语言

扩展说明: 指令微调 Llama 2

社区供稿 | 图解大模型推理优化之 KV Cache

大模型性能优化之Prompt工程全面梳理:从zero shot到chain of thought再到花式XOT

大模型RAG问答行业最佳案例及微调、推理双阶段实现模式:基于模块化(Modular)RAG自定义RAG Flow

值得一看的大模型RAG问答总括性梳理:模块化(Modular)RAG范式的定义、构成及机遇

【有腔调的RAG】01 半结构化数据上的RAG

省钱!微软开源框架LLMLingua + LlamaIndex实现提示词压缩

Ollama Python开发包实例 | 基于本地部署开源大模型的Streamlit聊天应用

【隐私优先】Llama 2 + GPT4All + Chroma实现100%本地化RAG

大模型时代还不理解自注意力?这篇文章教你从头写代码实现

陈丹琦团队新作:数据量砍95%,大模型性能更强了!Less is More

【AI 初体验】 llama2与LangChain 的 SQLDatabaseChain

⭐️ Go & 云原生 & Rust 相关

从物理机到K8S:应用系统部署方式的演进及其影响

Leetcode 算法题解精选

牛逼了!2月编程语言榜单:Go首次进入前十

Go语言中常见100问题-#99 Not understanding how the GC works

Go语言中常见100问题-#98 Not using Go diagnostics tooling

一文搞懂Go GC演进史,讲的太细致了!

Rust 中的并发模型和所有权系统

Kitex:微服务架构下的高性能优化实践

探究 Go 的高级特性之 【处理1分钟百万请求】

探究 Go 的高级特性之 【领域驱动设计中篇】

用 Go 语言实现刘谦 2024 春晚魔术,还原尼格买提汗流浃背的尴尬瞬间!

还不敢写多线程程序?看看Go如何让并发控制简单有趣

从 fatal 错误到 sync.Map:Go中 Map 的并发策略

16. Go调度器系列解读(三):GMP 模型调度时机

15. Go调度器系列解读(二):Go 程序启动都干了些什么

14. Go调度器系列解读(一):什么是 GMP

13. 入门 go 语言汇编,看懂 GMP 源码

8. 看 Go 源码,你需要了解 unsafe.Pointer

5. golang map 源码的逐句解读

一文搞懂Kubernetes 部署策略

滚动更新和回滚部署在 Kubernetes 中的工作原理

Go 项目标准布局?Go 官方出指南了

📒 后端相关

阿里终面:Netty 如何做到单机百万并发

8种专坑同事 SQL写法,性能降低100倍,不来看看

亿级推送,得物是怎么架构的

详解Redis三大集群模式,轻松实现高可用!

阿里Java面试官:CopyOnWriteArrayList底层是怎么保证线程安全的

还搞不懂ConcurrentHashMap底层源码,看这篇就够了

只需七步,教你轻松解决Redis热点Key问题

一文详解Redis中BigKey、HotKey的发现与处理

Java 十亿行数据计算,最快6秒出结果,你能吗

从Kafka中学习高性能系统如何设计 | 京东云技术团队

由浅入深的介绍扣减业务中的一些高并发构建方案(上)

如何在微服务下保证事务的一致性 | 京东云技术团队

【Redis高可用系列】主从复制原理和复制方式分析

Redis删除数据后,为什么内存占用率还是很高

感觉Redis变慢了,这些可能的原因你查了没 (上)

感觉Redis变慢了,这些可能的原因你查了没 (下)

位图(bitmap)原理以及实现

亿万用户在线,一张bitmap统计全解密

如何使用Redis数据类型进行亿级别统计数据

MySQL事务未提交redolog能持久化到磁盘吗

结合MySQL更新流程看 undolog、redolog、binlog

📒 前端相关

致所有渴望学习Rust的人的信

前端项目里都有啥

白嫖ChatGPT4.0 (第二弹)

字节跳动最热门的 15 个前端开源项目

刘谦春晚魔术揭秘:约瑟夫环的数学魅力,JS实现下!

我写了一个根据项目自动切换node版本的插件,再也不用手动使用命令切换了

· 4 min read
加菲猫

alt text

封面图:Go1.22 正式发布!包含语言变化、性能提高、标准库变动等重要特性

🌟 AI 相关

MultiHop-RAG: Benchmarking Retrieval-Augmented Generation for Multi-Hop Queries

手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)

苹果为自家芯片打造开源框架MLX,实现Llama 7B并在M2 Ultra上运行

如何用LLM和自有知识库搭建智能Agent

万字详解专家混合:MoE模型

Prompt Engineering:大模型 PUA 指南!

Mixtral-8x7B 模型挖坑

精彩手绘全解:RAG技术,从入门到精通

单卡3小时训练专属大模型Agent-基于LLaMA Factory实战

白话Embedding:普通人都能懂的科普文

Mixtral 8x7B: 超越GPT-3.5与Llama 2 70B的稀疏混合专家架构新篇章

3B模型不输7B LLaVA!北大多模态MoE模型登GitHub热榜

GPT-4推理能力暴涨32%,谷歌新型思维链效果超CoT,计算成本可降至1/40

阿里大模型春节礼包来了:代码可执行率超GPT-4,1.5版本全系列开源

刚刚,谷歌弃Bard发布超大杯Gemini,全面对标GPT-4,前2个月免费!

无需RLHF显著提升GPT-4/Llama2性能,北大团队提出Aligner对齐新范式

手撕LangChain代码,新手请进

MoE 卷起来啦!又一微调版 Mixtral-8x7B 发布,试试效果怎么样

不是 GPT4 用不起,而是本地运行 Mixtral-8x7B 更有性价比

在 Mac 运行 OpenChat 3.5 大模型,AI推理APP仅2MB 完全可移植

⭐️ Go & 云原生 & Rust 相关

代码验证斯特林公式的准确性

一些笔记工具工具以及memos介绍

Go 1.22.0 可称之为一次史诗级更新

Go1.22 正式发布!包含语言变化、性能提高、标准库变动等重要特性

实现基于 Grafana Loki 的日志报警

齐活了,Grafana 发布大规模持续性能分析开源数据库 - Phlare

📒 后端相关

DDD落地:从携程订单系统重构,看DDD的巨大价值

一次由于八股文引起的内存泄漏

网易面试:请设计一个高可用性的软件架构,说明设计思路

这些年背过的面试题——MySQL篇

天天写业务代码,如何破局业务开发的本质

📒 前端相关

瀑布流优化:我把小红书的瀑布流虚拟列表撕出来了

心遇APP站内玩法H5体验优化实践

译:如何避免 SSR 渲染本地日期时的 FOUC 问题

译:危险的注水

译:React 19 计划推出的新 Hook

译:使用 Promise.withResolvers 延迟 Promise

2024 年你需要知道的 5 个 CSS 代码片段

Partial Prerendering 的 What、Why 和 How

2024 年如何启动 React 项目

MDH Weekly 120 - 《小册》

· 5 min read
加菲猫

alt text

封面图:图文吃透Golang net/http 标准库--服务端

🌟 AI 相关

Large Language Models for Mathematical Reasoning: Progresses and Challenges

A Comprehensive Survey of Compression Algorithms for Language Models

The Power of Noise: Redefining Retrieval for RAG Systems

Corrective Retrieval Augmented Generation

从零构建现代深度学习框架(TinyDL-0.01)

本地运行面壁智能的“贺岁模型”:MiniCPM 2B

「我在淘天做技术」2024年看AIGC是如何让1688主图焕发新春的

大模型推理框架RTP-LLM对LoRA的支持

LLM之LangChain(五)| 使用LangChain Agent分析非结构化数据

LLM之RAG理论(六)| 高级RAG指南和技巧

从零手搓MoE大模型,大神级教程来了

RAG进阶 多用户多文档

RAG 进阶 LlamaIndex多文档

RAG 进阶 多模态图片检索

RAG 进阶 半结构化数据

LlamIndex二 RAG应用开发

LlamaIndex 一 简单文档查询

使用 Docker 快速上手中文版 LLaMA2 开源大模型

部署必备—triton-inference-server的backend(一)——关于推理框架的一些讨论

TensorRT-LLM初探(一)运行llama,以及triton tensorrt llm backend服务化

H100推理飙升8倍!英伟达官宣开源TensorRT-LLM,支持10+模型

大语言模型推理提速:TensorRT-LLM 高性能推理实践

⭐️ Go & 云原生 & Rust 相关

Go1.22 新特性:性能提高、Trace 大修、工作区支持 vendor 等

json.Marshal为什么会对[]byte类型进行base64编码处理

Go调度器系列解读(二):Go 程序启动都干了些什么

Go语言中的Pinner.Pin

Kubernetes 调度器队列 - 设计与实现

Go语言通知协程退出(取消)的几种方式

Go语言中常见100问题-#97 Not relying on inlining

程序员才懂的乐趣:10亿行的挑战

Kubernetes 调度器 - 核心流程 (下篇)

Go调度器系列解读(一):什么是 GMP

Kubernetes 调度器 - 核心流程 (上篇)

图文讲透Golang标准库 net/http实现原理 -- 服务端

利用 ChatGPT 高效搜索Go问题:举一反三的思考方式,高效查找解决方案

Go语言中常见100问题-#96 Not knowing how to reduce allocations

从慢速到SIMG: 一个Go优化的故事

📒 后端相关

8种专坑同事的 SQL 写法,性能降低100倍,不来看看

批量执行Redis命令的四种方式!

阿里面试:设计一个大并发、大数据的系统架构,说说设计思路

码哥字节 124 篇优秀文章精选

Kafka性能篇:为何Kafka这么"快"

Redis 核心篇:唯快不破的秘密

链路追踪落地过程中的挑战与解决方案

美团面试:Sentinel底层滑动时间窗限流算法怎么实现的

字节二面:Spring Boot Redis 可重入分布式锁实现原理

纠正误区:这才是 SpringBoot Redis 分布式锁的正确实现方式

分库分表的 21 条法则,hold 住!

腾讯二面:epoll性能那么高,为什么

📒 前端相关

扩展你的前端知识库,毫无废话!

TypeScript 5.4 beta: NoInfer 类型、闭包类型分析优化、条件类型判断优化等

升级到 React 18 的经验和教训

· 7 min read
加菲猫

🌟 AI 相关

单卡3小时训练专属大模型Agent-基于LLaMA Factory实战

⭐️ Go & 云原生 & Rust 相关

#150 Go 并发模式介绍和创新创造【Go 夜读】

为什么 Golang Fasthttp 选择使用 slice 而非 map 存储请求数据

从 Context 看 Go 设计模式:接口、封装和并发控制

50 条争论的文章发生了啥:Go 标准库 encoding/json 真的慢吗

Kubernetes 控制器管理总结

使用cmux实现网络端口复用

毫巅之微---不同写法的性能差异 番外篇

2024年的Rust与Go

Go 1.22 rc2 刚刚发布,多个新特性等着大家 forloop,math/rand/v2,增强 http routing

Go 服务网络不通?net/http自带的这个工具帮你快速定位

golang pprof 监控系列(1) —— go trace 统计原理与使用

Go 定时器:Timer 和 Ticker

Go1.22 新特性:增强 http.ServerMux 路由能力,将有更强的表现力!

细节对线,让你写出更安全的 Dockerfile

Go 语言中高效切片拼接和 GO 1.22 提供的新方法

GO 中高效 int 转换 string 的方法与源码剖析

Go合集 | 上新 腾讯Go安全指南

《Go题库·16》读写锁底层是怎么实现的

《Go题库·15》go struct 能不能比较

Kubernetes GC 设计与实现

Go 夜读第 150 期 Go 并发模式介绍和创新创造

跟着老猫来搞GO-内建容器Map

这是我见过最酷的服务端日志收集方案!

Go语言中常见100问题-#95 Not understanding stack vs. heap

Go 语言实战:构建强大的延迟任务队列

为什么 Go1.22 for 循环要支持整数范围

📒 后端相关

万字详解微服务世纪难题:如何平滑拆分单体

没用过微服务?别慌,丐版架构图,让你轻松拿捏面试官

从4万行代码降到1.8万,腾讯视频竟然用DDD做架构重构

转转支付通道监控系统的搭建

微服务架构下网关的技术选型

Linux进程管理工具 Supervisor详解

SpringBoot + SpEL,轻松搞定复杂权限控制,非常优雅!

后端程序员必备:书写高质量SQL的30条建议

云音乐RPC稳定性建设与实践

临时抱佛脚必看|一个月速通高级系统架构设计师!

第一性原理:养猪还是读大学

第二遍读俞军的神作《产品方法论》,真香!

阿里面试:Sentinel熔断降级,是如何实现的

深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!

搞懂异地多活,看这篇就够了

一键部署 SpringCloud 微服务,yyds!

Redis、ZooKeeper、Etcd,谁有最好用的分布式锁

提炼设计框架,一文搞懂Redis/MySQL/Kafka为什么这样设计

腾讯一面:32 位 4GB 系统,访问 2GB 数据,虚拟内存会发生什么

1.5万字+30张图盘点索引常见的11个知识点

腾讯三面:一台服务器,最大支持的TCP连接数是多少

这些年背过的面试题——多线程篇

阿里二面:要保证消息不丢失,又不重复,消息队列怎么选型

使用双异步后,如何保证数据一致性

📒 前端相关

虚实之间有一期播客讲「拼多多出海的 - TEMU 增长背后黄铮的创业哲学和中企出海之路」听下来讲得很有逻辑,聊到了全托管模式如何简化,拼多多的传统技能低价,以及如何实现的低价,包括中国企业出海的几个阶段,很通俗易懂,值得学习。

https://www.xiaoyuzhoufm.com/episode/657fc03f991e2ee608f54f98

当你想将 feature 分支上的多个 commit 合并到 release 分支,并且希望在 release 分支上只看到一个合并提交时,可以使用 git merge --squash 命令:

# 确保你在 release 分支上
$ git checkout release

# 进行 squash 合并
$ git merge feature --squash

# 在解决完所有冲突后,需要将已解决的文件添加到暂存区
$ git add .

# 提交合并结果为一个新的单个 commit(注意:这里没有自动提交,需要手动提交)
$ git commit -m "Squashed commit from feature-branch: Implemented XYZ feature"

注意,在 GitLab 提 Merge Request,可以在 Merge Request 页面中勾选 squash commit 选项

合并代码遇到冲突,想回退到合并前的状态:

$ git merge --abort

一个小技巧,which 命令可以用来查找可执行文件的路径:

$ which npm

/Users/bytedance/.nvm/versions/node/v18.16.0/bin/npm

框架中的类型编程: Hono 中的模板字符串类型编程

框架中的类型编程:tRPC & Prisma 中的泛型应用

React 19 即将推出的 4 个全新 Hooks,很实用!

我用埋点让老板安静 (埋点篇)

Rust性能很高?不,它完全顶不住我的代码

[]深度解析Webpack打包过程(2万字预警)

MDH Weekly 119 – 《周刊重启和博客》

· 5 min read
加菲猫

🌟 AI 相关

专补大模型短板的RAG有哪些新进展?这篇综述讲明白了

用检索增强生成让大模型更强大,这里有个手把手的Python实现

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

⭐️ Go & 云原生 & Rust 相关

慢聊Golang协程池Ants实现原理

Kubernetes Networking Model & CNI

for-range一个函数,还可以这么用

跟我一起编写 Buildpacks:Go 版本篇

探索Cloud Native Buildpacks的奇妙世界

哈啰云原生弹性伸缩控制器实现细节

使用 Rust 后,我写 Go 的方法都变了!

Go1.22 新特性:Slices 变更 Concat、Delete、Insert 等函数,对开发挺有帮助!

Go 简单设计和实现可扩展、高性能的泛型本地缓存

Kubernetes HPA 设计与实现

从零开始:使用Prometheus与Grafana搭建监控系统

十分钟教你在 k8s 中部署一个前后端应用

Go 夜读第 149 期:如何设计现代云原生网关: Easegress

Go Context 到底放第一个参数传,还是放结构体里

优雅判断 interface 是否为 nil

高效I/O并发处理:双缓冲和Exchanger

📒 后端相关

CPU中的高科技:流水线、超标量、SIMD

让你的代码运行更快:掌握零拷贝技术

电商库存系统的防超卖和高并发扣减方案 | 京东云技术团队

向上管理:让你主动汇报就这么难

RocketMQ 事务消息初体验

云音乐服务端可视化编排平台 TangoFlow 设计与实现

八分钟了解一致性算法 -- Raft算法

代码之外:工程师的成长进阶秘籍

复盘总结,不要错失最大财富

为了让小白也能看懂这个死锁case,我请来了小黑

阿里二面:要保证消息不丢失,又不重复,消息队列怎么选型

SpringCloud 远程调用为啥要采用HTTP,而不是RPC

业务型团队开发生存指南

DDD领域驱动工程落地实战

支付宝:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!

DDD 四层微服务架构,开箱即用!

2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

Redis 除了缓存,还支持哪些场景

Spring Boot + 规则引擎 URule,太强了!

单租户时代:SaaS范式转移

系统的可观察性是指什么

你管这破玩意儿叫高可用

如何判断业务做不做,什么是UE模型

并发编程的12条规范

性能优化2.0,新增缓存后,程序的秒开率不升反降

📒 前端相关

前端性能优化手册 - RoadMap

React 代码如何跑在小程序上

Taro编译mini-runner包的作用

穿越时空:2023年前端技术盘点与2024年技术展望

Monorepo 项目实现共享 Tailwind 配置

前端食堂技术周刊第 111 期:JS Rising Stars、2024 年如何写 CSS、两个 React、npm 年度回顾

· 7 min read
加菲猫

🌟 AI 相关

中信建投 | AI前沿系列(一):混合专家模型技术(MoE)

《开源大模型食用指南》发布,7个小时,一杯奶茶速通大模型!

Stable Diffusion XL Turbo 文生图和图生图实践

在 Nvidia Docker 容器编译构建显存优化加速组件 xFormers

Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用

节省时间:AI 模型靠谱下载方案汇总

修复 OpenCV 依赖错误的小工具:OpenCV Fixer

⭐️ Go & 云原生 & Rust 相关

Linux 6.8 网络优化, 大量并发连接的TCP性能提高40%左右

深入探索 Rust 中的 Panic 机制

探究 Go 源码中 panic & recover 有哪些坑

从《100 Go Mistakes》我总结了什么

3.深入TiDB:执行优化讲解

亲测体验Go语言模糊测试

Go 发布了一个非安全补丁的 Go 1.21.6

Go1.22 新特性:新的 math/rand/v2 库,更快更标准!

每秒百万数据点 Go 应用监控系统演进

别再用GDB了,一文掌握Go最好用的调试器Delve

Kubernetes CronJob 设计与实现

[go 面试] 实现服务高可用的策略和实践

我是如何实现Go性能5倍提升的

深入理解Go标准库-ServeMux的使用与模式匹配

深入理解Go标准库-http server的启动

使用 Grafana 和 Loki 监控传说中的武当纵云梯

Grafana 教程 - 构建你的第一个仪表盘

成本更低、更可控,云原生可观测新计费模式正式上线

Kubernetes Job 设计与实现

依赖Kafka的Go单元测试例解

Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围

Go运行时的并发原语

Go语言中常见100问题-#94 Not being aware of data alignment

Go 语言中 defer 使用时有哪些陷阱

Go语言之父的反思:我们做对了什么,做错了什么

学习C++20, 为Go的atomic类型插上一双翅膀

📒 后端相关

一张图总结架构设计的40个黄金法则

这些年背过的面试题 — 架构设计篇

这些年背过的面试题——Spring篇

mysql 的 binlog、redolog、undolog 是啥:

  • Binlog(二进制日志):
    • 用于复制:在主从复制中,从数据库会重放主数据库中存储的 binlog,以实现主从同步。
    • 数据库恢复:binlog 可以用于数据库的按时间点还原。
  • Redo log(重做日志):
    • 确保事务的持久性:在事务提交前,redo log 会将事务的修改操作记录下来,以确保在系统崩溃或重启时,可以重新执行这些操作。
    • 防止脏页写入:在系统崩溃时,redo log 可以防止脏页(未提交的数据页)被写入磁盘。
  • Undo log(撤销日志):
    • 用于事务的回滚:在事务执行过程中,undo log 记录了事务修改前的数据版本,以便在事务回滚时恢复数据。
    • 多版本并发控制(MVCC):undo log 支持数据库的多版本并发控制机制,允许事务在不加锁的情况下读取一致的数据。

这些日志文件在 MySQL 中扮演着不同的角色,确保了数据库的一致性、持久性和并发控制。

使用懒加载 + 零拷贝后,程序的秒开率提升至99.99%

万字+20张图探秘Nacos注册中心核心实现原理

7000字+30张图看懂分布式追踪系统原理

拒绝用复杂度自慰:下云高可用的秘诀

公司为什么要使用OKR,目的是什么

阿里面试:说说Rocketmq推模式、拉模式

分布式事务概述与项目实战

分布式锁最终解决方案是RedLock吗?为什么

刷了四百道算法题,我在项目里用过几道呢

烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了

抖音提前批二面:为啥不推荐使用外键

增加索引 + 异步 + 不落地后,从 12h 优化到 15 min

📒 前端相关

有了它 Antd 样式覆盖不要太爽

一文带你从0到1做性能优化——国际化业务中台性能优化实践(上)

Bun 如何设置 npm registry,有时会用到 bunx 命令,会自动下载 npm 包,因此需要配置 npm registry:

# 在根目录建一个 `.bunfig.toml` 配置文件
$ vi $HOME/.bunfig.toml

写入如下内容:

[install]
# set default registry as a string
registry = "https://registry.npmjs.org"

参考:https://bun.sh/docs/install/registries

两个 React

2024 年前端预测

业务中后台用户体验优化方法论总结(体验篇)

分享4 个你可能感兴趣的 TikTok 前端面试题

Chrome 三方 Cookie 禁用已正式开始!

使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

· 10 min read
加菲猫

🌟 AI 相关

GPT-4 Technical Report

Today's top trending papers in Computer Science

⭐️ Go & 云原生 & Rust 相关

小红书可观测 Metrics 架构演进,如何实现数十倍性能提升

Java与Go到底差别在哪,谁要被时代抛弃

既然问题是 GC 占用的 CPU 过高,首先我们分析一下 CPU 热点,进一步确认一下问题。

$ go tool pprof -seconds 30 https://<测试域名>/debug/pprof/profile

这个命令用于进行 30s 的 CPU 性能分析,在完成之后会进入 profile 的交互工具:

Alt text

这里直接输入 top 10 可以输出 flat 占比最高的 10 个函数,可以看到 runtime.mallocgc 的 cum 占比已经达到了 15%,占用了快到 3s CPU 时间。

Flat vs Cum:

  • Flat 占比是指这个函数自身的代码使用了多少 CPU,不计算子函数的耗时。
  • 而 Cum 则代表这个函数实际执行消耗了多少 CPU,也就是包括了所有的子函数(和子函数的子函数...)的耗时。

交互工具这里输入 web 就会自动生成调用图(callgraph)并在浏览器里打开 ,限于文档空间这里只展示重要的部分 :

Alt text

先分析一下主流程,这里业务逻辑一共占用了 54% 左右的 CPU(最上面的 endpoint.handler 方法),再往下看,其中 33% 是 RPC 调用(左下角的 client.Invoke),12% 是结果输出(右边的 endpoint.httpOutput,包括写出 HTTP Response,日志上报,监控)。剩下 9% 左右就是实际的各种业务逻辑了,因为非常分散且没有集中的点,所以图上没有显示出来。

纵观这个图可以看出,除了 HTTP/RPC 网络调用占用了大部分 CPU 外,并没有其他很明显的 CPU 热点,这就让最后一个热点凸显了出来:

Alt text

GC 占用的 CPU 在这次 Profiling 过程中占了 15%,比业务逻辑还高!到这里基本确认,GC 一定存在某些问题。

我们可以用另一个 pprof 工具 allocs 来确认猜测是否成立,这个工具会记录堆上的对象创建和内存分配,只需要把上面的 HTTP Path 最后的 profile 换成 allocs 即可:

$ go tool pprof -seconds 30 https://<测试域名>/debug/pprof/allocs

和 CPU Profile 不一样,Allocs 的 Profile 会记录四个不同的信息,可以输入 o 查看 sample_index 的可选值:

Alt text

  • alloc_object:新建对象数量记录;
  • alloc_space:分配空间大小记录;
  • inuse_object:常驻内存对象数量记录;
  • inuse_space:常驻内存空间大小记录。

一般来说,inuse 相关的记录可以用于排查内存泄漏,OOM 等问题。这里我们是 GC 的问题,主要和内存申请和释放有关,所以先看下 alloc_space:

输入命令,sample_index=alloc_space,然后再 top 10 看下:

Alt text

可以发现,这 30s 一共申请了 1300M 的内存,其中绝大多数都是框架和框架组件,比如 RPC 的网络读取(consumeBytes, ReadFrame),pb 的解析和序列化(marshal),名字服务的选址(Select),日志输出(log),监控上报(ReportAttr)。也没有明显的可疑对象。

我们进行一些简单计算:进行 profiling 的线上节点是 2C2G 配置,看监控单节点大约是 800 QPS 的流量,所以 30s 就是 2w4 的请求,申请了 1300M 的空间,平均一个请求就是大约 50KB 左右。

这个量也比较合理,毕竟一次请求我们需要储存 HTTP 包内容,解析成结构体,还需要调用两次 RPC 接口,最后做日志写出和监控上报,最后再给出返回值,50KB 的资源使用并不算大。而且绝大多数都是框架使用,即使用对象池把业务上的一些小对象复用,对这个内存申请也影响不大。

虽然这个步骤没有排查到想查的问题,但是却发现了一些其他的代码中的小问题,这里也顺便记录下。

首先,上面的 top 10 看不出任何问题,但是为了保险起见,看了一下 top 20:

Alt text

这里有三个我们业务代码里的函数,flat 都很少,占比加起来也不到 4.5%,不过既然发现了他们 ,就深入看一下函数里各行的分配情况,看看有没有什么问题。

只改一个参数让Golang GC耗时暴降到1/30!

字节跳动云原生成本治理落地实践

Go 的 DDD 工程化项目实践

Rust 的所有权、借用和生命周期

Kubernetes Deployment 滚动更新实现原理

[go 面试] 分布式事务框架选择与实践

我是如何实现Go性能5倍提升的

完善 Golang Gin 框架的静态中间件:Gin-Static

Kubernetes 为什么需要 Ingress

Uber Go 出了个静态分析工具 NilAway,还挺实用!

Go语言中常见100问题-#93 Not taking into account instruction-level

Rust使用gRPC

这些流行的K8S工具,你都用上了吗

Go测试的20个实用建议

『每周译Go』Go 的抢占式调度(文末有彩蛋)

了解go在协程调度上的改进

Go 语言为什么不支持并发读写 map

第一篇 旧话重提:获取和利用 goroutine id, machine id 和 process id

📒 后端相关

HBase深度历险 | 京东物流技术团队

项目中遇到一个问题,需要记住弹窗频控,一般来说跟着设备走,也就是在前端缓存。如果需要以用户维度,需要怎么设计,可以用 Redis Bitmap 实现。

Redis Bitmap:实现千万级用户签到的秘密武器

这些年在阿里学到的方法论

架构面试:全链路压测,你是怎么设计的

阿里面试:如何保证RocketMQ消息有序?如何解决RocketMQ消息积压

网易面试:亿级用户,如何做微服务底层架构

美团面试:亿级数据 在线统计,如何实现

美团面试:ES+Redis+MySQL高可用,如何试实现

字节面试:DDD架构,如何落地

微服务下必须了解的4种部署策略!

自从用了这款链路追踪系统,睡觉真香!!

逆风时刻,管理动作或成噪音

这些年背过的面试题——架构设计篇

还得是腾讯,捞了我一把!

文末福利丨2023哔哩哔哩技术精选技术干货

能ping通,TCP就一定能连通吗

微服务全做错了!谷歌提出新方法,成本直接降9倍!

备考两年,关于软考的经验都在这了

我在阿里做开发的高效打工技巧总结

一文讲透消息队列RocketMQ实现消费幂等

订单场景-基于Redisson实现订单号生成

📒 前端相关

【第3162期】前端APM指标采集大冒险

2023年最火的前端项目出炉,竟然是它

你的网站或许不需要前端构建(二)

2023 年 Node.js 性能状态

【第3157期】解锁前端新潜能:如何使用 Rust 锈化前端工具链

前端食堂技术周刊第 110 期:Vue3.4、新版 Vue DevTools 开源、AI 2023 年度总结合集