用 Prometheus 和 Grafana 监控 JVM 内存与 GC 指标
用 Prometheus 和 Grafana 监控 JVM 内存与 GC 指标 前阵子给一个 Spring Boot 服务加监控,本来想着把 Actuator 的 /actuator/prometheus 打开,Prometheus 抓一下,Grafana 画两张图就完事了。结果真动手的时候发现,JVM 内存和 GC 这块指标不少,名字也容易看花,面板如果只画一个“堆内存使用率”,基本等于没看。下...
阅读更多用 Prometheus 和 Grafana 监控 JVM 内存与 GC 指标 前阵子给一个 Spring Boot 服务加监控,本来想着把 Actuator 的 /actuator/prometheus 打开,Prometheus 抓一下,Grafana 画两张图就完事了。结果真动手的时候发现,JVM 内存和 GC 这块指标不少,名字也容易看花,面板如果只画一个“堆内存使用率”,基本等于没看。下...
阅读更多PostgreSQL 逻辑复制在数据迁移场景中的限制与测试方法
阅读更多RESTful API 版本控制的几种实现方式与维护成本 前段时间重构公司内部的一个老 API,本来以为就是改改路由、换换参数的事儿,结果一翻代码发现历史包袱比想象中重:有的接口走 /v1/xxx,有的靠请求头里塞 Accept: application/vnd.xxx.v2+json,还有几个诡异的接口用 ?version=3 区分。更离谱的是,同一个功能三套代码在跑,修个 bug 得改三个地方...
阅读更多用 GitHub Actions 定时运行后端集成测试并保存报告 最近给后端仓库补了一些集成测试,本地跑着倒是没问题,但问题是你不可能每天都记得去跑一遍。尤其是那种依赖数据库、缓存、第三方接口 mock 的测试,平时单元测试根本覆盖不到。后来我索性把这件事丢给 GitHub Actions,让它每天定时跑一次,跑完把报告存下来。踩了几个小坑,这里记录一下,免得下次又翻车。 先想清楚要跑什么 我一开...
阅读更多Linux 系统中文件描述符耗尽的排查与限制调整 前几天一个跑在 Debian 上的小服务突然开始报错,日志里密密麻麻全是 Too many open files,接口一半成功一半 500,看着挺玄乎。我一开始还以为是磁盘满了或者哪儿的内存炸了,结果 df -h 和 free -h 都干干净净。后来才反应过来,这是文件描述符(fd)被用光了。这个问题其实不难,但坑在于:限制有好几层,你改了其中一层...
阅读更多Kubernetes Deployment 滚动更新参数对可用性的影响 上周三晚上发了个版,发完过后没几分钟就有人反馈页面偶尔打不开,刷新一下又好了。去看了眼监控,好家伙,每次滚动更新那几十秒里,5xx都会冒出来一个小尖峰,平时一直是平的。其实以前也见过这个尖峰,一直觉得滚动更新嘛,抖一下很正常就没管,这回被用户直接投诉了才老实坐下来查。结果发现这几个滚动更新参数跟可用性关系还挺大,这玩意儿的默认...
阅读更多用 Playwright 做端到端测试时处理不稳定网络请求的策略 前阵子给公司一个老系统补端到端测试,本地跑得好好的,一上 CI 就开始抽风,十次能红三次。点开报错一看,清一色的 Test timeout of 30000ms exceeded,再往下翻日志,发现全是卡在等接口上。页面本身没任何毛病,纯粹是测试环境那台机器网络不太行,接口时快时慢。折腾了几天,踩了不少坑,把实测有效的几个策略记一下...
阅读更多TypeScript 中用泛型收窄第三方 API 响应类型
阅读更多Java 日志框架从 Log4j 迁移到 Logback 的兼容性检查清单
阅读更多微服务间调用超时、重试和熔断配置的取舍原则 上个月线上出了个事,一个挺边缘的下游服务抖了几秒钟,结果前台的一堆接口全跟着挂了,看监控请求量直接翻了快十倍,下游本来只是抖一下,硬生生被打死,雪崩了。复盘的时候发现,链路上几乎每个服务都配了“重试 3 次、超时 5 秒”,七八个服务叠在一起,一次失败瞬间就变成几十个请求砸向同一个下游,而熔断又配得特别迟钝,完全没兜住。这件事之后我把手里几个核心服务的超...
阅读更多