老废物乐园 瓜子的技术笔记 · Java / AI / 金融科技

容器环境下 JVM 内存配置的正确姿势

一个服务在 K8s 里跑得好好的,突然被重启,看 Pod 事件只有一行 OOMKilled。我第一反应是"堆不够了",加了 -Xmx 之后反而重启更频繁。后来才明白,我搞混了两种 OOM。 两个 OOM 不是一回事 JVM 的堆 OOM(java.lang.OutOfMemoryError: Jav

遥望星星 遥望星星 发布于 2023-08-12

GC 线程数配置与容器 CPU 限制的关系

现象:容器 4 核,GC 却开了 24 个线程 八月初一个 Pod 频繁被 K8s 驱逐,OOMKilled 日志看着是内存超了,但监控显示内存没到 limit。我进容器一查 CPU 使用率 400%——而这 Pod 只申请了 4 核。根因是 GC 线程数按宿主机 24 核算的,Parallel G

遥望星星 遥望星星 发布于 2022-12-09

Kubernetes 中 Java 应用的优雅上下线

滚动发布时,监控里出现了 0.3% 的 5xx 毛刺 4 月一次常规滚动更新,发布过程中 Grafana 的 5xx 曲线冒出一排小毛刺,单个实例发布期间大约丢了 0.3% 的请求。量不大,但每次发布都有,说明是上下线姿势不对,不是偶发。 我们的 Java 服务跑在 K8s 上,Spring Boo

遥望星星 遥望星星 发布于 2021-07-29

Kubernetes 部署 Java 应用的资源配置

上了 K8s 之后,Pod 每天重启三四次 6 月初把订单服务迁到公司新搭的 K8s 集群(1.19)。上线第一天就发现问题:Pod 频繁重启。 $ kubectl get pod -l app=order-service -n trade NAME

遥望星星 遥望星星 发布于 2020-10-18

Docker Compose 编排一整套开发环境

新人装环境装了两天,我写了份 docker-compose.yml 组里 2 月来了个新同事。第一天拉代码,第二天还在拉代码——不是网速问题,是在装环境:MySQL 8.0、Redis 5.0、RocketMQ 4.6.1、Nacos 1.1.4、Elasticsearch 7.5,一个一个装,中间

遥望星星 遥望星星 发布于 2019-11-15

Docker 打包 Spring Boot 镜像的最佳实践

一个 780 MB 的镜像,让每次发布多等三分钟 我们去年底把服务容器化了,当时赶时间,Dockerfile 写得非常粗糙: FROM openjdk:8-jdk WORKDIR /app COPY target/order-service.jar app.jar EXPOSE 8080 ENTRY

遥望星星 遥望星星 发布于 2019-11-09