
🎈今日推荐——https://cloud.tencent.com/developer/article/2469205
深入浅出JVM(十三)之垃圾回收算法细节——这篇文章深入探讨了JVM垃圾回收算法的细节,包括STW(Stop The World)、根节点枚举、安全点与安全区域、记忆集与卡表以及写屏障。文章解释了为何需要STW以确保垃圾回收的一致性,如何通过OopMap减少STW时间,以及如何使用安全点和安全区域来减少用户线程停顿。此外,还讨论了跨代引用问题及其解决方案,以及写屏障在维护卡表状态中的作用。
随着云原生技术的快速发展,使用容器化技术来部署传统中间件系统已经成为企业 IT 架构的主流趋势之一。Docker 作为容器化技术的领军者,通过其轻量化的隔离机制,使得应用程序和服务能够以更高的效率进行部署和管理。WebLogic Server 是 Oracle 提供的企业级 Java 应用服务器,与 Docker 的结合可以显著提升其在微服务架构中的灵活性和扩展性。
传统架构的挑战
企业级应用通常基于 WebLogic Server 部署在物理机或虚拟机上,面临以下问题:
序号 | 挑战类别 | 描述 |
|---|---|---|
1 | 环境不一致 | 开发、测试和生产环境难以完全统一。 |
2 | 资源浪费 | 虚拟机往往需要预分配资源,导致浪费。 |
3 | 维护成本高 | 升级或迁移应用时需要重新配置环境。 |
容器化的优势
使用 Docker 来运行 WebLogic Server,可以解决上述问题:
序号 | 优势类别 | 描述 |
|---|---|---|
1 | 环境一致性 | 容器内运行的环境可以完全一致。 |
2 | 高效部署 | 镜像化的 WebLogic Server 可以在不同主机上快速启动。 |
3 | 资源高效利用 | 容器支持动态分配和资源隔离,避免资源浪费。 |
时间节点 | 发展历程 |
|---|---|
2016 | Oracle 开始支持 WebLogic Server 的 Docker 镜像。 |
2018 | WebLogic 镜像正式支持 Kubernetes 平台。 |
2020 | Oracle 提供官方 WebLogic 镜像构建工具。 |
2022 | WebLogic Server 镜像支持更多 OCI 特性,如 Helm。 |
Docker 技术的成熟与 WebLogic Server 的整合,使得在容器化环境中运行企业级应用变得更加可靠。
在本文中,我们以 WebLogic Server 12.2.1.4 的安装为例,展示如何在 Docker 容器中构建、运行和管理 WebLogic Server。
环境需求 | 描述 |
|---|---|
操作系统 | 支持 Docker 的 Linux/Windows/macOS 系统 |
Docker 版本 | 20.10 或更高版本 |
WebLogic 安装包 | 下载 Oracle 官方 WebLogic 安装包 |
Oracle JDK | 安装 Oracle JDK 8 或更高版本 |
Dockerfile 模板 | 官方提供的 Dockerfile 模板 |
序号 | 流程步骤 | 描述 |
|---|---|---|
1 | 构建 WebLogic 容器镜像 | 需要通过 Dockerfile 构建 WebLogic Server 的容器镜像。 |
2 | 配置 WebLogic 容器 | 通过配置文件(如 |
3 | 运行 WebLogic 容器 | 使用 Docker 命令启动 WebLogic 容器,并验证其运行状态。 |
fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip以下是一个标准的 Dockerfile,用于构建 WebLogic 容器镜像:
# 使用官方基础镜像
FROM oraclelinux:7-slim
# 设置环境变量
ENV JAVA_HOME=/u01/java \
PATH=$JAVA_HOME/bin:$PATH \
DOMAIN_HOME=/u01/oracle/user_projects/domains/base_domain
# 复制必要文件
COPY jdk-8u281-linux-x64.tar.gz /u01/
COPY fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip /u01/
# 安装 JDK 和 WebLogic
RUN mkdir -p /u01 && \
tar -xzf /u01/jdk-8u281-linux-x64.tar.gz -C /u01 && \
unzip -q /u01/fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip -d /u01 && \
java -jar /u01/fmw_12.2.1.4.0_wls_lite.jar -silent -responseFile /u01/response.txt
# 暴露 WebLogic 管理端口
EXPOSE 7001 9001
# 启动 WebLogic 服务
CMD ["/u01/oracle/startWebLogic.sh"]使用以下命令构建 WebLogic 容器镜像:
$ docker build -t weblogic:12.2.1.4 .为了在容器中运行 WebLogic Server,需要创建域并配置管理服务器和受管服务器。
创建 domain.properties 文件,内容如下:
username=weblogic
password=weblogic123
domainName=base_domain通过容器运行时脚本(如 createDomain.sh)自动化创建域:
#!/bin/bash
# 创建 WebLogic 域的脚本
/u01/oracle/oracle_common/common/bin/wlst.sh <<EOF
readTemplate('/u01/oracle/wlserver/common/templates/wls/wls.jar')
cd('Servers/AdminServer')
set('ListenAddress','')
set('ListenPort',7001)
cd('/')
cd('Security/base_domain/User/weblogic')
cmo.setPassword('weblogic123')
writeDomain('/u01/oracle/user_projects/domains/base_domain')
closeTemplate()
exit()
EOF将此脚本保存为 createDomain.sh 并添加到镜像中。
通过以下命令运行 WebLogic 容器:
$ docker run -d --name weblogic_server \
-p 7001:7001 -p 9001:9001 \
-v /path/to/domain.properties:/u01/oracle/domain.properties \
weblogic:12.2.1.4
在容器化 WebLogic Server 的实际应用场景中,通过合理的部署架构和优化配置,可以显著提升系统的稳定性和运行效率。本节通过实际案例,深入展示如何在容器化环境中配置多容器架构实现负载均衡,以及集中化日志管理的最佳实践。
背景:企业应用需要高可用性和扩展性,为此可以部署多个 WebLogic Server 实例,通过负载均衡器分发请求,确保在某个实例出现故障时其他实例能够无缝接管流量。Docker Compose 是一种便捷的工具,可以用来定义和运行多个容器服务,适合用于快速搭建 WebLogic 多实例架构。
以下 docker-compose.yml 文件定义了一个 WebLogic 管理服务器(Admin Server)和两个受管服务器(Managed Servers)的集群架构:
version: '3.7'
services:
admin_server:
image: weblogic:12.2.1.4
container_name: admin_server
ports:
- "7001:7001"
environment:
- DOMAIN_NAME=base_domain
- ADMIN_USERNAME=weblogic
- ADMIN_PASSWORD=weblogic123
volumes:
- ./admin_server_logs:/u01/oracle/logs
networks:
- weblogic_network
managed_server1:
image: weblogic:12.2.1.4
container_name: managed_server1
environment:
- DOMAIN_NAME=base_domain
- MANAGED_SERVER_NAME=ms1
ports:
- "8001:8001"
depends_on:
- admin_server
networks:
- weblogic_network
managed_server2:
image: weblogic:12.2.1.4
container_name: managed_server2
environment:
- DOMAIN_NAME=base_domain
- MANAGED_SERVER_NAME=ms2
ports:
- "8002:8002"
depends_on:
- admin_server
networks:
- weblogic_network
networks:
weblogic_network:
driver: bridge配置项 | 说明 |
|---|---|
| 定义 WebLogic 管理服务器实例,监听端口为 |
| 定义两个受管服务器实例,分别监听端口 |
| 将日志文件挂载到主机路径,便于集中化管理和分析。 |
| 定义服务间的网络,确保容器能够通过内网互相通信。 |
| 确保受管服务器在管理服务器启动后再启动。 |
使用以下命令启动服务:
$ docker-compose up -d运行后,您可以通过以下 URL 访问不同服务器的服务:
http://<主机IP>:7001/consolehttp://<主机IP>:8001http://<主机IP>:8002为了实现流量的分发,可以在容器化环境中添加一个负载均衡器,如 NGINX 或 Traefik。以下是基于 NGINX 的负载均衡配置:
http {
upstream weblogic_cluster {
server managed_server1:8001;
server managed_server2:8002;
}
server {
listen 80;
location / {
proxy_pass http://weblogic_cluster;
}
}
}将该配置保存为 nginx.conf 并启动 NGINX 容器:
$ docker run -d -p 80:80 \
-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf \
--network weblogic_network \
--name nginx_lb nginx访问 http://<主机IP> 即可通过负载均衡器访问 WebLogic 集群。
背景:在复杂的企业环境中,监控日志和系统性能是排查故障、优化应用性能的重要手段。通过挂载日志目录和引入集中化管理工具(如 ELK 堆栈),可以实现对 WebLogic 日志的全面分析。
在运行 WebLogic 容器时,通过挂载日志目录可以将日志文件保存到宿主机或共享存储中:
$ docker run -d --name weblogic_server \
-v /var/log/weblogic:/u01/oracle/logs \
weblogic:12.2.1.4将日志集成到 ELK 堆栈(Elasticsearch + Logstash + Kibana)中,便于可视化分析。以下是使用 Filebeat 收集日志的配置示例:
filebeat.yml 配置文件:
filebeat.inputs:
- type: log
paths:
- /var/log/weblogic/*.log
output.elasticsearch:
hosts: ["http://<elasticsearch_host>:9200"]启动 Filebeat 容器:
$ docker run -d --name=filebeat \
-v /var/log/weblogic:/var/log/weblogic \
-v $(pwd)/filebeat.yml:/usr/share/filebeat/filebeat.yml \
--network weblogic_network \
docker.elastic.co/beats/filebeat:7.17.0通过 WebLogic Server 自带的性能监控工具(如 JConsole 或 WLDF),结合 Prometheus 和 Grafana,可以实时监控容器化环境中的 WebLogic 性能。
示例 Prometheus 配置:
scrape_configs:
- job_name: 'weblogic'
static_configs:
- targets: ['admin_server:7001', 'managed_server1:8001', 'managed_server2:8002']将 Prometheus 数据通过 Grafana 可视化,创建仪表盘以监控请求延迟、线程数等性能指标。

内容 | 描述 |
|---|---|
多容器部署 | 使用 Docker Compose 搭建多实例架构,实现高可用性和扩展性。 |
负载均衡 | 添加 NGINX 等负载均衡器,优化流量分发,提升系统容错能力。 |
集中化日志管理 | 借助 Filebeat 和 ELK 堆栈,实现日志的集中收集和分析。 |
性能监控与可视化 | 通过 Prometheus 和 Grafana 实现 WebLogic 的性能监控和指标可视化。 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。