was修改堆内存_让人头疼的WAS内存溢出,看银行运维人员如何优雅的解决

本文介绍了IBM WebSphere Application Server(WAS)内存溢出问题,特别是针对银行运维人员如何优雅地解决这一问题。文章详细讨论了IBM Java内存管理,包括JVM内存区域、堆空间分配和垃圾回收策略。常见的内存溢出原因包括堆内存大小上限配置过低、程序内存泄漏、数据查询返回过多记录等。应对策略涉及收集环境信息、分析日志、使用IBM提供的工具进行堆和线程分析,以及预防措施,如合理配置物理内存和堆大小、优化程序以避免内存泄漏和大对象使用。
摘要由CSDN通过智能技术生成

1 引言

WAS(IBM WebSphere Application Server)是IBM发布的一款成熟的企业级Web中间件产品,凭借其可靠性与稳定性,一直是国内大型商业银行Web服务的主流选择。可再稳定也会出问题,在日常的生产运维中,WAS应用问题的排查确实让笔者这种银行运维人员头疼。一方面厂商提供技术支持的时效性与准确性有待改善,另一方面像IBM其他产品一样,网上开放的可参考和借鉴的资料太少,发生WAS问题时着实让人无从下手。不过不要紧,鲁迅先生曾经说过,“走的人多了,自然就有路了”,笔者作为具有多年WAS运维经验的老鸟,下面就把自己在应对WAS内存溢出方面的知识总结一下,为大家介绍一下如何优雅的应对WAS内存溢出。

2 IBM JAVA内存管理

要应对WAS内存溢出,必须对IBM对JAVA内存的管理有所了解,下面,笔者就简单介绍一下IBM是如何管理JAVA内存的。不同于大家经常使用的Oracle Java,WAS使用的JAVA是内置于WAS内部的IBM JAVA,与Oracle Java在JVM、配置参数等方面有着显著不同。

IBM JAVA 同样包含JDK、JRE、JVM三层,其关系如图所示:

图1 JDK、JRE、JVM关系

JVM内存管理区域包括程序计数器、Java虚拟机栈、堆空间、方法区、运行时常量池、本地方法栈(The Java® Virtual Machine Specification Java SE 8 Edition定义的内存区域)。以上几个内存区域中,除程序计数器区域外,都可能会产生OutOfMemoryError错误(本文中内存溢出特指Java的“OutOfMemoryError”)。

图2 JVM 运行时内存区域

程序计数器区域

Java虚拟机支持多线程运行,所以对于每个线程,都需要一个指示其运行程序位置的指针,这个指针指向当前程序运行方法的地址。

Java虚拟机栈

每一个Java线程都拥有一个私有的Java虚拟机栈。像其他传统语言一样,Java虚拟机栈保存了程序调用时的局部变量和部分结果(称之为Frame)。

方法区、运行时常量池

方法区存放运行时常量池、字段以及方法(包括构造方法、特殊方法)代码。在IBM Java 8版本中,所有加载的类都存放在称之为Metaspace的空间中,Metaspace使用操作系统本地内存空间。

本地方法区域

为了支持操作系统本地方法(如C语言)调用,虚拟机中在本地方法区域中存储本地方法调用的栈信息。

堆空间

堆是JVM运行时内存中最大的区域,也是和程序开发密切相关区域,所有的对象实例(包括基本类型)、数组都存放在这个区域。和传统的C、C++语言不同,Java语言不需要开发人员显式地进行内存的申请和释放,而是由JVM的Allocator(内存分配器)和Garbage Collection(内存垃圾回收器&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值