Golang内存占用检测
Golang 内存占用检测 参考链接 https://lrita.github.io/2017/05/26/golang-memory-pprof/
涉及命令 go tool pprof http://{host}/debug/pprof/heap
缘由 同样的服务在上了多组服务器后监控显示内存 process_resident_memory_bytes 区别很大,多组服务会根据实际连接和用户情况增减,但有一组数值仍然居高不下,数据对比就是20+M和50+M。以下便找出两台作为对比定位原因。{host1}为需要检测的服务。
命令使用 通过 go tool pprof http://{host}/debug/pprof/heap 进入查看命令行,直接输入 top 后
[WenpiCai@LOCAL-192-168-97-55 ~]$ go tool pprof http://{host1}/debug/pprof/heap Fetching profile over HTTP from http://{host1}/debug/pprof/heap Saved profile in /home/WenpiCai/pprof/pprof.MoziGateA.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz File: MoziGateA Type: inuse_space Time: Jan 14, 2021 at 10:26am (CST) Entering interactive mode (type "help" for commands, "o" for options) (pprof) top Showing nodes accounting for 5524.47kB, 100% of 5524.47kB total Showing top 10 nodes out of 41 flat flat% sum% cum cum% 1542.
Redis源码翻阅记录
准备工作 源码 仓库 https://github.com/antirez/redis.git 分支 git:remotes/origin/6.0 git clone -b 6.0 https://github.com/redis/redis.git 工具 Vim 优点:阅读内容一目了然,只键盘操作快捷。劣势:跳转较弱,会占用终端,用tmux来解决阅读节点,但感觉容易混淆。(刚开始选择) VS Code 优点:插件较自动化,跳转轻松。劣势:outline无法右边显示,触摸板翻页感觉容易失焦点。(最终选择) 阶段一 粗读 代码目录结构整理。目标:清楚整体项目,便于后面阅读定位。
重点 src 目录下所有文件草读。目标:清楚文件定位,内容大致情况,得出文件重要程度,便于后面阅读重点。
结论 大体应该有以下几块: 事件 配置 数据类型:对外支持的,底层实现的。(大量代码) 网络 集群 哨兵 数据持久化 日记 服务端入口 src/server.c (突破口) 客户端入口 src/redis-cli.c 阶段二 src/server.c initServerConfig serverCron 定时任务 beforeSleep afterSleep restartServer 做好收尾工作,另执行启动,退出 listenToPort 监听TCP服务 initServer sigShutdownHandler 监听信号关闭操作 adjustOpenFilesLimit InitServerLast 启动多线程,每个客户端独自线程监听连接,获取请求,找到命令,调用命令。 call 执行客户端的具体命令 processCommand 分发客户端命令 阶段三 发现新版里面用上了多线程,查了一下是4.0版本后引入,决定拉回3.2版本代码进行比较。