一、java.lang.OutOfMemoryError: native memory exhausted

Java 虚拟机初始堆大小和最大堆大小不能盲目设置
以前碰到不少做J2EE应用的同事。 他们在碰到WAS跑起来很慢的时候,就会考虑到WAS的内存不够用。从而在增加内存后,盲目设置WAS的Java虚拟机初始堆大小和最大堆大小。
以前我见过的一个烟草的项目就是这样。
服务器有8G的内存 , 然后就把WAS的内存堆大小设置到4G。
结果导致应用跑起来的时候,就跟发羊癫风似的。
什么叫发羊癫风呢?
就是一会跑的很快, 跑着跑着就白屏了。 等上个1分钟后,又可以跑的很快。
这种情况出现的原因就是WAS的内存堆大小设置过大。 从而导致Java虚拟机做内存回收工作的时候,耗费时间过多。 这样就会让用户在访问应用的时候会出现白屏的情况。
一般情况下。 一个JVM的内存堆大小,最大不要超过1024M, 再大就得不偿失了。
后来的解决的方法就是在一个服务器上作多个WAS服务的集群,每个服务内存设置1G。这样跑起来就不会出现白屏了。



可以:初始堆:256M,最大堆:512M

可以:初始堆:1024M,最大堆:2048M

不行:初始堆:2048M,最大堆:4096M



具体根据机器性能决定,无需设置太大,设置过大会会报:
java.lang.OutOfMemoryError: native memory exhausted
并且was下会产生下列文件:
heapdump.20151228.150706.32210.0001.phd
javacore.20151228.150706.32210.0002.txt
Snap.20151228.150706.32210.0003.trc

具体配置点见截图:




Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐