diff --git a/blog/code-server/index.html b/blog/code-server/index.html index bb26577ab..b5d587c3d 100644 --- a/blog/code-server/index.html +++ b/blog/code-server/index.html @@ -1,5 +1,5 @@ 使用 Visual Studio Code 搭建多用户远程 IDE -

K8S 容器内 Java 进程内存分析

2023年1月7日 in Java by l101788 minutes

K8S 容器内 Java 进程内存分析,容器和 Jave OOM 问题定位。

故事背景:

一个 K8S Pod,里面只有一个 Java 进程,K8S request 和 limit memory 都是 2G,Java 进程核心参数包括:-XX:+UseZGC -Xmx1024m -Xms768m

服务启动一段时间后,查看 Grafana 监控数据,Pod 内存使用量约 1.5G,JVM 内存使用量约 500M,通过 jvm dump 分析没有任何大对象,运行三五天后出现 K8S Container OOM。

首先区分下 Container OOM 和 Jvm OOM,Container OOM 是 Pod 内进程申请内存大约 K8S Limit 所致。

问题来了:

  1. Pod 2G 内存,JVM 设置了 Xmx 1G,已经预留了 1G 内存,为什么还会 Container OOM,这预留的 1G 内存被谁吃了。
  2. 正常情况下(无 Container OOM),Grafana 看到的监控数据,Pod 内存使用量 1.5G, JVM 内存使用量 500M,差别为什么这么大。
  3. Pod 内存使用量为什么超过 Xmx 限制。

Grafana 监控图。

Grafana 监控图

统计指标

Pod 内存使用量统计的指标是 container_memory_working_set_bytes

  • container_memory_usage_bytes = container_memory_rss + container_memory_cache + kernel memory
  • container_memory_working_set_bytes = container_memory_usage_bytes - total_inactive_file(未激活的匿名缓存页)

container_memory_working_set_bytes 是容器真实使用的内存量,也是资源限制 limit 时的 OOM 判断依据。

另外注意 cgroup 版本差异: container_memory_cache reflects cache (cgroup v1) or file (cgroup v2) entry in memory.stat.

JVM 内存使用量统计的指标是 jvm_memory_bytes_used: heap、non-heap 以及其他 真实用量总和。下面解释其他。

首先说结论:在 POD 内,通过 top、free 看到的指标都是不准确的,不用看了,如果要看真实的数据以 cgroup 为准。

container_memory_working_set_bytes 指标来自 cadvisor,cadvisor 数据来源 cgroup,可以查看以下文件获取真实的内存情况。

# cgroup v2 文件地址
+

K8S Pod 容器内 Java 进程内存分析

2023年1月7日 in Java by l101788 minutes

K8S Pod 容器内 Java 进程内存分析,容器 OOM 和 Jave OOM 问题定位。

故事背景:

一个 K8S Pod,里面只有一个 Java 进程,K8S request 和 limit memory 都是 2G,Java 进程核心参数包括:-XX:+UseZGC -Xmx1024m -Xms768m

服务启动一段时间后,查看 Grafana 监控数据,Pod 内存使用量约 1.5G,JVM 内存使用量约 500M,通过 jvm dump 分析没有任何大对象,运行三五天后出现 K8S Container OOM。

首先区分下 Container OOM 和 Jvm OOM,Container OOM 是 Pod 内进程申请内存大约 K8S Limit 所致。

问题来了:

  1. Pod 2G 内存,JVM 设置了 Xmx 1G,已经预留了 1G 内存,为什么还会 Container OOM,这预留的 1G 内存被谁吃了。
  2. 正常情况下(无 Container OOM),Grafana 看到的监控数据,Pod 内存使用量 1.5G, JVM 内存使用量 500M,差别为什么这么大。
  3. Pod 内存使用量为什么超过 Xmx 限制。

Grafana 监控图。

Grafana 监控图

统计指标

Pod 内存使用量统计的指标是 container_memory_working_set_bytes

  • container_memory_usage_bytes = container_memory_rss + container_memory_cache + kernel memory
  • container_memory_working_set_bytes = container_memory_usage_bytes - total_inactive_file(未激活的匿名缓存页)

container_memory_working_set_bytes 是容器真实使用的内存量,也是资源限制 limit 时的 OOM 判断依据。

另外注意 cgroup 版本差异: container_memory_cache reflects cache (cgroup v1) or file (cgroup v2) entry in memory.stat.

JVM 内存使用量统计的指标是 jvm_memory_bytes_used: heap、non-heap 以及其他 真实用量总和。下面解释其他。

首先说结论:在 POD 内,通过 top、free 看到的指标都是不准确的,不用看了,如果要看真实的数据以 cgroup 为准。

container_memory_working_set_bytes 指标来自 cadvisor,cadvisor 数据来源 cgroup,可以查看以下文件获取真实的内存情况。

# cgroup v2 文件地址
 
 ll /sys/fs/cgroup/memory.*
 -r--r--r-- 1 root root 0 Jan  6 16:25 /sys/fs/cgroup/memory.current
diff --git a/blog/k8s-pid-limiting-oom/index.html b/blog/k8s-pid-limiting-oom/index.html
index 5f622ab9f..16638531e 100644
--- a/blog/k8s-pid-limiting-oom/index.html
+++ b/blog/k8s-pid-limiting-oom/index.html
@@ -1,5 +1,5 @@
 K8S 容器 PID 限制引起的 Java OutOfMemoryError — XLabs
-
\ No newline at end of file +
\ No newline at end of file diff --git a/blog/sentinel/index.html b/blog/sentinel/index.html index 7853e135b..43cf3b279 100644 --- a/blog/sentinel/index.html +++ b/blog/sentinel/index.html @@ -1,5 +1,5 @@ 基于 Alibaba Sentinel 实现的分布式限流中间件服务以及遇到的坑和注意事项 -

Java

\ No newline at end of file +

Java

\ No newline at end of file diff --git a/categories/java/index.xml b/categories/java/index.xml index 87ded0afc..0f6d2fa55 100644 --- a/categories/java/index.xml +++ b/categories/java/index.xml @@ -1,10 +1,10 @@ -Java on XLabshttps://www.xlabs.club/categories/java/Recent content in Java on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: +Java on XLabshttps://www.xlabs.club/categories/java/Recent content in Java on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: 规范公司自己的 parent pom,增加特定的依赖项。 根据公司规范生成统一的包结构,统一命名。 根据需要增加特定代码或文件,比如根据公司要求统一 logback.xml、 application.properties 文件。 提供公司自研的二方 jar 包。 快速开始 基本步骤: 对于 spring.initializr 我们没有定制的需求,直接引用官方的。 拷贝一份 start.spring.io,直接基于这个项目开发、部署、运行。以下都是关于如何修改 start.spring.io。 start.spring.io 主要关注两个模块: start-client:前端页面,可以定制些自己的 logo、title 等。 start-site:是一个标准的 spring boot 项目,实际 run 起来的服务,引用了 start-client,直接 run 这个项目的 main 方法就能看到效果。 主要配置文件:start-site/src/main/resources/application.yml,通过修改这个配置文件可以达到的效果如下。 修改 start 启动时默认 group,把 com.example 改为公司自己的 group。 initializr: group-id: value: com.yourgroup 修改父 pom,使用公司自己的 pom。 -initializr: env: maven: # use your parent pom parent: groupId: com.yourself artifactId: your-parent version: 1.K8S 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S 容器内 Java 进程内存分析,容器和 Jave OOM 问题定位。从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录https://www.xlabs.club/blog/migrating-spring-to-spring-boot/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/migrating-spring-to-spring-boot/从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录。 +initializr: env: maven: # use your parent pom parent: groupId: com.yourself artifactId: your-parent version: 1.K8S Pod 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S Pod 容器内 Java 进程内存分析,容器 OOM 和 Jave OOM 问题定位。从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录https://www.xlabs.club/blog/migrating-spring-to-spring-boot/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/migrating-spring-to-spring-boot/从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录。 概述 从 Spring 到 Spring Boot,整体开发、运行方式主要变化。 - 当前(老)模式 新模式(本地开发) 新模式(线上运行) 开发习惯 Spring + 外置 Tomcat Spring Boot(embed tomcat) Spring Boot War or Jar Java 版本 8、11、16、17 11、17、21(推荐) 11、17、21(推荐) Tomcat 版本 8.x、9.x 9.x 9.x(推荐)、10.x 说明: 理论上完全兼容 Java11,但是要求业务方尽量使用 Java17 或 21。其他版本都是实验性质尽量兼容。 线上运行支持 Spring Boot jar 直接运行,但主要业务仍推荐以 war + tomcat 为主。如果希望以 java -jar 方式运行,参考下面的章节“jar 方式运行”描述。 目前 Spring Boot 主要推行版本是 2.7.x。 3.x 版本逐渐适配中,注意 3.x 要求 Java 最低版本是 17。 快速开始 线下支撑系统导航,点击 脚手架 进入 spring start 页面,按自己需求选择模块,生成自己业务模式初始化代码。 写(Copy)业务代码到项目里,修改 pom.Spring Boot 使用 Micrometer 集成 Prometheus 监控,5 分钟接入自定义监控指标https://www.xlabs.club/blog/spring-boot-micrometer/Mon, 07 Aug 2023 10:54:37 +0800https://www.xlabs.club/blog/spring-boot-micrometer/Spring Boot 使用 Micrometer 集成 Prometheus 监控,5 分钟接入自定义监控指标,主要内容: diff --git a/categories/k8s/index.xml b/categories/k8s/index.xml index 46651b027..e648a896d 100644 --- a/categories/k8s/index.xml +++ b/categories/k8s/index.xml @@ -1,4 +1,4 @@ -K8s on XLabshttps://www.xlabs.club/categories/k8s/Recent content in K8s on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Mac 搭建本地 K8S 开发环境方案选型https://www.xlabs.club/blog/easiest-k8s-on-macos/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/blog/easiest-k8s-on-macos/因为工作经常需要用到 K8S,而且有时因网络原因不能完全依赖公司网络,或者因为测试新功能不能直接发布到公司集群,所以就有了本地搭建 K8S 的需求。 +K8s on XLabshttps://www.xlabs.club/categories/k8s/Recent content in K8s on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Mac 搭建本地 K8S 开发环境方案选型https://www.xlabs.club/blog/easiest-k8s-on-macos/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/blog/easiest-k8s-on-macos/因为工作经常需要用到 K8S,而且有时因网络原因不能完全依赖公司网络,或者因为测试新功能不能直接发布到公司集群,所以就有了本地搭建 K8S 的需求。 另外如果你有以下需求,此文档中提到的方案也许有所帮助: 开发机器模拟 Arm、AMD64 等不同架构。 完全隔离的不同环境,比如为测试 docker、podman、buildkit、containd 等不同软件设置的独立环境。 CI/CD 流程中即用即消的轻量级虚拟机替代方案。 有限的资源模拟大批量的 K8S 节点。 以下介绍一下我用过的几种不同方案,有些纯属个人观点仅供参考。 Docker Desktop 并启用 Kubernetes 功能。 diff --git a/categories/spring-boot/index.xml b/categories/spring-boot/index.xml index 0cadbdd42..9c75f420a 100644 --- a/categories/spring-boot/index.xml +++ b/categories/spring-boot/index.xml @@ -1,4 +1,4 @@ -Spring Boot on XLabshttps://www.xlabs.club/categories/spring-boot/Recent content in Spring Boot on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: +Spring Boot on XLabshttps://www.xlabs.club/categories/spring-boot/Recent content in Spring Boot on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: 规范公司自己的 parent pom,增加特定的依赖项。 根据公司规范生成统一的包结构,统一命名。 根据需要增加特定代码或文件,比如根据公司要求统一 logback.xml、 application.properties 文件。 提供公司自研的二方 jar 包。 快速开始 基本步骤: 对于 spring.initializr 我们没有定制的需求,直接引用官方的。 拷贝一份 start.spring.io,直接基于这个项目开发、部署、运行。以下都是关于如何修改 start.spring.io。 start.spring.io 主要关注两个模块: start-client:前端页面,可以定制些自己的 logo、title 等。 start-site:是一个标准的 spring boot 项目,实际 run 起来的服务,引用了 start-client,直接 run 这个项目的 main 方法就能看到效果。 主要配置文件:start-site/src/main/resources/application.yml,通过修改这个配置文件可以达到的效果如下。 diff --git a/contributors/index.xml b/contributors/index.xml index 253343147..445a4b715 100644 --- a/contributors/index.xml +++ b/contributors/index.xml @@ -1 +1 @@ -Contributors on XLabshttps://www.xlabs.club/contributors/Recent content in Contributors on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800L10178https://www.xlabs.club/contributors/l10178/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/contributors/l10178/ \ No newline at end of file +Contributors on XLabshttps://www.xlabs.club/contributors/Recent content in Contributors on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800L10178https://www.xlabs.club/contributors/l10178/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/contributors/l10178/ \ No newline at end of file diff --git a/contributors/l10178/index.html b/contributors/l10178/index.html index ef039d2d0..73d2c3d2f 100644 --- a/contributors/l10178/index.html +++ b/contributors/l10178/index.html @@ -5,4 +5,4 @@
\ No newline at end of file + \ No newline at end of file diff --git a/contributors/l10178/index.xml b/contributors/l10178/index.xml index 29d7b2a14..42959298c 100644 --- a/contributors/l10178/index.xml +++ b/contributors/l10178/index.xml @@ -1,4 +1,4 @@ -L10178 on XLabshttps://www.xlabs.club/contributors/l10178/Recent content in L10178 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Mac 搭建本地 K8S 开发环境方案选型https://www.xlabs.club/blog/easiest-k8s-on-macos/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/blog/easiest-k8s-on-macos/因为工作经常需要用到 K8S,而且有时因网络原因不能完全依赖公司网络,或者因为测试新功能不能直接发布到公司集群,所以就有了本地搭建 K8S 的需求。 +L10178 on XLabshttps://www.xlabs.club/contributors/l10178/Recent content in L10178 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Mac 搭建本地 K8S 开发环境方案选型https://www.xlabs.club/blog/easiest-k8s-on-macos/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/blog/easiest-k8s-on-macos/因为工作经常需要用到 K8S,而且有时因网络原因不能完全依赖公司网络,或者因为测试新功能不能直接发布到公司集群,所以就有了本地搭建 K8S 的需求。 另外如果你有以下需求,此文档中提到的方案也许有所帮助: 开发机器模拟 Arm、AMD64 等不同架构。 完全隔离的不同环境,比如为测试 docker、podman、buildkit、containd 等不同软件设置的独立环境。 CI/CD 流程中即用即消的轻量级虚拟机替代方案。 有限的资源模拟大批量的 K8S 节点。 以下介绍一下我用过的几种不同方案,有些纯属个人观点仅供参考。 Docker Desktop 并启用 Kubernetes 功能。 @@ -55,4 +55,4 @@ https://github.com/traefik/traefik/issues/7741 https://github.com/spring-project Exception in thread "slow-fetch-15" java.lang.OutOfMemoryError: unable to create new native thread 428 at java.lang.Thread.start0(Native Method) 429 at java.lang.Thread.start(Thread.java:719) 430 at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) 431 at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1025) 432 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 433 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 进入 Pod 内,尝试执行任何操作,又会出现 unable to start container process 错误。 一开始怀疑是内存不足,调大了内存,同时也缩小了 Java 的 xss,都不起作用。 真实原因: K8S 容器限制了 PID 数,无法创建新的线程,在 Pod 内 cat /sys/fs/cgroup/pids/pids.max 发现是 1024。 -关于 K8S pid limit, 可参考此资料:https://kubernetes.io/zh-cn/docs/concepts/policy/pid-limiting/.K8S 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S 容器内 Java 进程内存分析,容器和 Jave OOM 问题定位。 \ No newline at end of file +关于 K8S pid limit, 可参考此资料:https://kubernetes.io/zh-cn/docs/concepts/policy/pid-limiting/.K8S Pod 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S Pod 容器内 Java 进程内存分析,容器 OOM 和 Jave OOM 问题定位。 \ No newline at end of file diff --git a/docs/cloud/index.xml b/docs/cloud/index.xml index 78edd8412..58f30f41e 100644 --- a/docs/cloud/index.xml +++ b/docs/cloud/index.xml @@ -1,3 +1,3 @@ -云原生 on XLabshttps://www.xlabs.club/docs/cloud/Recent content in 云原生 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Introductionhttps://www.xlabs.club/docs/cloud/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/cloud/introduction/云原生技术探索。基于 Envoy 的智能路由服务https://www.xlabs.club/docs/cloud/service-mesh-envoy/Mon, 07 Aug 2023 10:54:37 +0800https://www.xlabs.club/docs/cloud/service-mesh-envoy/基于 Envoy + Java Agent 的智能路由服务实现方案介绍。 +云原生 on XLabshttps://www.xlabs.club/docs/cloud/Recent content in 云原生 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Introductionhttps://www.xlabs.club/docs/cloud/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/cloud/introduction/云原生技术探索。基于 Envoy 的智能路由服务https://www.xlabs.club/docs/cloud/service-mesh-envoy/Mon, 07 Aug 2023 10:54:37 +0800https://www.xlabs.club/docs/cloud/service-mesh-envoy/基于 Envoy + Java Agent 的智能路由服务实现方案介绍。 核心需求 服务自动注册和发现,通过 Service Name 直接调用服务。当然基本的负载均衡策略、熔断降级限流等功能也要支持。 公司约定的路由策略,支持按照租户路由到特定环境的服务,比如 VIP、Gray、Sandbox 等。 多集群通信,同云内新老 K8S 集群路由打通,可通过 POD IP 互相通信。 跨云通信,支持通过 VPN 或代理,从专属云访问公有云服务。 整体架构 智能路由服务从逻辑上分为数据平面和控制平面,主要包含以下组件。 Nacos:服务注册中心,配置中心。 XDS Server:对接服务注册中心、配置中心,实现 CDS、LDS、RDS 协议将集群、服务、路由、灰度租户等配置下发到 Envoy。 Envoy + WASM Plugin:通过 Envoy 代理流量,自定义 WASM 插件实现按照租户、用户路由到不同服务,实现自定义负载均衡策略。 Java Agent:增强 Java 应用 Http Client,拦截 OkHttp、Apache Http Client、RestTemplate、OpenFeign 等客户端调用,将流量重定向到 Envoy,Envoy 再根据服务名路由到真实的 Pod,实现服务发现和灾备切换。 Nacos Service CRD:自定义 Nacos Service CRD,将 Service 注册到 Nacos 中作为一个永久实例,解决跨云、跨集群服务调用。比如跨云情况下注册的是一个公网地址或 VPN 可通的地址。 C4Context title 基于 Envoy + Java Agent 的智能路由服务 Enterprise_Boundary(dp, " \ No newline at end of file diff --git a/docs/cloud/introduction/index.html b/docs/cloud/introduction/index.html index ebdb53079..9bca2c37c 100644 --- a/docs/cloud/introduction/index.html +++ b/docs/cloud/introduction/index.html @@ -1,10 +1,10 @@ Introduction — XLabs -
\ No newline at end of file diff --git a/docs/cloud/service-mesh-envoy/index.html b/docs/cloud/service-mesh-envoy/index.html index 13fcc3852..54b5e274e 100644 --- a/docs/cloud/service-mesh-envoy/index.html +++ b/docs/cloud/service-mesh-envoy/index.html @@ -1,7 +1,7 @@ 基于 Envoy 的智能路由服务 — XLabs
\ No newline at end of file diff --git a/docs/cloud/sitemap.xml b/docs/cloud/sitemap.xml index 995bf32f6..5a436c3a9 100644 --- a/docs/cloud/sitemap.xml +++ b/docs/cloud/sitemap.xml @@ -1 +1 @@ -https://www.xlabs.club/docs/cloud/introduction/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/cloud/service-mesh-envoy/2024-04-29T11:37:22+08:00monthly0.5 \ No newline at end of file +https://www.xlabs.club/docs/cloud/introduction/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/cloud/service-mesh-envoy/2024-04-29T17:14:02+08:00monthly0.5 \ No newline at end of file diff --git a/docs/guides/index.xml b/docs/guides/index.xml index 99da055d7..341ecc5e5 100644 --- a/docs/guides/index.xml +++ b/docs/guides/index.xml @@ -1,4 +1,4 @@ -Guides on XLabshttps://www.xlabs.club/docs/guides/Recent content in Guides on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Introductionhttps://www.xlabs.club/docs/guides/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/guides/introduction/卫星实验室,一个专注于研究 CRM(Customer Relationship Management,客户关系管理) 的开源组织。 +Guides on XLabshttps://www.xlabs.club/docs/guides/Recent content in Guides on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Introductionhttps://www.xlabs.club/docs/guides/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/guides/introduction/卫星实验室,一个专注于研究 CRM(Customer Relationship Management,客户关系管理) 的开源组织。 此项目为卫星实验室主页 xlabs.club 的源码,在这里我们将分享 CRM 领域独有的建设经验,介绍如何以技术驱动 CRM 长期发展和高速增长。 加入我们,与我们共同共同探索 CRM 技术前沿,解决行业中的挑战。 主页内容 平台工程:我们的平台工程建设之路,关于 DevOps, DataOps, FinOps 以及 AIOps 的工程实践。 云原生:云原生技术探索,如何以云原生技术支撑起不断变化的复杂业务。 技术博客:研发踩坑记录,翻一翻总有惊喜。 awesome-x-ops:一些关于 AIOps、DataOps、DevOps、GitOps、FinOps 的优秀软件、博客、配套工具。 xlabs-ops:一些运维脚本和模板,如 Argo Workflows 模板仓库,是对官方 Examples 的组合、扩展。 License 本文档采用 CC BY-NC 4.0 许可协议。 \ No newline at end of file diff --git a/docs/guides/introduction/index.html b/docs/guides/introduction/index.html index 437735a13..831a56006 100644 --- a/docs/guides/introduction/index.html +++ b/docs/guides/introduction/index.html @@ -1,10 +1,10 @@ 卫星实验室,一个专注于研究 CRM 的开源组织 -

Introduction

卫星实验室,一个专注于研究 CRM(Customer Relationship Management,客户关系管理) 的开源组织。

此项目为卫星实验室主页 xlabs.club 的源码,在这里我们将分享 CRM 领域独有的建设经验,介绍如何以技术驱动 CRM 长期发展和高速增长。

加入我们,与我们共同共同探索 CRM 技术前沿,解决行业中的挑战。

主页内容

  • 平台工程:我们的平台工程建设之路,关于 DevOps, DataOps, FinOps 以及 AIOps 的工程实践。
  • 云原生:云原生技术探索,如何以云原生技术支撑起不断变化的复杂业务。
  • 技术博客:研发踩坑记录,翻一翻总有惊喜。
  • awesome-x-ops:一些关于 AIOps、DataOps、DevOps、GitOps、FinOps 的优秀软件、博客、配套工具。
  • xlabs-ops:一些运维脚本和模板,如 Argo Workflows 模板仓库,是对官方 Examples 的组合、扩展。

License

本文档采用 CC BY-NC 4.0 许可协议。

Introduction

卫星实验室,一个专注于研究 CRM(Customer Relationship Management,客户关系管理) 的开源组织。

此项目为卫星实验室主页 xlabs.club 的源码,在这里我们将分享 CRM 领域独有的建设经验,介绍如何以技术驱动 CRM 长期发展和高速增长。

加入我们,与我们共同共同探索 CRM 技术前沿,解决行业中的挑战。

主页内容

  • 平台工程:我们的平台工程建设之路,关于 DevOps, DataOps, FinOps 以及 AIOps 的工程实践。
  • 云原生:云原生技术探索,如何以云原生技术支撑起不断变化的复杂业务。
  • 技术博客:研发踩坑记录,翻一翻总有惊喜。
  • awesome-x-ops:一些关于 AIOps、DataOps、DevOps、GitOps、FinOps 的优秀软件、博客、配套工具。
  • xlabs-ops:一些运维脚本和模板,如 Argo Workflows 模板仓库,是对官方 Examples 的组合、扩展。

License

本文档采用 CC BY-NC 4.0 许可协议。

\ No newline at end of file diff --git a/docs/guides/sitemap.xml b/docs/guides/sitemap.xml index 8f7ebfc73..79f2228a4 100644 --- a/docs/guides/sitemap.xml +++ b/docs/guides/sitemap.xml @@ -1 +1 @@ -https://www.xlabs.club/docs/guides/introduction/2024-04-29T11:37:22+08:00monthly0.5 \ No newline at end of file +https://www.xlabs.club/docs/guides/introduction/2024-04-29T17:14:02+08:00monthly0.5 \ No newline at end of file diff --git a/docs/platform/backstage/index.html b/docs/platform/backstage/index.html index 0cbce1dba..b501747bc 100644 --- a/docs/platform/backstage/index.html +++ b/docs/platform/backstage/index.html @@ -1,10 +1,10 @@ 开发者门户 — XLabs -
\ No newline at end of file diff --git a/docs/platform/iam/index.html b/docs/platform/iam/index.html index 25daf735b..60be1a3c8 100644 --- a/docs/platform/iam/index.html +++ b/docs/platform/iam/index.html @@ -1,5 +1,5 @@ 统一身份认证 — XLabs -
\ No newline at end of file diff --git a/docs/platform/index.xml b/docs/platform/index.xml index 1fc7c4fd4..8983e23cc 100644 --- a/docs/platform/index.xml +++ b/docs/platform/index.xml @@ -1,4 +1,4 @@ -平台工程 on XLabshttps://www.xlabs.club/docs/platform/Recent content in 平台工程 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800总体架构https://www.xlabs.club/docs/platform/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/platform/introduction/我们的平台工程建设之路,介绍前期方案设计、中间踩坑历程。 +平台工程 on XLabshttps://www.xlabs.club/docs/platform/Recent content in 平台工程 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800总体架构https://www.xlabs.club/docs/platform/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/platform/introduction/我们的平台工程建设之路,介绍前期方案设计、中间踩坑历程。 原则 分享我们平台工程建设的一些基本原则。 以开发者为中心:赋能开发者,了解困难,解决问题,让开发者生活更轻松。 自动化:自动化手动和重复性任务,减少人为错误,提高效率。 标准化:标准化保持一致性,减少复杂性,减少团队认知负载,提供最佳实践和统一的编码结构。 模块化:松耦合且独立的模块,可独立开发、测试和部署。 弹性:可扩展水平扩缩容的能力,以及容错抗脆弱的能力。 安全:相比于微服务、云原生领域的安全,在平台工程里,更强调代码、基础设施、数据和其他资源的安全。 协作:平台工程师、开发人员、运维运营人员以及其他参与者之间的协作,提高生产力、促进创新并创造积极包容的工作环境。 持续改进:持续性反馈、评估、改进。 架构概述 为便于理解,我们仍然按照惯用架构模型,将架构分为 IaaS、CaaS、PaaS、Applications 这几个层级。 专业的运维人员作为 platform engineer 着重于 IaaS、CaaS、PaaS 建设,开发人员作为 application engineer 更专注于 PaaS、Applications 建设,为开发和运维提供工具、协作平台、基础应用。 diff --git a/docs/platform/introduction/index.html b/docs/platform/introduction/index.html index 21864577c..5db8e94ab 100644 --- a/docs/platform/introduction/index.html +++ b/docs/platform/introduction/index.html @@ -1,5 +1,5 @@ 平台工程架构概述和架构演进 -
\ No newline at end of file diff --git a/docs/platform/sitemap.xml b/docs/platform/sitemap.xml index fc181ed6f..4ce6cb728 100644 --- a/docs/platform/sitemap.xml +++ b/docs/platform/sitemap.xml @@ -1 +1 @@ -https://www.xlabs.club/docs/platform/introduction/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/iam/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/backstage/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/smart-code/2024-04-29T11:37:22+08:00monthly0.5 \ No newline at end of file +https://www.xlabs.club/docs/platform/introduction/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/iam/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/backstage/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/smart-code/2024-04-29T17:14:02+08:00monthly0.5 \ No newline at end of file diff --git a/docs/platform/smart-code/index.html b/docs/platform/smart-code/index.html index 696d4d159..7bec5fc83 100644 --- a/docs/platform/smart-code/index.html +++ b/docs/platform/smart-code/index.html @@ -1,5 +1,5 @@ 使用 OpenRewrite 进行代码重构,搭建私有企业级智能代码重构平台 -
\ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 2caabefd2..2156aa5ae 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -1 +1 @@ -https://www.xlabs.club/docs/guides/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/cloud/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/tldr/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/guides/introduction/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/introduction/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/iam/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/backstage/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/platform/smart-code/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/cloud/introduction/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/cloud/service-mesh-envoy/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/tldr/kubernetes/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/tldr/knife/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/tldr/shell-coding/2024-04-29T11:37:22+08:00monthly0.5 \ No newline at end of file +https://www.xlabs.club/docs/guides/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/cloud/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/tldr/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/guides/introduction/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/introduction/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/iam/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/backstage/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/platform/smart-code/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/cloud/introduction/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/cloud/service-mesh-envoy/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/tldr/kubernetes/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/tldr/knife/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/tldr/shell-coding/2024-04-29T17:14:02+08:00monthly0.5 \ No newline at end of file diff --git a/docs/tldr/index.xml b/docs/tldr/index.xml index 83ae6f0bb..5bd6505f9 100644 --- a/docs/tldr/index.xml +++ b/docs/tldr/index.xml @@ -1,4 +1,4 @@ -TL;DR on XLabshttps://www.xlabs.club/docs/tldr/Recent content in TL;DR on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Kuberneteshttps://www.xlabs.club/docs/tldr/kubernetes/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/tldr/kubernetes/常用 Kubernetes 命令,复制,粘贴,这就是生活。 +TL;DR on XLabshttps://www.xlabs.club/docs/tldr/Recent content in TL;DR on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Kuberneteshttps://www.xlabs.club/docs/tldr/kubernetes/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/tldr/kubernetes/常用 Kubernetes 命令,复制,粘贴,这就是生活。 复制 secret 到另一个 namespace。 kubectl get secret mys --namespace=na -oyaml | grep -v '^\s*namespace:\s' | kubectl apply --namespace=nb -f - 批量删除 pod。 kubectl get pods --all-namespaces | grep Evicted | awk '{print $2 " --namespace=" $1}' | xargs kubectl delete pod # Delete by label kubectl delete pod -n idaas-book -l app.kubernetes.io/name=idaas-book 原地重启 Pod。 kubectl rollout restart deploy/xxx -n your-namespace 命令行快速扩缩容。 # kubectl scale -h kubectl scale --replicas=1 deploy/xxx -n your-namespace 密钥解密。 kubectl get secret my-creds -n mysql -o jsonpath="{.Knifehttps://www.xlabs.club/docs/tldr/knife/Sat, 09 Mar 2024 14:39:50 +0800https://www.xlabs.club/docs/tldr/knife/程序员的瑞士军刀,常用优秀命令行工具,上榜都是有理由的。 procs 比 ps 好用的工具,查看路径和端口一步到位,支持过滤。 ripgrep ripgrep 简称 rg,是一个面向行的搜索工具,Rust 编写,全平台支持,也是 VS Code 的默认搜索工具。它的搜索性能极高,在大项目中也有着出色的表现,并且默认可以忽略 .gitignore 文件中的内容,非常实用。 diff --git a/docs/tldr/knife/index.html b/docs/tldr/knife/index.html index 49c0d92c7..caf1ffe02 100644 --- a/docs/tldr/knife/index.html +++ b/docs/tldr/knife/index.html @@ -1,5 +1,5 @@ 程序员的瑞士军刀,常用优秀命令行工具 -
\ No newline at end of file diff --git a/docs/tldr/kubernetes/index.html b/docs/tldr/kubernetes/index.html index 0915102ee..7aeb6ad24 100644 --- a/docs/tldr/kubernetes/index.html +++ b/docs/tldr/kubernetes/index.html @@ -1,5 +1,5 @@ Kubernetes — XLabs -
\ No newline at end of file diff --git a/docs/tldr/shell-coding/index.html b/docs/tldr/shell-coding/index.html index d9f218bc3..7ecf1139c 100644 --- a/docs/tldr/shell-coding/index.html +++ b/docs/tldr/shell-coding/index.html @@ -1,5 +1,5 @@ Linux Shell 编程实用句式速查 -
\ No newline at end of file diff --git a/docs/tldr/sitemap.xml b/docs/tldr/sitemap.xml index b0a768b4b..b079f6ec9 100644 --- a/docs/tldr/sitemap.xml +++ b/docs/tldr/sitemap.xml @@ -1 +1 @@ -https://www.xlabs.club/docs/tldr/kubernetes/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/tldr/knife/2024-04-29T11:37:22+08:00monthly0.5https://www.xlabs.club/docs/tldr/shell-coding/2024-04-29T11:37:22+08:00monthly0.5 \ No newline at end of file +https://www.xlabs.club/docs/tldr/kubernetes/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/tldr/knife/2024-04-29T17:14:02+08:00monthly0.5https://www.xlabs.club/docs/tldr/shell-coding/2024-04-29T17:14:02+08:00monthly0.5 \ No newline at end of file diff --git a/index.xml b/index.xml index 5496c7062..16b229b6a 100644 --- a/index.xml +++ b/index.xml @@ -1,4 +1,4 @@ -卫星实验室 on XLabshttps://www.xlabs.club/Recent content in 卫星实验室 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Introductionhttps://www.xlabs.club/docs/cloud/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/cloud/introduction/云原生技术探索。Introductionhttps://www.xlabs.club/docs/guides/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/guides/introduction/卫星实验室,一个专注于研究 CRM(Customer Relationship Management,客户关系管理) 的开源组织。 +卫星实验室 on XLabshttps://www.xlabs.club/Recent content in 卫星实验室 on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Introductionhttps://www.xlabs.club/docs/cloud/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/cloud/introduction/云原生技术探索。Introductionhttps://www.xlabs.club/docs/guides/introduction/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/guides/introduction/卫星实验室,一个专注于研究 CRM(Customer Relationship Management,客户关系管理) 的开源组织。 此项目为卫星实验室主页 xlabs.club 的源码,在这里我们将分享 CRM 领域独有的建设经验,介绍如何以技术驱动 CRM 长期发展和高速增长。 加入我们,与我们共同共同探索 CRM 技术前沿,解决行业中的挑战。 主页内容 平台工程:我们的平台工程建设之路,关于 DevOps, DataOps, FinOps 以及 AIOps 的工程实践。 云原生:云原生技术探索,如何以云原生技术支撑起不断变化的复杂业务。 技术博客:研发踩坑记录,翻一翻总有惊喜。 awesome-x-ops:一些关于 AIOps、DataOps、DevOps、GitOps、FinOps 的优秀软件、博客、配套工具。 xlabs-ops:一些运维脚本和模板,如 Argo Workflows 模板仓库,是对官方 Examples 的组合、扩展。 License 本文档采用 CC BY-NC 4.0 许可协议。Kuberneteshttps://www.xlabs.club/docs/tldr/kubernetes/Thu, 07 Sep 2023 16:04:48 +0200https://www.xlabs.club/docs/tldr/kubernetes/常用 Kubernetes 命令,复制,粘贴,这就是生活。 diff --git a/privacy/index.html b/privacy/index.html index 54700309f..cb2dc0f92 100644 --- a/privacy/index.html +++ b/privacy/index.html @@ -1,5 +1,5 @@ Privacy Policy — XLabs -
\ No newline at end of file + \ No newline at end of file diff --git a/tags/java/index.xml b/tags/java/index.xml index 543893744..b74edc7ab 100644 --- a/tags/java/index.xml +++ b/tags/java/index.xml @@ -1,4 +1,4 @@ -Java on XLabshttps://www.xlabs.club/tags/java/Recent content in Java on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: +Java on XLabshttps://www.xlabs.club/tags/java/Recent content in Java on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: 规范公司自己的 parent pom,增加特定的依赖项。 根据公司规范生成统一的包结构,统一命名。 根据需要增加特定代码或文件,比如根据公司要求统一 logback.xml、 application.properties 文件。 提供公司自研的二方 jar 包。 快速开始 基本步骤: 对于 spring.initializr 我们没有定制的需求,直接引用官方的。 拷贝一份 start.spring.io,直接基于这个项目开发、部署、运行。以下都是关于如何修改 start.spring.io。 start.spring.io 主要关注两个模块: start-client:前端页面,可以定制些自己的 logo、title 等。 start-site:是一个标准的 spring boot 项目,实际 run 起来的服务,引用了 start-client,直接 run 这个项目的 main 方法就能看到效果。 主要配置文件:start-site/src/main/resources/application.yml,通过修改这个配置文件可以达到的效果如下。 @@ -21,7 +21,7 @@ https://github.com/traefik/traefik/issues/7741 https://github.com/spring-project Exception in thread "slow-fetch-15" java.lang.OutOfMemoryError: unable to create new native thread 428 at java.lang.Thread.start0(Native Method) 429 at java.lang.Thread.start(Thread.java:719) 430 at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) 431 at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1025) 432 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 433 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 进入 Pod 内,尝试执行任何操作,又会出现 unable to start container process 错误。 一开始怀疑是内存不足,调大了内存,同时也缩小了 Java 的 xss,都不起作用。 真实原因: K8S 容器限制了 PID 数,无法创建新的线程,在 Pod 内 cat /sys/fs/cgroup/pids/pids.max 发现是 1024。 -关于 K8S pid limit, 可参考此资料:https://kubernetes.io/zh-cn/docs/concepts/policy/pid-limiting/.K8S 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S 容器内 Java 进程内存分析,容器和 Jave OOM 问题定位。从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录https://www.xlabs.club/blog/migrating-spring-to-spring-boot/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/migrating-spring-to-spring-boot/从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录。 +关于 K8S pid limit, 可参考此资料:https://kubernetes.io/zh-cn/docs/concepts/policy/pid-limiting/.K8S Pod 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S Pod 容器内 Java 进程内存分析,容器 OOM 和 Jave OOM 问题定位。从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录https://www.xlabs.club/blog/migrating-spring-to-spring-boot/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/migrating-spring-to-spring-boot/从 Spring 到 Spring Boot,迁移升级快速入门以及各种踩坑记录。 概述 从 Spring 到 Spring Boot,整体开发、运行方式主要变化。 - 当前(老)模式 新模式(本地开发) 新模式(线上运行) 开发习惯 Spring + 外置 Tomcat Spring Boot(embed tomcat) Spring Boot War or Jar Java 版本 8、11、16、17 11、17、21(推荐) 11、17、21(推荐) Tomcat 版本 8.x、9.x 9.x 9.x(推荐)、10.x 说明: 理论上完全兼容 Java11,但是要求业务方尽量使用 Java17 或 21。其他版本都是实验性质尽量兼容。 线上运行支持 Spring Boot jar 直接运行,但主要业务仍推荐以 war + tomcat 为主。如果希望以 java -jar 方式运行,参考下面的章节“jar 方式运行”描述。 目前 Spring Boot 主要推行版本是 2.7.x。 3.x 版本逐渐适配中,注意 3.x 要求 Java 最低版本是 17。 快速开始 线下支撑系统导航,点击 脚手架 进入 spring start 页面,按自己需求选择模块,生成自己业务模式初始化代码。 写(Copy)业务代码到项目里,修改 pom.Spring Boot 使用 Micrometer 集成 Prometheus 监控,5 分钟接入自定义监控指标https://www.xlabs.club/blog/spring-boot-micrometer/Mon, 07 Aug 2023 10:54:37 +0800https://www.xlabs.club/blog/spring-boot-micrometer/Spring Boot 使用 Micrometer 集成 Prometheus 监控,5 分钟接入自定义监控指标,主要内容: diff --git a/tags/k8s/index.html b/tags/k8s/index.html index c1ba607da..e285f28dc 100644 --- a/tags/k8s/index.html +++ b/tags/k8s/index.html @@ -5,4 +5,4 @@

K8s

\ No newline at end of file +

K8s

\ No newline at end of file diff --git a/tags/k8s/index.xml b/tags/k8s/index.xml index 5b134613f..871fd3b14 100644 --- a/tags/k8s/index.xml +++ b/tags/k8s/index.xml @@ -1,4 +1,4 @@ -K8s on XLabshttps://www.xlabs.club/tags/k8s/Recent content in K8s on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Mac 搭建本地 K8S 开发环境方案选型https://www.xlabs.club/blog/easiest-k8s-on-macos/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/blog/easiest-k8s-on-macos/因为工作经常需要用到 K8S,而且有时因网络原因不能完全依赖公司网络,或者因为测试新功能不能直接发布到公司集群,所以就有了本地搭建 K8S 的需求。 +K8s on XLabshttps://www.xlabs.club/tags/k8s/Recent content in K8s on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Mac 搭建本地 K8S 开发环境方案选型https://www.xlabs.club/blog/easiest-k8s-on-macos/Sat, 13 Apr 2024 15:20:43 +0800https://www.xlabs.club/blog/easiest-k8s-on-macos/因为工作经常需要用到 K8S,而且有时因网络原因不能完全依赖公司网络,或者因为测试新功能不能直接发布到公司集群,所以就有了本地搭建 K8S 的需求。 另外如果你有以下需求,此文档中提到的方案也许有所帮助: 开发机器模拟 Arm、AMD64 等不同架构。 完全隔离的不同环境,比如为测试 docker、podman、buildkit、containd 等不同软件设置的独立环境。 CI/CD 流程中即用即消的轻量级虚拟机替代方案。 有限的资源模拟大批量的 K8S 节点。 以下介绍一下我用过的几种不同方案,有些纯属个人观点仅供参考。 Docker Desktop 并启用 Kubernetes 功能。 @@ -25,4 +25,4 @@ K8S Service 使用 round-robin 负载均衡策略。 客户端和服务端都启 Exception in thread "slow-fetch-15" java.lang.OutOfMemoryError: unable to create new native thread 428 at java.lang.Thread.start0(Native Method) 429 at java.lang.Thread.start(Thread.java:719) 430 at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) 431 at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1025) 432 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 433 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 进入 Pod 内,尝试执行任何操作,又会出现 unable to start container process 错误。 一开始怀疑是内存不足,调大了内存,同时也缩小了 Java 的 xss,都不起作用。 真实原因: K8S 容器限制了 PID 数,无法创建新的线程,在 Pod 内 cat /sys/fs/cgroup/pids/pids.max 发现是 1024。 -关于 K8S pid limit, 可参考此资料:https://kubernetes.io/zh-cn/docs/concepts/policy/pid-limiting/.K8S 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S 容器内 Java 进程内存分析,容器和 Jave OOM 问题定位。 \ No newline at end of file +关于 K8S pid limit, 可参考此资料:https://kubernetes.io/zh-cn/docs/concepts/policy/pid-limiting/.K8S Pod 容器内 Java 进程内存分析https://www.xlabs.club/blog/java-memory/Sat, 07 Jan 2023 10:54:37 +0800https://www.xlabs.club/blog/java-memory/K8S Pod 容器内 Java 进程内存分析,容器 OOM 和 Jave OOM 问题定位。 \ No newline at end of file diff --git a/tags/spring-boot/index.xml b/tags/spring-boot/index.xml index 438793542..7436a8115 100644 --- a/tags/spring-boot/index.xml +++ b/tags/spring-boot/index.xml @@ -1,4 +1,4 @@ -Spring Boot on XLabshttps://www.xlabs.club/tags/spring-boot/Recent content in Spring Boot on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: +Spring Boot on XLabshttps://www.xlabs.club/tags/spring-boot/Recent content in Spring Boot on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800Spring Boot Start 脚手架定制开发和快速入门https://www.xlabs.club/blog/spring-boot-start-site/Sat, 09 Mar 2024 14:29:03 +0800https://www.xlabs.club/blog/spring-boot-start-site/介绍基于 start.spring.io 快速定制自己的 Spring Boot 脚手架,主要应用场景: 规范公司自己的 parent pom,增加特定的依赖项。 根据公司规范生成统一的包结构,统一命名。 根据需要增加特定代码或文件,比如根据公司要求统一 logback.xml、 application.properties 文件。 提供公司自研的二方 jar 包。 快速开始 基本步骤: 对于 spring.initializr 我们没有定制的需求,直接引用官方的。 拷贝一份 start.spring.io,直接基于这个项目开发、部署、运行。以下都是关于如何修改 start.spring.io。 start.spring.io 主要关注两个模块: start-client:前端页面,可以定制些自己的 logo、title 等。 start-site:是一个标准的 spring boot 项目,实际 run 起来的服务,引用了 start-client,直接 run 这个项目的 main 方法就能看到效果。 主要配置文件:start-site/src/main/resources/application.yml,通过修改这个配置文件可以达到的效果如下。 diff --git a/tags/tools/index.xml b/tags/tools/index.xml index 7770477ef..21f2d6133 100644 --- a/tags/tools/index.xml +++ b/tags/tools/index.xml @@ -1,4 +1,4 @@ -Tools on XLabshttps://www.xlabs.club/tags/tools/Recent content in Tools on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 11:37:22 +0800MacOS 固化配置,彻底解决 too many open files in system 的问题https://www.xlabs.club/blog/macos-too-many-open-files/Tue, 19 Mar 2024 23:05:07 +0800https://www.xlabs.club/blog/macos-too-many-open-files/作为一个开发者,经常在 MacOS 遇到 Too many open files in system 的报错,尤其是碰到黑洞 node_modules 时,如何固化配置彻底解决,直接上代码。 +Tools on XLabshttps://www.xlabs.club/tags/tools/Recent content in Tools on XLabsHugo -- gohugo.iozhCopyright (c) 2020-2024 XLabs ClubMon, 29 Apr 2024 17:14:02 +0800MacOS 固化配置,彻底解决 too many open files in system 的问题https://www.xlabs.club/blog/macos-too-many-open-files/Tue, 19 Mar 2024 23:05:07 +0800https://www.xlabs.club/blog/macos-too-many-open-files/作为一个开发者,经常在 MacOS 遇到 Too many open files in system 的报错,尤其是碰到黑洞 node_modules 时,如何固化配置彻底解决,直接上代码。 输入 launchctl limit 即可看到当前的限制,我这里 maxfiles 是改过以后的。 $ launchctl limit cpu unlimited unlimited filesize unlimited unlimited data unlimited unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 1392 2088 maxfiles 10240 102400 开始创建文件 sudo vi /Library/LaunchDaemons/limit.maxfiles.plist ,内容如下,可根据自己爱好改后面的两个数字值。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>10240</string> <string>102400</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist> 验证文件格式和内容,并应用生效。Windows 提权和设置环境变量https://www.xlabs.club/blog/windows-takeown/Mon, 26 Feb 2024 23:25:29 +0800https://www.xlabs.club/blog/windows-takeown/背景:公司 Windows 办公机受域控安全策略限制,部分文件无权直接修改,另外开发常用的设置系统环境变量也变灰无法设置。此问题解决方式如下。