问题描述我们在处理Excel工作表数据时可能会用到Visual Basic,但是有时候单击“开发工具”选项卡“代码”功能组中的“Visual Basic”按钮,却无法正常使用,而是提示“内存溢出”(参见下图),遇到这样的情况该怎么办呢?解决办法1.
作为一名Java开发者,我们都知道Java进程是运行在Java虚拟机上的,而Java进程要想正常运行则需要向计算机申请内存,其中主要为Java对象实例所占用的堆(heap)内存(当然还有其他的也会占用内存,比如栈等),这些内存一般划分为Java虚拟机所占内存。
再通过jstack命令查看该线程:jstack -l 16327 | grep -20 3fca。可以看到OOMObejct对象创建了400多万个实例,明显异常,我们通过搜索代码OOMObject对象的usages,发现该代码在:这里有一个死循环,至此问题排查到,修改后重新上线。
启动时加入参数-Xms200M -Xmx200M -XX:+UseParallelGC -XX:+PrintGC -XX:+HeapDumpOnOutOfMemoryError,这段代码运行后,老年代的内存占用会慢慢升高,待内存占用到达顶峰时,会频繁Full GC,直到撑爆内存,最后会导致OOM异常:Exception in thread “pool-1-thread-1” java.lang.OutOfMemoryError: GC overhead limit exceeded;
随着平台业务的不断发展,平台曲库数据的不断增加,系统偶尔出现内存溢出的情况。内存溢出相比其它异常而言,通常比较隐晦,一般是伴随着时间慢慢积累而产生的,因此不能仅根据异常产生处来简单定位问题,而要找到问题的根源。所以,有必要知道如何排查系统的内存溢出。