跳到主要内容

Git Rebase 简要说明

· 阅读需 5 分钟
Hanasaki
阿巴阿巴阿巴

Git Rebase 自己压根没用过,正巧公司团队要用到,学习总结一下。

使用场景

合并提交:完成一个 feature 提交了很多次,有很多杂乱连续的 commit,团队对提交规范要求一个特性对应一次提交,此时需要合并多个提交为一个。

分支变基:多人协作开发时,用 merge 合并分支会多出一个 Merge Commit 的提交,这个提交是两个分支的最新节点的合并项。分支树呈现的是一条线从 main 分支叉出去,经过几个提交,又汇合到 main,汇合处形成了一个提交节点。团队想要让提交记录是线性的,也不想要这个多余的提交,此时适合进行变基。

举例

有一个提交结点树,C1是首次提交,C4是 hotfix 分支第一次提交。主线是 main 分支。

               C4 <- C5
/
C1 <- C2 <- C3 <- C6

初探 Nodejs 内存泄漏

· 阅读需 3 分钟
Hanasaki
阿巴阿巴阿巴

这两天吃饱撑着,在探究为什么我的 Node 程序 Heap Usage 一直居高不下,而且会越来越多。

如何调试 NodeJS 程序

在VSCode中可以直接调试,选择Debug,显示所有自动调试配置,选择要运行的命令,就进入了调试模式,侧栏会显示出调试的信息。可以捕获 Heap 快照,拿到 ChromeDevTool 里面导入分析。

用 Node 的 --inspect 参数搭配 Chrome 实时分析

运行以下命令,进入了调试模式

node --inspect serve.js

在 Chrome 中打开 chrome://inspect,就可以看到 Open dedicated DevTool for Node,点击进入 Node 调试工具,就可以开始分析了。

放大问题

很多时候,人工是难以准确排查出问题的,因为会有很多不可预料的误差,导致每次运行的结果数据不准。这时候,要放大问题,大量测试多次触发漏洞,就能很清楚的发现问题。

k6 对接口进行测试,运行下列测试程序 k6 run test.js

// test.js
import http from 'k6/http';

export let options = {
vus: 100,
duration: '20s',
};

export default function () {
let res = http.post("http://localhost:5000/monitor/start", JSON.stringify({ phone: Math.random()*100000 }), { headers: { 'Content-Type': 'application/json' } })

console.log(res.body);
}

通过对比前后的 Heap Size,确实管用,明显增加了将近 8MB。

接着调用了一下其他的接口,调用 processMap.clear() 把保存子进程的 processMap 清空。内存果然又降回去了,但并没有和最开始一样,而是稍稍高出了一点点。

得出结论,引用计数法回收垃圾是实实在在的,这个例子验证了它。但是仍然困扰我的是,Heap 里的 [compiled code] 这部分会一直增加,无法被回收,增加的量很小...

未解之谜:每次访问接口,即使是访问 / 路径,返回一段文本, [compiled code] 也会不断增加?

分清轻重缓急

· 阅读需 8 分钟
Hanasaki
阿巴阿巴阿巴

今天是第 N 次醒悟,为了确保这是最后一次醒悟,我决定在我想好前什么都不干,下定决心把什么是轻重缓急捋清楚。

真有意思,刚要理清这个道理,小案例就自己送上门来了。

在刚写完第一行字时,想去看看 Docusaurus 有没有版本更新、看看有什么新变化,避免我按着已经废弃写法的来写。真巧,访问官网出现 Connection refused 了,唤起了脑中的 “Openwrt/Passwall/SmartDNS...” 这些东西,他们开始问我:是代理的问题吗?是DNS规则没有生效吗?DNS污染?是梯子崩了吗,要不要去Telegram看看?还是Openwrt的问题,去看一下系统日志?去了解一些新梯子吧?去试一下Github能不能访问吧?...

对这些东西的极度兴趣,促使我去看看问题在哪里!我要去解决!我要去搞出延迟最低、速度最快的上网方案!

等等 ...... ,差点又上了自己的套了。我要干什么来着?不是要捋清楚轻重缓急的道理吗?这次,我好像把握住了。

Nginx 部署超星学习通签到服务

· 阅读需 2 分钟
Hanasaki
阿巴阿巴阿巴

在 AWS 的 EC2 服务器上部署了这玩意,一方面分散华为云那个服务器的压力,一方面体验一下部署在服务器的流程。之前一直都是静态网页部署+云函数,比较省事。

用的 PM2 运行的接口服务,端口号是 5000 ,可以直接通过域名+端口号访问接口,但是感觉这样不太优雅,干脆用 Nginx 代理一下。让网站可以通过 /chaoxing 路径访问,让接口可以通过 /chaoxing-api 来访问。

OpenWrt 禁用 IPv6

· 阅读需 2 分钟

你是否遇到过这种情况,访问一些网站,时不时出现 connection reset,刷新几下就好了,再刷新就又这样了。

或者遇到 “网页可能暂时无法连接,或者它已永久性地移动到了新网址”。

这很可能是 IPv6 引起的,在 IPv4/IPv6 双栈网络下,IPv6 的优先级比 IPv4 高,通过 IPv6 访问很可能出现不稳定的情况。

去 Openwrt -> 网络 -> 接口:

  1. 删除 WAN6 接口
  2. 找到 LAN -> 高级设置,禁用IPv6分配长度
  3. 进入 LAN -> DHCP服务器,把 IPv6设置 的 “RA服务、DHCPv6服务、NDP代理” 全部禁用
  4. 找到 WAN -> 高级设置,禁用获取IPv6地址IPv6分配长度
  5. 进入 WAN -> DHCP服务器,把 IPv6设置 的 “RA服务、DHCPv6服务、NDP代理” 全部禁用
  6. 保存,可以重启一下