Lunarain_079's Inn

Back

Notes

Fragmented ideas and daily records

Page 1 - Total 9 notes
Wuhan

前段时间出现了一个小的线上死锁问题,推了一版新代码上线发现业务服务启动时间长的有些异常,看log发现一直卡着也没有报错,简单看了dump文件发现是skywalking的agent和主线程死锁了,简单记录一下

背景:JDK21, Spring Boot3.x skywalking 9.4.0

发生的逻辑大概如下: 线程 A (业务主线程/Spring 启动线程):

  • 正在加载某个业务类,拿住了 ClassLoader 的锁。

  • 加载过程中可能触发了某些监控逻辑,或者由于并发竞争,它需要等待管理系统的某些状态。

线程 B (SkyWalking JVMService 线程):

  • 执行 CPUProvider 的静态初始化。

  • 调用 ManagementFactory.getOperatingSystemMXBean()。

在 JDK 21 中,这个调用会触发 sun.management.ManagementFactoryHelper 或相关底层类的首次加载。

线程 B 去请求 ClassLoader 的锁。

然后就死锁了

应该是JDK21后类加载 JarFile 初始化路径变长或者其他原因导致的,出现的概率大概有1/10?

去issue找了找,结果是人家不打算修= =

alt text
alt text

解决方案大概可以配置 Agent 延迟启动,缓解一下,不过出现也不频繁,先不动了ƪ(˘⌣˘)ʃ

Wuhan

迁移了博客主题,pure主题好看捏😋

延迟双删 —— 延迟1~2秒进行删除,保证没有旧值

问题:两次删除缓存数据引起的缓存击穿以及短时间对数据库(主副本)造成的流量与负载压力

现实世界中的系统响应慢所带来的却是流量的加倍上涨。回想一下当你面对 App 响应慢的情况,是如何反应与对待便能明白,几乎所有用户的下意识行为都是如出一辙。

大部分系统的流量不高,使用缓存可以提高性能表现,当缓存失效时,数据库可以承受一部分负载压力 而对于流量巨大的系统而言,短时的访问流量穿透缓存访问数据库(主副本),恐怕很难接受。这时候相比于延迟双删在技术实现上带来高效便捷而言,其对系统的影响与副作用则变得不可忽视。

推特的解决方案 —— 租期Leases 是一种类似乐观锁的实现,代替延迟双删解决了

  • 惊群效应(Thundering Herd)
  • 陈旧写入(Stale Set)

速率限制与令牌绑定
速率限制与令牌绑定

进一步的,FB 还设置了 Stale values 机制,可以让业务来自行选择是否使用略微过期的数据来降低请求等待的时间。 当一个 key 被删除时,这个 key 的值被短暂的存储到一个过期数据的地方,但是这个时候memcache里面还没被写入新的值,这个时候如果业务不想等待,那么可以直接取走老的数据,从而加速响应时间。

代码不是资产,是负债,实现的业务功能才有价值

管好自己的技术债

当你无法用三句话说明白技术方案和营收增长的关系时,就该重新审视代码和系统的价值本质了

agent开发真的是和业务强绑定,你要是想去搓一个agent去面试,建议想出一个很好的场景,再去写

好用的agent = 好的prompt + 好的模型 + 好的编排(

假期可能干点啥

  1. 学kotlin/golang
  2. 学会看懂react/vue
  3. 看kafka代码,争取能参与社区贡献
  4. 投投简历
  5. 把鸽掉的项目完成,写完tiny-kafka

已经把博客搭建完成了,先完成了最简单的说是😗

第二十周周结#

  1. 背诵了mysql的八股
  • 了解了b+树以及行存储格式
  • 了解了索引,以及索引失效的情况,索引如何工作
  • 四种事务以及幻读的解决
  • 全局锁,表级锁,行级锁,意向锁,锁的退化
  • 日志系统,实现主从
  1. 背诵了redis的八股
  • redis的常见数据结构,string是二进制数据
  • redis的线程模型
  • 两种redis日志AOF,RDB
  • redis的主从集群和cluster集群
  • redis缓存更新机制,保证缓存一致性
  1. 模拟面试了一把,很惨
  • 对项目的了解还是不太透彻,准备的不好
  • 简历有很多需要修改的地方,太自大了(
  • 实习的产出多写一点,看起来必须得编了(需要优化)
  • ai可以看
  1. 做了20道左右的leetcode

反思#

  1. 自己离着大厂的水准差的还是很远,还需要继续沉淀
  2. 把项目和八股有机结合起来
  3. 刷题要坚持,自己的算法能力太次
  4. 行动力有点不足,ai想干就干,不需要想太多,明白大体流程就可以,吹逼的水平足够

下周安排#

  1. 要ai的资料,把自己的项目加上ai
  2. 继续刷题
  3. 复习四级和期末考试的东西,不能挂科(
  4. 改简历,看项目,背八股

第十八周周结#

  1. 完成了CS144的Lab
  • 完成了从可靠的字节流(重组器) -> TCP 双端的实现 -> 网络层接口 -> 路由的实现
  • 主要是让你了解从链路层出来(MVC)会经历哪些过程进入路由,发送到终点
  • TCP 基于底层可靠字节流实现,正因为如此会导致效率低,队头阻塞
  • 没有看课,有需要看看课程
  1. 研究了聊天室项目
  • 把各个类的接口都看完了,重点是 chat 这一块,有很多我没见过的东西
  • 作为一个基础还是可以的,可以在上面修改
  • 看看能不能添加一些 AI 相关的东西,蹭 AI 的热度
  1. 继续看了小林 coding
  • 看完了 HTTP 篇,但是感觉不是很深入
  • 看了一部分 TCP 的内容
  • 应该作为 CS144 的课程教材,感觉讲的还是太少(自己能接受的也不多)
  1. 准备把Vue和TS重新拾起来
  • 看了看 TS 的语法,明天用 arument 写一下前端,AI 辅助开发前端
  • 主要聚焦在 IM 上,实现一个类似于聊天室 + 直播的场景
  • 还是想蹭蹭 AI 的热度,给自己的外卖+点评搞点 AI

反思#

  1. 这周玩偏多,感觉学习的心有点飞,要沉下心沉淀了
  2. 感觉现阶段有点迷茫了,要看的东西太多,还是需要静心输入一段时间
  3. 以项目带动学习,MySQL、Redis、MQ、Kafka 怎么用要结合自己的代码
  4. 自己用 AI 是不是有点过度?是不是要截断一段时间
  5. 下个月学校的事情不少,要放点心在课内了

下周安排#

  1. 复习操作系统 + 继续看计网和其他的八股
  2. 开始写自己的 IM,聊天室 + 实时直播的形式
  3. 电商场景还是很经典,把外卖+点评和 AI 结合一下
  4. 好好复习一下物理,准备备考四级