You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何减少OpenLiberty运行WAR应用的内存占用?

降低OpenLiberty内存占用的实用方案

一、先从server.xml下手,精简配置

  • 砍掉冗余特性:OpenLiberty默认会加载一堆特性,别用全量的webProfile,只留应用真正依赖的核心特性。比如普通Servlet/JSP应用,只配这俩就够:
<featureManager>
  <feature>servlet-5.0</feature>
  <feature>jsp-3.0</feature>
  <!-- 把ejb、jpa、mpMetrics这些没用的全删掉 -->
</featureManager>
  • 缩小线程池:默认线程池开得过大,既占内存又浪费资源,根据实际并发需求调小:
<executor id="defaultExecutor" coreThreads="5" maxThreads="20" keepAlive="60s" />
  • 关闭不必要的监控与日志:如果不需要实时性能监控,把mpMetrics这类特性关掉;日志级别别设成trace,改成info即可,减少日志缓存占用:
<logging traceSpecification="*=info" maxFileSize="10MB" maxFiles="5" />

二、JVM参数是核心,直接控制内存

OpenLiberty的JVM参数在jvm.options文件中配置,重点限制堆内存和非堆内存:

  • 锁死堆内存上限:别让JVM随意扩容,根据单应用实际需求设置,比如单应用给512M足够的话就这么写:
-Xms256m  # 初始堆内存,和上限接近避免频繁扩容
-Xmx512m  # 最大堆内存,直接卡死上限
  • 限制元空间大小:元空间默认会无限增长,给它设个最大值,比如:
-XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=128m
  • 换用轻量GC:用G1GC或者ShenandoahGC,比默认GC更省内存,还能控制停顿时间:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
  • 关闭JVM冗余特性:比如偏向锁、字节码验证这些,不用就关掉:
-XX:-UseBiasedLocking
-Xverify:none

三、应用本身也要瘦身

  • 清理WAR包冗余依赖:把WAR里重复的jar、没用的框架依赖全删掉,比如用了SpringBoot就别带多余的Servlet容器依赖,减少类加载后的内存占用。
  • 排查内存泄漏:检查应用里有没有未关闭的数据库连接、IO流,或者静态集合无限存储对象的情况,这些都是内存消耗大户。
  • 替换轻量框架:如果用了重型框架(比如全量Spring),能换成Spring WebMvc甚至纯Servlet实现的就换,能省不少内存。

四、其他优化小技巧

  • 开启共享类缓存:多个应用可以共享已加载的类,减少重复内存占用,在jvm.options里添加:
-Xshareclasses:name=liberty_shared_cache,cacheDir=/opt/liberty/cache
  • 缩小连接池:数据库连接池、HTTP连接池别开太大,比如数据库连接池设10以内足够:
<dataSource id="DefaultDataSource">
  <connectionManager maxPoolSize="10" minPoolSize="2"/>
</dataSource>

内容的提问来源于stack exchange,提问作者李哈哈

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:06:01