温馨提示×

centosweblogic为何占内存高

小樊
48
2026-10-15 03:35:46
栏目: 智能运维

在 CentOS 上运行 WebLogic 出现内存占用高,通常不是“系统问题”,而是 JVM + 应用 + 配置 共同导致的。下面按最常见原因 → 排查方法 → 解决建议来说明。


一、最常见原因(90% 情况)

1️⃣ JVM 堆内存配置过大

WebLogic 本质是 Java 应用,内存主要来自 JVM Heap。

常见配置:

-Xms2048m -Xmx4096m

问题:

  • 配置的内存 全部预留
  • 即使不用,也显示被占用
  • top 看到的 RES 会很大

✅ 检查:

ps -ef | grep java

看是否有 -Xmx、-XX:MaxMetaspaceSize


2️⃣ 堆内存泄漏(内存不释放)

表现:

  • 内存只涨不降
  • 重启后正常,过几天又高

常见原因:

  • 静态集合(List/Map)不断添加
  • 缓存未清理
  • 连接未关闭(DB / HTTP)
  • 线程池堆积

3️⃣ Metaspace / 永久代占用高

WebLogic 会加载大量类:

  • EJB
  • JSP
  • Web Service
  • 动态代理

表现:

  • Metaspace 持续增长
  • Full GC 不释放

4️⃣ 线程数过多

WebLogic 默认线程不少:

  • 管理线程
  • 执行线程
  • 连接池线程

每个线程约 1MB 栈内存

-Xss512k 或 1m

线程 500+ 就很可观


5️⃣ Native Memory(JVM 外部内存)

包括:

  • Direct Buffer
  • JNI
  • Socket Buffer
  • OS 级缓存

这部分 top 能看到,但 JVM 看不到


6️⃣ WebLogic 域中部署了多个应用

  • 一个 Domain 多个 App
  • 每个 App 都有 Session、缓存、连接池

CentOS 上很容易“看起来很吃内存”


二、如何快速判断是哪一类的内存高

✅ 1. 看系统层

free -m
top

重点看:

  • RES(实际占用)
  • SHR(共享内存)

✅ 2. 看 JVM 层

jstat -gc <pid>

关注:

  • Heap 使用率
  • Full GC 频率
  • Old 区是否一直涨

✅ 3. 看堆内对象

jmap -histo:live <pid> | head

如果看到:

  • 大量 HashMap
  • byte[]
  • 自定义类

基本就是应用问题


✅ 4. 导出堆分析(最准)

jmap -dump:format=b,file=heap.hprof <pid>

用:

  • MAT
  • VisualVM 分析大对象

三、CentOS 上 WebLogic 内存优化建议

✅ 合理设置堆

-Xms2g -Xmx2g
-XX:MaxMetaspaceSize=512m
-Xss512k

⚠️ 不要盲目给大内存


✅ 控制线程

WebLogic Console:

Environment → Servers → <Server> → Threads

✅ 减小 Session 超时

<session-timeout>30</session-timeout>

✅ 关闭不必要的服务

  • IIOP
  • JMS(不用就关)
  • Web Service(不用就删)

四、一句话总结

CentOS 上 WebLogic 占内存高,本质不是 CentOS,而是:

  • JVM 堆配置大
  • 应用内存泄漏
  • 线程 / 类加载多
  • 多个应用共用 Domain

如果你愿意,可以贴:

  • ps -ef | grep java
  • free -m
  • WebLogic 版本

我可以直接帮你判断该调哪一块。

0 踩