3)、Online溢出后信息
Admin Total mapped 7486988KB (reserved=5910828KB) - Java heap 1048576KB (reserved=0KB) - GC tables 35084KB - Thread stacks 30644KB (#threads=76) - Compiled code 1048576KB (used=15545KB) - Internal 1416KB - OS 141656KB - Other 5041772KB - Classblocks 7936KB (malloced=7752KB #20811) - Java class data 130304KB (malloced=130113KB #94587 in 20811 classes) - Native memory tracking 1024KB (malloced=162KB #10) Online Total mapped 36435708KB (reserved=34331208KB) - Java heap 1048576KB (reserved=0KB) - GC tables 35084KB - Thread stacks 431300KB (#threads=1549) - Compiled code 1048576KB (used=14733KB) - Internal 1672KB - OS 141792KB - Other 33575364KB - Classblocks 8448KB (malloced=8174KB #22721) - Java class data 140800KB (malloced=139904KB #103863 in 22721 classes) - Native memory tracking 4096KB (malloced=1371KB #10) |
4)、分析内存溢出文件
支付宝压力测试故障处理报告
(1)、 概述
2016年3月30日,功能压力测试时发现当压力机达到200tps时,被管服务器online堆内存持续上涨,并最终出现内存溢出问题,通过分析日志、监控online堆内存增涨曲线初步定位online出现内存泄露问题。
(2)、 分析
通过分析日志发现系统出现“OutOfMemoryError”即堆内存溢出问题,即在weblogic启动参数中添加“-XX:+HeapDumpOnOutOfMemoryErro”令系统出现内存溢出时,生成heapdump文件,以便分析引发内存溢出的原因。
再次压力测试发现系统抛出“OutOfMemoryError”异常,并生成对应的heapdump,使用工具分析heapdump发现server中存在一个【MemorySessionContext】对象占用了【1,145,301,736】字节的数据,通过分析此对象为weblogic的memorySession对象,分析截图如下:
由此分析引发内存溢出的原因可能如下:
I、 由于没有设置session超时,导致所有的会话信息在堆内存保存,导致内存溢出;
II、 由于设置的session超时时间较长,在大并发的情况下,未等到session失效便积累了大量会话,使会话信息占用大量堆内存,导致内存溢出。
(3)、 处理建议
I、 请检查应用程序是否设置了session超时;
II、 请根据应用程序的情况,适当调整session超时的时间;
III、 有针对性的调整压力测试策略,使压力测试符合真实使用场景;
IV、 若设置了session超时、并且超时时间已最优,实用场景也没有问题,请适当扩大堆内存,令堆内存设置为大于原来的4G。(注意:不建议这样做,堆内存越大每次Full GC的时间便会加长)