温馨提示×

Ubuntu上WebLogic的内存配置建议

小樊
44
2025-11-15 02:09:24
栏目: 智能运维

Ubuntu上WebLogic内存配置建议

一 核心原则与容量规划

  • 为JVM堆设置合理的上下限,通常将初始堆与最大堆设为相同,避免运行期频繁扩缩堆带来的抖动:-Xms == -Xmx。在 Linux/UNIX 上,建议 -Xmx 不超过物理内存的 75%;在 Windows 上建议不超过 50%,为操作系统和其他进程预留足够内存。堆外(元空间/本地内存)与堆合计不应超过机器可用物理内存,避免换页与OOM。对于多域/多实例共存的主机,按实例数拆分内存预算。建议开启 UseContainerSupport(容器/现代JDK默认),让JVM遵从容器内存限制。

二 配置位置与推荐做法

  • 推荐的“官方入口”是修改域目录下的 setDomainEnv.sh(路径示例:/weblogic/user_projects/domains/<你的域名>/bin/setDomainEnv.sh)。在该文件中为不同 JAVA_VENDOR64/32 位分别设置如 WLS_MEM_ARGS_64BIT / WLS_MEM_ARGS_32BIT,例如:
    • 示例(仅示意,数值按上节原则调整):
      • WLS_MEM_ARGS_64BIT=“-Xms4g -Xmx4g”
      • export WLS_MEM_ARGS_64BIT
  • 如需为某个实例单独定制,可在该实例的启动脚本(如 startWebLogic.sh 的副本)中导出 MEM_ARGS 覆盖全局值,或在 commEnv.sh 中按JDK厂商分支设置默认值(老版本常见做法)。修改后重启实例生效。

三 参数设置与版本差异要点

  • 常用JVM内存参数与作用
    • 堆:
      • -Xms:初始堆大小,建议与 -Xmx 一致
      • -Xmx:最大堆大小,遵循“不超过物理内存的 75%(Linux)”
    • 元空间(Metaspace,取代永久代):
      • -XX:MetaspaceSize / -XX:MaxMetaspaceSize:初始与上限;建议设置上限,避免无界增长
    • 容器/本地内存与GC:
      • -XX:+UseContainerSupport(JDK 8u191+ 默认开启):遵从容器内存限制
      • 选择合适的GC(如 G1/ZGC),并按应用停顿目标与吞吐目标微调
  • 版本与术语差异
    • WebLogic 12c 及更早:常见 -XX:PermSize / -XX:MaxPermSize(永久代)
    • WebLogic 12.2.x 及以后:使用 Metaspace,对应 -XX:MetaspaceSize / -XX:MaxMetaspaceSize
    • 老版本中亦可在 startWebLogic.shcommEnv.sh 中设置 MEM_ARGS 实现覆盖,但优先使用 setDomainEnv.sh 统一管理。

四 Ubuntu系统层面的配合与稳定性

  • 资源与OOM治理
    • 适度使用 cgroups 限制单实例内存,避免单实例异常拖垮整机
    • 调整 oom_score_adj,降低关键进程被OOM Killer终止的风险
    • 视内存压力启用 zram/zswap,为活跃进程保留更多物理内存
  • 文件句柄与内核参数
    • 提升进程可打开文件数与用户进程数(/etc/security/limits.conf):如 soft/hard nofile 65535、soft/hard nproc 65535
    • 按需提升 fs.file-max 等内核参数,减少资源限制导致的异常
  • 监控与验证
    • 使用 top/htop、vmstat、iostat、sar 持续观察CPU、内存、I/O与换页
    • 在 WebLogic 控制台与性能监控中核对实际堆与非堆使用,验证配置是否生效。

五 快速配置示例

  • 场景A:单实例、物理内存 16GB、JDK 8(使用永久代)
    • setDomainEnv.sh 片段:
      • WLS_MEM_ARGS_64BIT=“-Xms8g -Xmx8g -XX:PermSize=512m -XX:MaxPermSize=1g”
      • export WLS_MEM_ARGS_64BIT
  • 场景B:单实例、物理内存 16GB、JDK 8u191+ 或 JDK 11+(使用Metaspace)
    • setDomainEnv.sh 片段:
      • WLS_MEM_ARGS_64BIT=“-Xms8g -Xmx8g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1g”
      • export WLS_MEM_ARGS_64BIT
  • 场景C:容器/多实例,容器内存限制 8GB
    • 启动容器时设置内存上限(例如 Docker:-m 8g),JVM 使用:
      • “-Xms6g -Xmx6g -XX:+UseContainerSupport -XX:MaxMetaspaceSize=512m”
    • 说明:堆与非堆合计应显著低于容器上限,为堆外与系统预留空间。

0