GaGa's Blog

One GaGa, One World !

1.直接挂载宿主机 /etc/localtime/etc/timezone

1
2
3
4
5
6
services:
app:
image: myapp:latest
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro # centos7
  • :ro 表示只读挂载,防止容器修改宿主机时间。
  • 这样容器会使用宿主机的时区和时间。

Read more »

mvn clean package -Dmaven.test.skip=true -P pro

  • 1 clean
    清理项目的 target/ 目录,确保构建从干净环境开始。

  • 2 package
    执行 Maven 的生命周期到 package 阶段,通常会生成 .jar.war 包。

  • 3 -Dmaven.test.skip=true
    跳过测试用例的 执行编译
    这是一个 JVM 系统属性,Maven 构建时会跳过 Surefire/Failsafe 测试任务。

  • 4 -P pro
    它表示 激活 Maven Profile:pro
    Profile 是 Maven 用来实现“不同环境构建”的机制,例如 devtestprepro 等。

- P pro 在哪里读取配置

  • pom.xml(最常见)
    项目的 pom.xml 内部定义:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <profiles>
    <profile>
    <id>pro</id>
    <properties>
    <env>prod</env>
    </properties>
    <activation>
    <activeByDefault>false</activeByDefault>
    </activation>
    </profile>
    </profiles>
  • ~/.m2/settings.xml(用户级别配置)
    这里也可以定义 profile,例如仓库源、私服账号:

    1
    2
    3
    4
    5
    6
    7
    8
    <profiles>
    <profile>
    <id>pro</id>
    <properties>
    <nexus.url>http://nexus.example.com</nexus.url>
    </properties>
    </profile>
    </profiles>
  • 全局 settings.xml(Maven 安装目录 conf/settings.xml)

Read more »

集群脑裂(Split-Brain)像是“同一个大脑被硬生生裂成两个”,两个节点或多个节点因为通信中断,各自误以为对方挂了,于是纷纷把自己当成“合法主节点”。
这会导致一个危险局面:出现多个主节点同时对外提供写入服务,数据就像被两个平行宇宙分别改写,最终回到现实世界只能引爆混乱(数据冲突、版本不一致、服务错乱)。

脑裂是分布式系统的天敌,它本质是对“共识”失败的暴露:节点失去彼此的视野,让一致性算法失去了基础。

典型诱因包括:

  • 网络抖动、延迟、短暂隔离
  • 仲裁节点不够(例如偶数节点)
  • 心跳机制过于敏感或超时时间太短
  • 资源耗尽导致心跳丢包(CPU/RAM/IO 抖动)
Read more »

Java 启动时确实可以同时加载多个 agent,只要它们都通过 -javaagent: 形式添加即可。JVM 在启动阶段会按顺序依次调用每个agentpremain 方法(或在 attach 时调用 agentmain)。

1.启动示例

假设你有两个 Agent:A 和 B,启动 Java 时可以这样写:

java \
 -javaagent:/opt/agentA.jar=cfgA \
 -javaagent:/opt/agentB.jar=cfgB \
 -jar app.jar
Read more »

Linux 系统中,dns1dns2 通常表示 主 DNS(Primary DNS)备用 DNS(Secondary DNS),它们是系统用于域名解析的服务器地址


一、定义与作用

项目 含义 优先级 作用
DNS1 主 DNS 服务器 优先使用 首选的域名解析服务器
DNS2 备用 DNS 服务器 备用使用 当主 DNS 无响应或解析失败时使用
Read more »

基础结构

1
ENTRYPOINT ["java", "<JVM参数>", "-jar", "/java/crab.jar", "<应用参数>"]
  • java:启动 JVM
  • <JVM参数>:控制内存、日志、诊断等 JVM 行为
  • -jar /java/crab.jar:启动你的 Spring Boot 应用
  • <应用参数>:传递给应用的参数,如端口或 profile

-Dspring.profiles.active=pro jvm参数可以转换应用参数 –spring.profiles.active=pro

Read more »

问题

日志已经说得非常清楚:405 PUT Not Allowed。这句话等同于 Nexus 对你说:“兄弟,你往一个不能上传的仓库 PUT 了东西。”deploy 插件正在尝试把 SNAPSHOT 上传到 maven-public,但 public 是一个聚合仓库(group),它只负责聚合,不允许上传,于是 405。


Nexus 仓库结构

Read more »

问题

你的异常是典型的 JDK 版本不兼容:RepackageMojo 的 class file version 是 61.0(JDK17 编译),而你当前运行 Maven 的 JDK 只有 52.0(JDK8)

换句话讲:
插件是 JDK17 编译的,你却用 JDK8 去执行构建 → JVM 直接拒绝运行。


Read more »

问题

在容器部署的 Java 应用中,控制台日志时间比真实时间少 8 小时,即 UTC 时间,虽然容器挂载了 /etc/localtime

volumes:
  - /etc/localtime:/etc/localtime:ro

但日志仍然由 logback 输出为 UTC 时区。

Read more »

多个 Filebeat 实例同时使用默认 path.data=/usr/share/filebeat/data,产生同一个 filebeat.lock 文件,导致进程互斥锁冲突,第二个进程无法启动。


1.锁文件冲突说明

Filebeat 会在 path.data 下创建锁文件:

Read more »
0%