硬盘问题导致负载过高

背景

最近软路由经常出问题:

  1. clash 突然死掉了, 发现后我就把它重启了, 重启过程中有点卡顿,但是我没有在意
  2. 整个软路由设备r2s 亮红灯, GUI 界面都登录不上去了

排查过程

  1. 重启若干次之后终于可以 ssh 上去了,这个时候要注意,要持续监测服务是否启动, 因为服务器有问题的时候,正常时间1min 可能是启动不了了,需要等2分钟, 要注意的是,等3分钟可能因为现在的问题, 服务器又挂了,所以多试几次
  2. 发现uptime 很高
1
2
3
4
5
x@amanoswrt:~# uptime
17:54:27 up 23 min, load average: 5.57, 6.96, 5.27
x@amanoswrt:~# uptime
17:54:30 up 23 min, load average: 5.52, 6.93, 5.27

查看CPU数量

1
2
root@amanoswrt:~# nproc
4

这里有1个例子来描述系统有多忙:
假设你的服务器是 2核CPU,那么负载常态是4,意味着系统负载是CPU核心数的2倍,非常繁忙。如果是 8核CPU,负载为4则属于可接受范围,但常态是4也值得关注。

  1. 发现cpu 不高
    我之前只会用 top 命令, 然后加上 P (shift + p) 来按照CPU来排序,但是发现最高的也才1%, CPU不忙呀?
    top

  2. 问了llm发现,可以通过第一行排查

1
CPU:   0% usr   0% sys   0% nic  24% idle  73% io   0% irq   0% sirq

我的负载在于等待硬盘

  1. 可以使用iotop来排查是哪个进程使用那么高的io, 这里我使用的是pidstat
    1
    2
    # 每隔2秒报告一次所有进程的磁盘I/O统计
    pidstat -d 2

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
18:41:52      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
18:41:54 65537 27052 512.00 0.00 0.00 0 minidlnad

18:41:54 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command

18:41:56 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
18:41:58 65537 27052 256.00 0.00 0.00 0 minidlnad

18:41:58 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command

18:42:00 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
18:42:02 65537 27052 256.00 0.00 0.00 0 minidlnad

找到问题了, minidlnad 导致的

思考

第一次遇到性能瓶颈是IO. 与此同时,我想到之前有一次我有一篇文章使用rsync 的,使用它的原因的是当初使用自动同步 anything 的时候导致直接连不上n2s ,当时不知道原因, 现在想来现象很像, 原因估计也是一样的。 good to address this problem。

开始学英语

背景

工作原因需要使用英语

辅助功能

Background

Recently, I started learning English again. When I listened to podcasts on my iPhone, I found that I couldn’t hear what they were saying clearly, so I used live captions to help me understand what they were saying.

Usage

  1. enable(setting -> accessibility -> live captions)
    alt text

  2. effect image
    alt text

Extra Tips

I suggest you set long tap to toggle the switch.(setting -> accessibility -> touch -> assistiveTouch -> Long Press -> Live Captions)
alt text

JDownloader

Today I want to share a tool to buddys, JDownloader
below is it’s functionalitis

download video from website p

魔方-层先法笔记

参考百度百科

因为是自己的笔记, 所以我只层先法上的部份步骤(多拧几遍,能实现别的步骤)

备注

U(U’)代表把顶层顺(逆)时针旋转90°,U2代表把顶层旋转180°。R(R’)代表把右面顺(逆)时针旋转90°,R2代表把右面旋转180°。L(L’)代表把左面顺(逆)时针旋转90°,L2代表把左面旋转180°。F(F’)代表把前面顺(逆)时针旋转90°,F2代表把前面旋转180°。u(u’)代表把上两层顺(逆)时针旋转90°,u2代表把上两层旋转180°。x(x’)代表把整个魔方以R的方向顺(逆)时针旋转90°,x2代表把整个魔方以R的方向旋转180°。y(y’)代表把整个魔方以U的方向顺(逆)时针旋转90°,y2代表把整个魔方以U的方向旋转180°。z(z’)代表整个魔方以F的方向顺(逆)时针旋转90°,z2代表把整个魔方以F的旋转180°。

具体步骤

  1. 第一层
    1. 第一层的十字
    2. 第一层的四个角

效果如图
第一层

  1. 第二层-两个公式
    情况4:U’F’UFURU’R’
    情况5:URU’R’U’F’UF
    第二层

  2. 第三层

    1. 做好顶面十字

      情况3:FRUR’U’F’
      情况2:FRUR’U’F’ * 2
      情况1:FRUR’U’F’ * 3
      alt text

    2. 顶角归位

    3. 调整顶棱位置

Python面试记录

某一次

  1. Python 的 initnew 的区别

  2. Python 的内存重用机制

  3. Python 的协程是什么

  4. Python 的基本类型有哪些

  5. Python 的上下文是怎么实现的

  6. WSGI/ASGI 是什么

  7. MySQL 的索引原理是什么

  8. MySQL 的四种隔离级别

  9. MySQL 的事务原理是什么
    Atomicity(原子性):事务是一个不可分割的操作单元,要么全部成功,要么全部失败。
    Consistency(一致性):事务执行后,数据库从一个一致状态转换到另一个一致状态。
    Isolation(隔离性):多个事务并发执行时,彼此隔离,互不干扰。
    Durability(持久性):事务提交后,对数据库的修改是永久性的,即使系统崩溃也不会丢失。

某一次

  1. MySQL 的关键字的执行顺序是什么

    1. FROM 和 JOIN
      首先确定查询的数据来源,包括表和连接操作。
    2. WHERE
      过滤符合条件的行。
    3. GROUP BY
      按指定列分组。
    4. HAVING
      对分组后的结果进行过滤。
    5. SELECT
      选择要返回的列,并可以应用聚合函数或表达式。
    6. ORDER BY
      对结果进行排序。
    7. LIMIT 和 OFFSET
      限制返回的行数或跳过指定行。
  2. /login 符合RESTful 规范嘛

  3. Oauth 的四种模式
    隐式
    密码
    客户端
    授权码

  4. Kafka 和 RabbitMQ 的区别

某一次

  1. Python 的异步原理
  2. Python 的GC, Java 的GC
  3. 怎么查询中位数
  4. ExecuteService 的处理请求是 maxPoolSize 和 queue 逻辑
  5. 反向传播的原理
  6. 装饰器的原理
  7. 倒排索引的原理
  8. MongoDB 的 _id解释

某一次

  1. 生成器和迭代器的区别
  2. 三大范式是什么

某一次

  1. 什么时候用到线程,协程, 进程
  2. MongoDB 如果有一张大表3000w行,怎么添加索引

某一次

  1. Redis 的缓存击穿, 缓存雪崩,缓存穿透
  2. MySQL 的查询过程
  3. fastApi 的生命周期
  4. 怎么排查线上的CPU满了, 或者内存满了的情况
  5. Redis 和MySQL 的数据一致性问题

某一次

  1. Kafka 怎么实现顺序的消息队列
  2. RabbitMQ 怎么实现高可用
  3. Doris 为什么性能那么高
  4. 多线程的核心数一般怎么设置

某一次

  1. Kafka怎么是实现消息被多个消费者同时消费
  2. Python 怎么实现动态的 [] 和 .

某一次 周二 2025.4.15 14:00

  1. 输入[1,2,3,4,5,8,10,11,12,13,14] 和 12, 怎么输出所有的2元素组合,如 [1,11], [2,10]
  2. 什么是RESTful
  3. 什么是http的无状态
  4. cicd 有哪些步骤
  5. 用过哪些设计模式

某一次 周四 2025.4.17 10:00

  1. CICD和jenkins

某一次 2025.4.17 15:00

纯英语, 所以记录一下单词

  1. IO intensive
  2. CPU intensive
  3. Mandarin
  4. SQL 和 NoSQL的区别

某一次 2025.4.17 17:00

  1. 有用过IAM吗
  2. 怎么防止存储服务被攻击

某一次 2025.4.17 19:00

某一次 周五 2025.4.18 10:00

某一次 2025.4.18 13:00

  1. LCS 怎么实现
  2. 开闭原则

rsync笔记

背景

之前尝试在openwrt上上启动anything, 实际体验是会把设置直接弄崩,现象是ssh都连不进去,所以也没法debug, 只能手动同步了, ssh 又不支持增量传,所以使用了rsync

1
rsync -avz -e ssh /mnt/share-media/ pi:/mnt/share-media
1
rsync -avz -e ssh /www/luci-static/argon/background/ pi:/www/luci-static/argon/background/

2024在powershell中给桌面端软件签名

背景

使用Electron 打的包直接安装会有提醒, 网上很多方式是使用cmd 的, 我补充一下powershell的
reason

解决步骤

  1. 在服务商买 代码签名证书, 注意不是常见的 SSL证书

这里我先使用自签名证书了

设置环境变量

1
2
3
4
5
6
7
8
9
# 密码
$certPassword = ConvertTo-SecureString -String "123456" -Force -AsPlainText
# 文件
$fileToSign= "D:\niumag\niumagfiber\NiumagSeed-linux-4.1.3-beta.610-x64.exe"
# 执行文件入口
$signtoolPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe"
# 时间服务器
$timestampServer = "http://timestamp.digicert.com"

创建根证书并导出

1
2
3
4
# 创建
$cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=AmanoCert" -KeyUsage DigitalSignature -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My"
# 导出
Export-PfxCertificate -Cert $cert -FilePath "AmanoCert4.pfx" -Password $certPassword

签名

1
& "$signtoolPath" sign /debug -f AmanoCert4.pfx  -p 123456 /fd SHA256 /tr $timestampServer /td SHA256 -a $fileToSign

效果

签名效果

alt text

属性效果

alt text

重装机兵重构4-功能篇

上一篇重装机兵重构2-地图篇的后续

Day24

  1. 感谢 Jax’s Studio 的无私奉献, 复用背包系统
    inventory

Day25

  1. 背包系统是使用 UGUI实现的, 利用RenderTexture 渲染在 UI Document里面

Day26

  1. RenderTexture 之后的背包不能点击, 使用UGUI重新画了一个tab, 然后把背包重新放到 UGUI里面

Day27

  1. 开源的背包物品交换有bug,直接购买了 Ultimate Inventory System, 竟然还赠送商店系统, 准备直接站在巨人肩膀上

Day28/29/30

  1. 研究Ultimate Inventory System

MySQL表锁为什么不会出现死锁

截止 2025-02-20, 大语言模型还有进步空间哈

我的回答

首先固定一下上下文,不讨论表锁和行锁形成的死锁, 只讨论表锁与表锁之间。
目前的答案是不会形成死锁,原因官方已经说了 解锁
简单的说就是lock表A并想lock表B的时候会隐式的触发表A的解锁,所以不会存在死锁, 如果想同时锁住A和B, 需要这样

1
LOCK TABLES job WRITE, user WRITE;

快照

证明1 X表确实时互斥的

  1. 创建User 和Job 表, 每个表有 id 和name 字段
    效果

  2. 锁住 user 并查询锁的情况
    会话1

  3. 给 user 表 增加列 age, 发现存在锁竞争, 这个DDL pending 住了
    会话2

  4. 解锁 user 表, 发现age 修改好了
    会话1

会话2

结果

证明2 隐式解锁

  1. 锁住 user
    会话1

  2. 给user 增加 gender, 发现卡住
    会话2

  3. 锁住 job 表
    会话1

  4. 发现 user 的改动也结束了, 说明user表确实解锁了
    会话2

效果

补充一下大模型的回答

DeepSeek 回答的不正确

alt text

OpenAI 通过引导可以回答正确

alt text