Linux 基础 - JAVA 运维

MD原文档下载:百度网盘

JAVA运维

一、若依部署

1.1 相关概念

1.1.1 关于若依

若依是一套开源的 Java 快速开发平台, 半成品的后台管理系统,包含用户管理、菜单管理、权限控制、日志记录等基础功能

官网:http://ruoyi.vip

1.1.2 部署方式
  • JAR 包 : 内嵌 Tomcat
  • WAR 包 : 外置 Tomcat
1.1.3 关于 Tomcat

Java 生态中最常用的 Web 应用服务器,于运行 WAR 包形式的 Java Web 应用

1.2 案例一 : 若依经典版部署 (Tomcat + WAR包)

1.2.1 整体架构

image-20260806144834266

1.2.2 部署环境
主机名角色IP 地址核心软件
db-mysqlMySQL 数据库服务器10.0.0.101MySQL 8.x
db-redisRidis 缓存服务器10.0.0.102Redis 6.x / 7.x
ruoyi-java应用服务器10.0.0.103JDK 8 + Tomcat 9
# 操作系统版本: Rocky 9

# 配置主机名
hostnamectl set-hostname db-mysql
hostnamectl set-hostname db-redis
hostnamectl set-hostname ruoyi-java

# 配置 DNS 解析
cat >> /etc/hosts << 'EOF'
10.0.0.101 db-mysql
10.0.0.102 db-redis
10.0.0.103 ruoyi-java
EOF

# 配置 IP
nmcli connection modify eth0 ipv4.addresses 10.0.0.101/24
nmcli connection modify eth0 ipv4.addresses 10.0.0.102/24
nmcli connection modify eth0 ipv4.addresses 10.0.0.103/24
nmcli connection up eth0
1.2.3 MySQL 初始化
# 克隆若依项目(获取SQL文件)
git clone -b springboot2 https://gitee.com/y_project/RuoYi.git

# 安装 mysql 服务端并启动
dnf install -y mysql-server
systemctl enable --now mysqld

# 创建数据库和用户并授权
mysql -u root << 'EOF'
CREATE DATABASE ruoyi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ruoyi'@'10.0.0.%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi'@'10.0.0.%';
FLUSH PRIVILEGES;
EOF

# 导入若依初始数据到 ruoyi 数据库,注意文件名称以实际为准
mysql -u root ruoyi < RuoYi/sql/ry_20260319.sql
mysql -u root ruoyi < RuoYi/sql/quartz.sql

# 在 ruoyi-java 服务器安装 mysql 客户端,测试连接数据库,输出 ruoyi 创建的 30+ 初始表即正常
dnf -y install mysql
mysql -h db-mysql -uruoyi -p123456 ruoyi -e 'show tables;'
1.2.4 Redis 初始化
# 安装 redis
dnf install -y redis

# 配置 redis, 允许远程连接 + 设置密码
sed -i '/^bind 127.0.0.1/c bind 0.0.0.0' /etc/redis/redis.conf
sed -i '/^# requirepass/c requirepass 123456' /etc/redis/redis.conf

# 启动 redis
systemctl enable --now redis

# 在 ruoyi-java 服务器测试 redis 连通性,输出 PONG 则正常
dnf -y install redis
redis-cli -h db-redis -a 123456 ping
1.2.5 部署应用服务器

ruoyi-java 上执行

# 安装 JDK
dnf install -y java-1.8.0-openjdk-devel

# 配置全局环境变量
tee /etc/profile.d/java.sh << 'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
. /etc/profile.d/java.sh

# 查看 java 版本信息
java -version

# 在线下载 tomcat 9, 或在 Windows 下载传入服务器
wget https://downloads01-he-fi.apache.org/tomcat/tomcat-9/v9.0.118/bin/apache-tomcat-9.0.118.tar.gz
tar xf apache-tomcat-9.0.118.tar.gz -C /usr/local/
ln -s /usr/local/apache-tomcat-9.0.118/ /usr/local/tomcat

# 创建专用用户
useradd -r -s /sbin/nologin tomcat
chown -R tomcat:tomcat /usr/local/tomcat/

# 创建 Systemd 服务
tee /etc/systemd/system/tomcat.service << 'EOF'
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"
Environment="CATALINA_HOME=/usr/local/tomcat"
Environment="CATALINA_BASE=/usr/local/tomcat"
Environment="CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 启动 Tomcat
systemctl daemon-reload
systemctl enable --now tomcat

# 验证 Tomcat 是否启动成功
systemctl status tomcat
ss -ntlp | grep 8080
ps aux | grep tomcat

# Windows添加解析记录后访问,显示 Tomcat 首页即正常
10.0.0.103 ruoyi.deng.org
http://ruoyi.deng.org:8080/

# 克隆若依项目
git clone -b springboot2 https://gitee.com/y_project/RuoYi.git

# 配置数据库连接
cd RuoYi/
vim ruoyi-admin/src/main/resources/application-druid.yml

image-20260806162528657

# 配置 Redis 连接
vim ruoyi-admin/src/main/resources/application.yml

image-20260806162921490

# 修改 pom.xml,打包成 WAR
vim ruoyi-admin/pom.xml
# 找到 <packaging>jar</packaging> ,将 jar 改成 war
<packaging>war</packaging>

# 修改启动类(让Spring Boot支持WAR部署)
vim ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
# :%d 删除全文后粘贴以下内容
package com.ruoyi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class RuoYiApplication extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(RuoYiApplication.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(RuoYiApplication.class, args);
		System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)");
	}
}

# 安装 Maven
dnf -y install maven

# 构建前需要确认 java 版本为 8
java -version

# 修改日志文件路径
sed -i 's|<property name="log.path" value=".*" />|<property name="log.path" value="/usr/local/tomcat/logs/ruoyi" />|' ruoyi-admin/src/main/resources/logback.xml

# 打包构建
mvn clean package -Dmaven.test.skip=true

# 打包成功后, WAR 包位置
ll ruoyi-admin/target/ruoyi-admin.war

# 将 WAR 包复制到 Tomcat 的 webapps 目录
cp ruoyi-admin/target/ruoyi-admin.war /usr/local/tomcat/webapps/

# Tomcat 会自动解压并部署
ls /usr/local/tomcat/webapps/

# 查看日志确认部署成功
tail -f /usr/local/tomcat/logs/catalina.out
# 日志出现以下类似输出表示启动成功
06-Aug-2026 16:46:24.447 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/apache-tomcat-9.0.118/webapps/ruoyi-admin.war] has finished in [8,155] ms

# 浏览器访问,出现登录页面即启动成功
http://ruoyi.deng.org:8080/ruoyi-admin

1.3 案例二 : 若依 Vue 版部署 (Nginx + JAR包)

1.3.1 整体架构

image-20260806170454654

1.3.2 部署环境
层级主机名作用IP 地址核心软件
接入层ruoyi-web反向代理、静态资源10.0.0.101Nginx
应用层ruoyi-java1业务逻辑10.0.0.111若依 JAR
缓存层db-redis会话管理、缓存10.0.0.121Redis
数据层db-mysql数据持久化10.0.0.131MySQL
# 操作系统版本: Rocky 10

# 配置主机名
hostnamectl set-hostname ruoyi-web
hostnamectl set-hostname ruoyi-java1
hostnamectl set-hostname db-redis
hostnamectl set-hostname db-mysql

# 配置 DNS 解析
cat >> /etc/hosts << 'EOF'
10.0.0.101 ruoyi-web
10.0.0.111 ruoyi-java1
10.0.0.121 db-redis
10.0.0.131 db-mysql
EOF

# 配置 IP
nmcli connection modify eth0 ipv4.addresses 10.0.0.101/24
nmcli connection modify eth0 ipv4.addresses 10.0.0.111/24
nmcli connection modify eth0 ipv4.addresses 10.0.0.121/24
nmcli connection modify eth0 ipv4.addresses 10.0.0.131/24
nmcli connection up eth0
1.3.3 MySQL 初始化
# 克隆若依项目(获取SQL文件)
git clone https://gitee.com/y_project/RuoYi-Vue.git

# 安装 mysql 服务端并启动
dnf install -y mysql8.4-server
systemctl enable --now mysqld

# 创建数据库和用户并授权
mysql -u root << 'EOF'
CREATE DATABASE ruoyi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ruoyi'@'10.0.0.%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi'@'10.0.0.%';
FLUSH PRIVILEGES;
EOF

# 导入若依初始数据到 ruoyi 数据库,注意文件名称以实际为准
mysql -u root ruoyi < RuoYi-Vue/sql/ry_20260417.sql
mysql -u root ruoyi < RuoYi-Vue/sql/quartz.sql

# 在 ruoyi-java1 服务器安装 mysql 客户端,测试连接数据库,输出 ruoyi 创建的 30+ 初始表即正常
dnf -y install mysql8.4
mysql -h db-mysql -uruoyi -p123456 ruoyi -e 'show tables;'
1.3.4 Redis 初始化
# 添加 Redis 官方 RPM 源
cat > /etc/yum.repos.d/redis.repo <<EOF
[Redis]
name=Redis
baseurl=https://packages.redis.io/rpm/rockylinux10
enabled=1
gpgcheck=1
gpgkey=https://packages.redis.io/gpg
EOF
dnf makecache

# 安装 redis
dnf install -y redis

# 配置 redis, 允许远程连接 + 设置密码
sed -i '/^bind 127.0.0.1/c bind 0.0.0.0' /etc/redis/redis.conf
sed -i '/^# requirepass/c requirepass 123456' /etc/redis/redis.conf

# 启动 redis
systemctl enable --now redis

# 在 ruoyi-java1 服务器测试 redis 连通性,输出 PONG 则正常
dnf -y install redis
redis-cli -h db-redis -a 123456 ping
1.3.5 构建 jar 包

ruoyi-java1 操作

# 克隆若依源码
git clone https://gitee.com/y_project/RuoYi-Vue.git
cd RuoYi-Vue

# 配置 mysql 连接
vim ruoyi-admin/src/main/resources/application-druid.yml
url: jdbc:mysql://db-mysql:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: ruoyi
                password: 123456

# 配置 redis 连接
vim ruoyi-admin/src/main/resources/application.yml

image-20260806182933194

# 修改日志路径
vim ruoyi-admin/src/main/resources/logback.xml
    <!-- 日志存放路径 -->
        <property name="log.path" value="/var/log/ruoyi-vue" />
# 安装 maven 并构建
dnf -y install maven
mvn clean package -DskipTests

# 确认 jar 包生成
ls ruoyi-admin/target/ruoyi-admin.jar

# 创建专用用户
useradd -u 3000 -r ruoyi
# 创建 jar 包目录,日志目录,外部配置文件目录
mkdir -p /opt/ruoyi-vue/app /var/log/ruoyi-vue /opt/ruoyi-vue/config
# 将构建的 jar 包复制到 jar 包目录
cp ruoyi-admin/target/ruoyi-admin.jar /opt/ruoyi-vue/app/
# 更改属主属组
chown -R ruoyi:ruoyi /opt/ruoyi-vue/ /var/log/ruoyi-vue
chmod -R 755 /opt/ruoyi-vue/ /var/log/ruoyi-vue
1.3.6 手动测试
# 手动启动
java -jar /opt/ruoyi-vue/app/ruoyi-admin.jar

# 测试访问
curl ruoyi-java1:8080
欢迎使用RuoYi后台管理框架,当前版本:v3.9.2,请通过前端地址访问。 # 启动成功
1.3.7 创建外部配置文件

当 jar 包在其他环境部署时,使用的配置与构建时不一致(例如数据库配置),通过外部配置文件改变配置,而不用重新构建

# 创建外部配置文件
cat > /opt/ruoyi-vue/config/application.yml << 'EOF'
spring:
  profiles:
    active: prod,druid
EOF

cat > /opt/ruoyi-vue/config/application-prod.yml << 'EOF'
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://db-mysql:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: ruoyi
        password: 123456

  data:
    redis:
      host: db-redis
      port: 6379
      password: 123456

ruoyi:
  profile: /opt/ruoyi-vue/upload

logging:
  file:
    name: /opt/ruoyi-vue/logs/ruoyi.log
  level:
    com.ruoyi: info
    org.springframework: warn
EOF

chown -R ruoyi:ruoyi /opt/ruoyi-vue/config

# 使用外部配置文件手动启动
java -jar /opt/ruoyi-vue/app/ruoyi-admin.jar --spring.config.additional-location=file:/opt/ruoyi-vue/config/

# 测试访问
curl ruoyi-java1:8080
1.3.8 创建 Systemd 服务
# 创建服务文件
cat > /etc/systemd/system/ruoyi-vue.service << 'EOF'
[Unit]
Description=RuoYi Vue Backend Service
After=network.target

[Service]
Type=simple
User=ruoyi
Group=ruoyi
WorkingDirectory=/opt/ruoyi-vue

ExecStart=/usr/bin/java \
  -Xms512m \
  -Xmx1024m \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:HeapDumpPath=/opt/ruoyi-vue/logs/heapdump.hprof \
  -Dfile.encoding=UTF-8 \
  -jar /opt/ruoyi-vue/app/ruoyi-admin.jar \
  --spring.config.additional-location=file:/opt/ruoyi-vue/config/ \
  --spring.profiles.active=prod,druid

SuccessExitStatus=143
Restart=always
RestartSec=10

StandardOutput=journal
StandardError=journal

Environment="TZ=Asia/Shanghai"

[Install]
WantedBy=multi-user.target
EOF

# 启动 ruoyi-vue
systemctl daemon-reload && systemctl enable --now ruoyi-vue

# 测试访问
curl ruoyi-java1:8080
1.3.9 前端部署

ruoyi-web 操作

# 安装Node.js 18,若依推荐
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
dnf install -y nodejs
node -v
npm -v

git clone https://gitee.com/y_project/RuoYi-Vue.git
cd RuoYi-Vue/ruoyi-ui/

# 配置npm镜像源(加速)
npm config set registry https://registry.npmmirror.com

# 安装依赖并打包
npm install
npm run build:prod

# 打包后产物,需要移动到 Nginx 目录下
ls dist/

# 安装 nginx 并启动
dnf install -y nginx
systemctl enable --now nginx

# 创建网站根目录,将若依打包生成的前端文件拷贝到该目录,修改文件权限
mkdir -p /opt/ruoyi/dist
cp -r dist/* /opt/ruoyi/dist/
chown -R nginx:nginx /opt/ruoyi/dist
chmod -R 755 /opt/ruoyi/dist

# 创建 Nginx 配置
cat > /etc/nginx/conf.d/ruoyi-vue.conf << 'EOF'
upstream ruoyi_backend {
    server ruoyi-java1:8080;
    keepalive 32;
}

server {
    listen 80;
    server_name ruoyi.deng.org deng.org;

    client_max_body_size 100m;

    # ===== 前端静态资源 =====
    location / {
        root /opt/ruoyi/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # ===== 后端 API 代理 =====
    location /prod-api/ {
        proxy_pass http://ruoyi_backend/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # ===== 上传文件路径 =====
    location /profile/ {
        alias /opt/ruoyi/uploadPath/;
    }
}
EOF

# 重载 Nginx 配置
nginx -t && systemctl reload nginx

# Windows 添加解析记录
10.0.0.101 ruoyi.deng.org deng.org

# 浏览器测试访问
http://deng.org/
1.3.10 配置 HTTPS
# 创建证书目录并将准备的证书文件放入,这里使用 Nginx 章节生成的内网泛域名证书
mkdir -p /opt/ca

# 编辑 Nginx 配置文件,添加证书配置和 HTTP 跳转
vim /etc/nginx/conf.d/ruoyi-vue.conf
upstream ruoyi_backend {
    server ruoyi-java1:8080;
    server ruoyi-java2:8080;
    server ruoyi-java3:8080;
    keepalive 32;
}

server {
    listen 443 ssl;
    server_name ruoyi.deng.org deng.org;

    # ===== HTTPS 证书 =====	添加证书配置
    ssl_certificate /opt/ca/deng.crt;
    ssl_certificate_key /opt/ca/deng.key;

    client_max_body_size 100m;

    # ===== 前端静态资源 =====
    location / {
        root /opt/ruoyi/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # ===== 后端 API 代理 =====
    location /prod-api/ {
        proxy_pass http://ruoyi_backend/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # ===== 上传文件路径 =====
    location /profile/ {
        alias /opt/ruoyi/uploadPath/;
    }
}

# ===== HTTP 跳转 HTTPS =====	添加HTTP跳转
server {
        listen 80;     
        server_name ruoyi.deng.org deng.org;
        return 301 https://ruoyi.deng.org$request_uri;
}

# 重载 Nginx 配置
nginx -t && systemctl reload nginx

# 浏览器测试访问
http://deng.org/

1.4 案例三 : 若依 Vue 版后端扩容

1.4.1 部署环境
层级主机名作用IP 地址核心软件
接入层ruoyi-web反向代理、静态资源10.0.0.101Nginx
应用层ruoyi-java1业务逻辑10.0.0.111若依 JAR
ruoyi-java2业务逻辑10.0.0.112若依 JAR
ruoyi-java3业务逻辑10.0.0.113若依 JAR
缓存层db-redis会话管理、缓存10.0.0.121Redis
数据层db-mysql数据持久化10.0.0.131MySQL
# 操作系统版本: Rocky 10

# 在 ruoyi-java2 和 ruoyi-java3 操作

# 配置主机名
hostnamectl set-hostname ruoyi-java2
hostnamectl set-hostname ruoyi-java3

# 配置 DNS 解析,修改所有主机 hosts 解析记录
cat >> /etc/hosts << 'EOF'
10.0.0.101 ruoyi-web
10.0.0.111 ruoyi-java1
10.0.0.112 ruoyi-java2
10.0.0.113 ruoyi-java3
10.0.0.121 db-redis
10.0.0.131 db-mysql
EOF

# 配置 IP
nmcli connection modify eth0 ipv4.addresses 10.0.0.112/24
nmcli connection modify eth0 ipv4.addresses 10.0.0.113/24
nmcli connection up eth0
1.4.2 安装 JDK
# 在原有后端节点 ruoyi-java1 查看 JDK 版本,扩容节点安装相同版本
java -version

# 扩容节点安装 JDK
dnf -y install java-21-openjdk

# 确认 JDK 版本
java -version
1.4.3 部署若依后端
# 创建专用用户
useradd -u 3000 -s /sbin/nologin ruoyi

# 创建 jar 包目录,日志目录,外部配置文件目录
mkdir -p /opt/ruoyi-vue/app /var/log/ruoyi-vue /opt/ruoyi-vue/config

# 将构建的 jar 包复制到 jar 包目录
rsync -a ruoyi-java1:/opt/ruoyi-vue/app/ /opt/ruoyi-vue/app

# 将 外部配置文件 复制到扩容节点
rsync -a ruoyi-java1:/opt/ruoyi-vue/config/ /opt/ruoyi-vue/config

# 将 Systemd 服务文件 复制到扩容节点
rsync -a ruoyi-java1:/etc/systemd/system/ruoyi-vue.service /etc/systemd/system/ruoyi-vue.service

# 更改属主属组和权限
chown -R ruoyi:ruoyi /opt/ruoyi-vue/ /var/log/ruoyi-vue
chmod -R 755 /opt/ruoyi-vue/ /var/log/ruoyi-vue

# 启动 ruoyi
systemctl daemon-reload && systemctl enable --now ruoyi-vue

# 验证
systemctl status ruoyi-vue
curl ruoyi-java2:8080
curl ruoyi-java3:8080
1.4.4 配置 Nginx 负载均衡

ruoyi-web 操作

vim /etc/nginx/conf.d/ruoyi-vue.conf
upstream ruoyi_backend {
    server ruoyi-java1:8080;
    server ruoyi-java2:8080;
    server ruoyi-java3:8080;
    keepalive 32;
}

nginx -t && systemctl reload nginx

# 验证

# 浏览器测试访问
http://deng.org/

# 停止 ruoyi-java1
systemctl stop ruoyi-vue
# 浏览器测试访问
http://deng.org/

# 停止 ruoyi-java2
systemctl stop ruoyi-vue
# 浏览器测试访问
http://deng.org/

# 停止 ruoyi-java3
systemctl stop ruoyi-vue
# 浏览器测试访问
http://deng.org/

# 当所有后端节点停止后,浏览器出现 502 错误

二、Java 核心概念

2.1 JDK、JRE、JVM的关系

  • JDK : 开发工具包,包含 Java 开发工具和 JRE
  • JRE : 运行环境,包含 核心类库和 JVM
  • JVM : 虚拟机,在系统上执行编译后的 Java 字节码

Java 8 之后版本不再提供独立的 JRE 安装包,只能安装 JDK

JDK有 2 个选项,完整 JDK 和 JDK Headless,生产环境推荐JDK Headless,占用体积较小

2.2 版本选择

选择 LTS 版本,以下是目前可用 LTS 版本

版本免费支持结束适用场景
Java 8 (1.8)2030旧项目使用
Java 112032推荐
java 172029推荐
Java 212031新项目可使用
Java 252033新项目首选

2.3 Oracle JDK 与 OpenJDK

  • Oracle JDK : 官方 JDK,开发/测试免费,生产付费
  • OpenJDK : 开源 JDK,完全免费,推荐

2.4 OpenJDK 安装

Rocky
# 安装
dnf install -y java-17-openjdk-headless
dnf install -y java-11-openjdk-headless

# 验证
java -version

2.5 JVM 内存结构

重点关注 Heap (堆)内存结构

堆内存包括 新生代 和 老年代

新生代包括 Eden 区 、 Survivor 0 区 和 Survivor 1 区

新对象先放在 Eden 区, Eden 满了就触发 Minor GC, 没被回收的对象移到 Survivor 区. 之后每经历一次 Minor GC, 对象年龄就加 1, 年龄到默认 15 岁, 或者Survivor 区装不下了, 就会搬到老年代. 在老年代里一直待到没任何引用, 才会被 FullGC 回收

2.6 GC 垃圾回收

回收不可达对象

分为 Minor GCFull GC, 生产环境重点关注 **Full GC **的频率和耗时

2.7 常用 JVM 参数

参数含义建议
-Xms初始堆内存大小-Xmx 设置相同值,避免动态扩容开销
-Xmx最大堆内存大小物理内存的 50% ~ 70%
-XX:+useG1GC使用 G1 垃圾回收器堆内存 > 4 G 时推荐启用
java -Xms16G -Xmx16G -XX:+UseG1GC -jar ruoyi-admin.jar

三、项目构建: Maven 与 Nexus 制品库

3.1 Maven

Java 项目的构建工具,将源代码编译、测试、打包成可运行的 JAR 或 WAR 包

3.1.1 Maven 核心功能
  • 管理依赖: 根据 pom.xml 文件声明项目所需的第三方库,自动从仓库下载
  • 执行构建: 执行 编译 → 测试 → 打包,输出可部署的 JAR 或 WAR 包
3.1.2 pom.xml 核心配置

pom.xml 是 Maven 项目的工程文件,项目构建的入口定义文件

包含项目的名称、版本、依赖、构建配置等所有信息

配置项用途运维关注点
groupId/artifactId/version项目的唯一标识确认部署的版本是否正确
packagingjar 或 war确认不是方式
dependencies项目依赖的第三方库了解项目引用的组件
profiles多环境构建配置确认构建时使用正确的环境
3.1.3 Maven 命令
# 只编译,生成 .class 文件
mvn compile

# 编译 + 测试 + 打包
mvn package

# 清理旧文件 + 编译 + 测试 + 打包,生产推荐
mvn clean package

# 跳过测试,测试已由 CI 阶段完成
mvn clean package -DskipTests

3.2 制品与制品库

制品 (Artifact) : 软件构建过程中产生的可部署产物

制品库 (Artifact Repository) : 是集中存储和管理制品的地方

3.2.1 常见制品及制品库
制品类型示例制品库
Java 制品.jar .warNexus / Artifactory
前端制品.js .css .htmlnpm 仓库 / Nexus
容器镜像Docker 镜像Docker Hub / Harbor / Nexus
操作系统包.rpm .debRPM 仓库 / APT 仓库 / Nexus

3.2.2 制品库作用

  • 加速构建 : 依赖首次下载缓存到内网,后续内网主机从内网下载,速度远快于公网
  • 统一管理 : 制品统一存储,版本可控
  • 离线构建 : 内网主机无法连接外网,可以使用内网制品库
3.2.3 Nexus 的三种仓库
仓库类型说明存放内容存入者
宿主仓库(Hosted)存放公司私有制品公司开发构建的 JAR 包开发人员
代理仓库(Proxy)存放公网下载的包第三方依赖的库构建时首次下载的缓存
仓库组(Group)合并上 2 者,提供一个统一的入口不存放内容,只做转发

3.3 Nexus 部署与配置

3.3.1 部署环境
项目示例配置
操作系统Rocky 10
Java 版本JDK 21
内存4G
硬盘60G
# 配置主机名
hostnamectl set-hostname nexus

# 配置 DNS 解析,修改所有主机 hosts 解析记录
cat >> /etc/hosts << 'EOF'
10.0.0.161 nexus
EOF

# 配置 IP
nmcli connection modify eth0 ipv4.addresses 10.0.0.161/24
nmcli connection up eth0
3.3.2 部署 Nexus
# 安装 JDK
dnf install -y java-21-openjdk-headless

# 解压安装包
tar xf nexus-3.90.1-01-linux-x86_64.tar.gz -C /opt/
ln -s /opt/nexus-3.90.1-01/ /opt/nexus

# 创建专用用户,修改文件权限
useradd -r -s /sbin/nologin -c "Nexus Repository Service" nexus
chown -R nexus:nexus /opt/nexus
chown -R nexus:nexus /opt/sonatype-work/

# 修改启动脚本中的运行用户
vim /opt/nexus/bin/nexus
run_as_user='nexus'

# 修改 JVM 参数
vim /opt/nexus/bin/nexus.vmoptions
-Xms1024m
-Xmx1024m
-XX:MaxDirectMemorySize=2g

# 创建 Systemd 服务
tee /etc/systemd/system/nexus.service << 'EOF'
[Unit]
Description=Nexus Repository Manager
After=network.target

[Service]
Type=forking
User=nexus
Group=nexus
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
Restart=on-abort
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

# 启动 Nexus
systemctl daemon-reload && systemctl enable --now nexus

# 验证
systemctl status nexus
ss -ntlp | grep 8081
ps aux | grep nexus

# Windows 添加解析记录
10.0.0.161 nexus.deng.org

# 浏览器访问,完成初始化配置
nexus.deng.org:8081

# 查看初始密码
cat /opt/sonatype-work/nexus3/admin.password

image-20260807155015301

image-20260807155115100

3.4 创建 Maven 私有仓库

3.4.1 创建 Blod Store (存储空间)

image-20260807160525696

image-20260807160353160

3.4.2 创建宿主仓库

image-20260807160649257

image-20260807160747057

image-20260807161045399

3.4.3 创建代理仓库

image-20260807161250830

image-20260807161319311

image-20260807161656417

3.4.4 创建仓库组

image-20260807161927033

image-20260807162405818

3.5 使用 Nexus 制品库

3.5.1 上传制品到 Nexus

ruoyi-java1 操作

3.5.1.1 配置 Maven settings.xml

获取 Nexus 制品库地址

image-20260807163056307

vim ~/.m2/settings.xml
<settings>
    <servers>
        <server>
            <id>ruoyi-releases</id>
            <username>admin</username>
            <password>12345678</password>
        </server>
    </servers>

    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>Nexus Mirror</name>
            <url>http://nexus.deng.org:8081/repository/maven-public/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
</settings>

image-20260807163434428

3.5.1.2 修改若依项目的 pom.xml
vim RuoYi-Vue/pom.xml
    <distributionManagement>
        <repository>
            <id>ruoyi-releases</id>
            <url>http://nexus.deng.org:8081/repository/ruoyi-releases/</url>
        </repository>
    </distributionManagement>

image-20260807164019350

image-20260807164211194

3.5.1.3 添加解析记录指向 Nexus 仓库
cat >> /etc/hosts << 'EOF'
10.0.0.161 nexus.deng.org
EOF
3.5.1.4 重新构建并上传
cd RuoYi-Vue/
mvn clean deploy -DskipTests
3.5.1.5 Nexus 查看制品信息

image-20260807164542205

image-20260807164707150

3.5.2 从 Nexus 获取制品并部署

ruoyi-java2 操作

获取制品地址

image-20260807170445810

添加解析记录指向 Nexus 仓库

cat >> /etc/hosts << 'EOF'
10.0.0.161 nexus.deng.org
EOF
# 直接下载
wget http://nexus.deng.org:8081/repository/ruoyi-releases/com/ruoyi/ruoyi-admin/3.9.2/ruoyi-admin-3.9.2.jar

# Nexus 初始化时未开启匿名用户,下载需要用户名密码
wget --user="admin" --password="12345678" http://nexus.deng.org:8081/repository/ruoyi-releases/com/ruoyi/ruoyi-admin/3.9.2/ruoyi-admin-3.9.2.jar
# 部署到生产服务器
mv ruoyi-admin-3.9.2.jar /opt/ruoyi-vue/app/ruoyi-admin.jar
chmod -R 755 /opt/ruoyi-vue/app
chown -R ruoyi:ruoyi /opt/ruoyi-vue/app

systemctl restart ruoyi-vue
systemctl status ruoyi-vue

四、配置管理:Spring Boot多环境配置与Profile

通过不同的配置文件使同一个 Jar 包在开发、测试、生产环境运行

4.1 配置文件命名及加载顺序

  • 主配置文件: application.yml
  • 环境特定配置: application-{profile}.yml

加载顺序: application.ymlapplication-{profile}.yml,启动时先加载 jar 内部配置文件,后加载外部配置文件

后加载的配置,相同配置项覆盖、不相同配置项叠加到主配置文件

4.2 若依项目配置文件

配置文件作用文件内容
application.yml主配置,通用配置,所有环境共享应用名、端口、默认激活的 Profile
application-druid.yml数据源配置,MySQL 连接池数据库地址、用户名、密码、连接池大小
application-dev.yml开发环境配置开发环境日志级别、调试开关
application-test.yml测试环境配置测试环境日志级别、数据库地址
application-prod.yml生产环境配置生产环境日志级别、性能参数

4.3 Profile 激活方式

4.3.1 方式一: 在 application.yml 中硬编码 (开发环境)
cat > /opt/ruoyi-vue/config/application.yml << 'EOF'
spring:
  profiles:
    active: prod,druid
EOF
4.3.2 方式二: 启动命令中指定
java -jar /opt/ruoyi-vue/app/ruoyi-admin.jar --spring.profiles.active=prod,druid

激活 JAR 包中包含的不同配置文件

4.3.3 方式三: 使用外部配置文件 (生产环境标准)
ExecStart=/usr/bin/java \
  -jar /opt/ruoyi-vue/app/ruoyi-admin.jar \
  --spring.config.additional-location=file:/opt/ruoyi-vue/config/ \ # 指定配置文件目录
  --spring.profiles.active=prod,druid # 指定激活的环境配置

配置文件独立于 JAR 包,修改配置无需重新构建打包

敏感信息不打包在 JAR 包,更安全

可独立修改配置,更便捷

4.3.4 使用外部配置文件示例
# 创建外部配置文件指定监听端口
cat >> application-prod.yml << 'EOF'
server:
  port: 8081
EOF

# 手动启动 jar 应用
java -jar /opt/ruoyi-vue/app/ruoyi-admin.jar \
  --spring.config.additional-location=file:application-prod.yml \
  --spring.profiles.active=prod,druid
 
# 查看应用监听端口
ss -ntlp

# 手动启动指定监听端口
java -jar /opt/ruoyi-vue/app/ruoyi-admin.jar --server.port=8081

ss -ntlp
4.3.5 --spring.profiles.active=prod,druid 解析

告诉Spring Boot同时加载 prod 和 druid 配置

application-prod.yml : 环境配置文件 (日志、端口等)

application-druid.yml : 数据库配置文件 (MySQL地址、账号、密码等)

正确组合: 一个环境 + 多个功能 配置文件

4.3.6 config.additional-locationprofiles.active

config.additional-location : 指定配置文件路径

profiles.active : 指定激活的配置文件

两个参数配置使用

五、性能调优

针对 Tomcat + JVM 调优

5.1 调优参数配置位置

5.1.1 JAR 包

内置 Tomcat

调优对象调优参数配置位置
Tomcat线程数、超时、队列application.yml
JVM堆内存、GC算法Systemd 服务文件中的 ExecStart (jar 启动参数)
5.1.2 WAR 包

外置 Tomcat

调优对象调优参数配置位置
Tomcat线程数、超时、队列server.xml
JVM堆内存、GC算法setenv.sh

5.2 Tomcat 调优

5.2.1 线程池调优
调优参数含义默认值生产建议
maxThreads最大工作线程数2004 核 200 - 300 , 8 核 400 - 600根据 CPU 核心数调整
minSpareThreads最小空闲线程数10maxThreads 的 20% - 30%
prestartminSpareThreads启动时预创建线程falsetrue (减少首次请求延迟)

JAR 配置

vim /opt/ruoyi-vue/config/application-prod.yml
server:
  tomcat:
    # 核心工作线程数
    threads:
      # 最大工作线程
      max: 200
      min-spare: 40
    # 等待队列容量,线程满了之后排队请求
    accept-count: 100
    # 连接超时
    connection-timeout: 20000
    # 最大连接数(同一时刻所有连接,区别于工作线程)
    max-connections: 10000

WAR (外置Tomcat) 配置

<!-- conf/server.xml -->
<Executor name="tomcatThreadPool"
          namePrefix="catalina-exec-"
          maxThreads="500"
          minSpareThreads="100"
          prestartminSpareThreads="true"/>
5.2.2 连接器调优
调优参数含义默认值生产建议
connectionTimeout连接超时 (毫秒)2000010000 - 30000
acceptCount等待队列长度100maxThreads 的 50% - 100%
enableLookupsDNS 反向解析falsefalse (禁用,减少延迟)
compression启用压缩offon (减少传输量)
compressionMinSize启用压缩最小文件大小2048

JAR 配置

vim /opt/ruoyi-vue/config/application-prod.yml
server:
  tomcat:
    # 等待队列容量,线程满了之后排队请求
    accept-count: 100
    # 连接超时
    connection-timeout: 20000
    # 启用压缩
    compression: on
    # 压缩最小文件大小2KB
    compression-min-size: 2048

WAR (外置Tomcat) 配置

<!-- conf/server.xml -->
<Connector port="8080"
           connectionTimeout="20000"
           acceptCount="200"
           enableLookups="false"
           compression="on"
           compressionMinSize="2048"/>
5.2.3 I/O 模型
模型名称配置方式适用场景性能备注
BIOprotocol="HTTP/1.1"低并发(<200连接)
NIOprotocol="org.apache.coyote.http11.Http11NioProtocol"高并发默认,一般不需要更改
NIO2protocol="org.apache.coyote.http11.Http11Nio2Protocol"高并发 + 异步
APRprotocol="org.apache.coyote.http11.Http11AprProtocol"高并发 + 大量长连接最好需安装 native 库

生产环境大部分情况默认即可

# 查看 若依 当前使用的 I/O 模型
journalctl -u ruoyi-vue | grep ProtocolHandler

JAR 配置

server:
  tomcat:
    protocol: org.apache.coyote.http11.Http11Nio2Protocol

WAR (外置Tomcat) 配置

<Connector port="8080"
           protocol="org.apache.coyote.http11.Http11Nio2Protocol"/>

5.3 JVM 调优

5.3.1 JVM 内存调优
调优项含义生产建议
-Xms初始堆内存大小和 -Xmx 设相同值,避免动态扩容抖动
-Xmx最大堆内存大小物理内存的 50% - 70%
-XX:MetaspaceSize元空间初始大小256m
-XX:MaxMetaspaceSize元空间最大大小512m
-XX:+UseG1GC使用 G1 垃圾回收器低延迟场景推荐
-XX:MaxGCPauseMillis=200GC 最大暂停时间200ms,让 GC 暂停时间可控

JAR 配置

vim /etc/systemd/system/ruoyi-vue.service
ExecStart=/usr/bin/java \
  -Xms1g -Xmx1g \
  -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
  -XX:+UseG1GC -XX:MaxGCPauseMillis=200 \
  -XX:+HeapDumpOnOutOfMemoryError \ # 当堆内存溢出时记录转储日志
  -XX:HeapDumpPath=/opt/ruoyi-vue/logs/heapdump.hprof \ # 转储日志文件路径

WAR 配置

vim /usr/local/tomcat/bin/setenv.sh
export CATALINA_OPTS="-Xms4g -Xmx4g"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDetails -Xloggc:/usr/local/tomcat/logs/gc.log"
5.3.2 垃圾回收 (GC) 调优

目前推荐的垃圾回收器:

  • G1 : 生产环境主流,适用 6 - 64 GB 堆内存大小,暂停时间 100 - 200 ms
  • ZGC : JDK 17 版本以上, > 64 GB 堆内存大小推荐,暂停时间 < 10 ms,但会带来更高的 CPU 开销
调优项含义生产建议备注
-XX:+UseG1GC使用 G1 垃圾回收器
-XX:MaxGCPauseMillis=200GC 最大暂停时间200ms
-XX:G1HeapRegionSize=16mG1分区大小16m 或 32mG1 回收器专用,堆内存 ≥ 16G时推荐
-XX:InitiatingHeapOccupancyPercent=45堆内存使用率达到45% 启动GC45 - 60默认 45,G1 回收器专用

JAR 配置

-Xms4g -Xmx4g \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=16m \
-XX:InitiatingHeapOccupancyPercent=45 \
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/ruoyi/gc.log # GC 日志,注意JDK 11 +改用新配置方式

5.4 JVM 诊断命令

需要安装 openjdk-devel

dnf install -y java-21-openjdk-devel
5.4.1 jps 查看 java 进程
# 查看所有 java 进程
jps -l
5.4.2 jstat 实时查看 GC 情况
jstat -gcutil 968 1s 5
  S0     S1     E      O      M     CCS    YGC     YGCT     FGC    FGCT     CGC    CGCT       GCT   
     - 100.00  52.22   8.24  99.04  96.65     12     0.323     0     0.000     6     0.009     0.332
     - 100.00  52.22   8.24  99.04  96.65     12     0.323     0     0.000     6     0.009     0.332
     - 100.00  52.22   8.24  99.04  96.65     12     0.323     0     0.000     6     0.009     0.332
     - 100.00  52.22   8.24  99.04  96.65     12     0.323     0     0.000     6     0.009     0.332
     - 100.00  52.22   8.24  99.04  96.65     12     0.323     0     0.000     6     0.009     0.332

重点关注字段

字段含义正常值异常值
O老年代使用率< 70%接近 100% ,内存不够
FGCFull GC 次数极少频繁增长,内存泄漏、巨型对象、堆空间不足
5.4.3 jhsdb 查看堆内存配置
jhsdb jmap --heap --pid 968

5.5 调优效果验证

# 查看 JVM 调优参数
ps -ef | grep java | grep ruoyi-admin.jar

# 查看 GC 情况
jstat -gcutil $(jps -l | grep ruoyi-admin.jar | awk '{print $1}') 2s 5

# 查看堆内存配置 (JDK 8)
jmap -heap $(jps -l | grep ruoyi-admin.jar | awk '{print $1}')

# 查看堆内存配置 (JDK 11+)
jhsdb jmap --heap --pid $(jps -l | grep ruoyi-admin.jar | awk '{print $1}')

5.6 Tomcat与数据库连接池

Tomcat 线程数 (server.tomcat.threads.max) 和数据库连接池大小 (spring.datasource.druid.maxActive) 需要匹配

spring.datasource.druid.maxActive 推荐值与 MySQL 允许的最大连接数和关联的应用实例数量相关,结合生产实际调整

六、Actuator 应用观测

6.1 Actuator 功能

  • 应用存活状态 (/health)
  • JVM 内存使用量、GC次数 (/metrics)
  • 制品的日志级别,支持动态调整 (/loggers)
  • 堆内存快照,用于分享内存泄漏 (/headdump)

6.2 示例: 若依配置 Actuator

6.2.1 pom.xml 添加依赖
cd RuoYi-Vue
vim ruoyi-admin/pom.xml
    <dependencies> <!-- 在该字段下方添加 -->

        <!-- Spring Boot Actuator 监控依赖 -->
        <!-- 提供生产级别的应用监控和管理功能,包括健康检查、指标收集、环境信息等端点 -->
        <!-- 版本由 spring-boot-starter-parent 统一管理,无需显式指定 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <!--有可能需要增加版本 <version>2.7.18</version> -->
        </dependency>
6.2.2 配置 application.yml

配置项解析

配置项说明推荐值
management.endpoints.web.base-pathActuator端点的访问路径前缀/actuator (默认)
management.endpoints.web.exposure.include暴露的端点生产环境: health,info,metrics,/loggers
management.endpoint.health.show-details健康检查是否显示详情always
vim /opt/ruoyi-vue/config/application-prod.yml
management:
  server:
    # 独立端口,不和业务8080混在一起
    port: 9090
    # 绑定内网网卡固定IP
    address: 10.0.0.10
  endpoints:
    web:
      exposure:
        # 暴露所有端点
        include: '*'
  endpoint:
    health:
      # 显示详细信息
      show-details: always
    metrics:
      # 启用 metrics
      enabled: true
    heapdump:
      # 启用 heapdump
      enabled: true
6.2.3 放行鉴权

ruoyi-framework 模块的 SecurityConfig.java 中,添加放行规则

vim ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
                    .requestMatchers("/actuator/**").permitAll()
                    // 除上面外的所有请求全部需要鉴权认证 # 在此行上方添加放行/actuator/** 路径
                    .anyRequest().authenticated();
6.2.4 重新打包并重启
# 重新打包
mvn clean package -DskipTests

# 部署 jar 包
cp ruoyi-admin/target/ruoyi-admin.jar /opt/ruoyi-vue/app/

# 重启
systemctl restart ruoyi-vue

# 部署到扩容节点
scp 10.0.0.111:/root/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /opt/ruoyi-vue/app/
scp 10.0.0.111:/opt/ruoyi-vue/config/application-prod.yml /opt/ruoyi-vue/config/application-prod.yml
systemctl restart ruoyi-vue

# 验证
curl http://localhost:8080/actuator/health | jq

6.3 核心端点解析

6.3.1 /health 健康检查
curl http://localhost:8080/actuator/health | jq
{
  "components": {
    "db": {
      "components": {
        "dynamicDataSource": {
          "components": {
            "MASTER": {
              "details": {
                "database": "MySQL",
                "validationQuery": "isValid()"
              },
              "status": "UP" # UP 表示 数据库连接正常
            }
          },
          "status": "UP"
        },
        "masterDataSource": {
          "details": {
            "database": "MySQL",
            "validationQuery": "isValid()"
          },
          "status": "UP"
        }
      },
      "status": "UP"
    },
    "diskSpace": {
      "details": {
        "total": 40324038656,
        "free": 37088055296,
        "threshold": 10485760,
        "path": "/opt/ruoyi-vue/.",
        "exists": true
      },
      "status": "UP" # UP 表示 磁盘空间充足
    },
    "livenessState": {
      "status": "UP"
    },
    "ping": {
      "status": "UP"
    },
    "readinessState": {
      "status": "UP"
    },
    "redis": {
      "details": {
        "version": "8.10.0"
      },
      "status": "UP" # UP 表示 Redis 连接正常
    },
    "ssl": {
      "details": {
        "expiringChains": [],
        "invalidChains": [],
        "validChains": []
      },
      "status": "UP"
    }
  },
  "groups": [
    "liveness",
    "readiness"
  ],
  "status": "UP"
6.3.2 /metrics 性能指标
# 列出所有可查看的指标
curl http://localhost:8080/actuator/metrics | jq
6.3.3 /loggers 动态日志
# 查看当前日志级别
curl http://localhost:8080/actuator/loggers/com.ruoyi

# 临时调整日志级别为 DEBUG
curl -X POST http://localhost:8080/actuator/loggers/com.ruoyi -H "Content-Type: application/json" -d '{"configuredLevel": "DEBUG"}'

# 验证调整日志级别是否生效
curl http://localhost:8080/actuator/loggers/com.ruoyi

# 恢复日志级别为 INFO
curl -X POST http://localhost:8080/actuator/loggers/com.ruoyi -H "Content-Type: application/json" -d '{"configuredLevel": null}'

# 验证调整日志级别是否生效
curl http://localhost:8080/actuator/loggers/com.ruoyi

生产环境使用日志排障流程:

临时调整志级别为 DEBUG → 复现问题 → 收集日志 → 恢复日志级别为 INFO → 分析日志

6.3.4 /heapdump 堆内存快照
# 导出堆内存快照
curl -o /tmp/heap.hprof http://localhost:8080/actuator/heapdump

使用场景:

  • 应用频繁 Full GC
  • 怀疑有内存泄漏
  • 分析占用内存最多的对象

分析工具: Eclipse MAT , VisualVM , JProfiler

6.4 生产环境安全配置

6.4.1 端口暴露配置
端点是否暴露原因
/healthNginx / K8s 健康检查需要
/info查看版本信息
/metrics内网或认证查看敏感性能指标
/loggers内网或认证可动态修改日志级别
/heapdump可下载堆内存快照
/env暴露数据库配置等敏感配置参数
/shutdown可关闭应用
6.4.2 生产环境推荐配置
management:
  server:
    # 独立端口,不和业务8080混在一起
    port: 9090
    # 绑定内网网卡固定IP
    address: 10.0.0.111
  endpoints:
    web:
      exposure:
        # 暴露所有端点
        include: health,info,metrics
  endpoint:
    health:
      # 显示详细信息
      show-details: always
    metrics:
      # 启用 metrics
      enabled: true
# 访问方式
curl http://10.0.0.111:9099/actuator/health
6.4.3 配合 Prometheus/Grafana
management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus

# Prometheus 采集端点
curl http://10.0.0.111:9099/actuator/prometheus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值