`
sanyecao2314
  • 浏览: 131681 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

对生产环境内存溢出的分析1

JVM 
阅读更多
昨天下午,生产环境168服务器突然报内存溢出.临时抓了jvm快照.重启解决.
今天分析jvm快照.一眼就发现有对象貌似存在异常.DictSegment对象在JVM中有60W+个实例化的对象.
 
    凭经验,一般的JVM溢出都是有对象没有处理好.GC没有回收,导致在JVM里越来越多导致.所以首先排查调用这个类的方法.
    检查代码,发现只有一个类IndexCreateUtil使用到了DictSegment.方法本身的实现上没有问题.网上的demo方法都是这样使用的.
    实践出真知.自己写个测试类.
public class TestIndexCreateUtil2 {
@Test
public void testSplitBySegmenterStringBooleanBoolean() {
User user = new User();
testFenCi2();
try {
System.gc();
// 先不要停止,抓内存使用情况
Thread.sleep(1000000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
 
private void testFenCi2(){
String text = "让战士们过一个欢乐祥和的新春佳节。";
// 创建分词对象
StringReader reader = new StringReader(text);
Role role = new Role();
IKSegmenter ik = new IKSegmenter(reader, true);// 当为true时,分词器进行最大词长切分
Lexeme lexeme = null;
try {
while ((lexeme = ik.next()) != null) {
System.out.println(lexeme.getLexemeText());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
reader.close();
}
}
}
    在System.gc();行加断点.抓取JVM发现.执行到System.gc();时.特意加的role 对象还是存在的,但从Eclipse里没法查看了,这应该是还没有执行过GC导致的.另一个更重要的是.DictSegment类有60W+个实例化的对象.
    再次问度娘,调用方法都是对的,大概看了一下,感觉跟IKAnalyzer本身的分词算法可能有关.
    换一个思路.使用IKAnalyzer的作用就是加一些tag.没有使用其他比较高深的东西.那换一个分词软件行不行?
    找到度娘比较推荐的ansj测试.功能可以实现.也没有产生几十万个相同的类对象.再看内存使用.悲剧了.一句分词,内存直接从10M不到飙升到接近100M.而IKAnalyzer内存变动在10M以内的.
    
     综合考虑.还是不换IKAnalyzer了.在此标记一下.抓取到的JVM快照中如果有60W+个DictSegment对象.是正常的(但确实有点奇葩:).
    JVM溢出的原因待继续查找.
分享到:
评论

相关推荐

    Tomcat内存溢出的三种情况及解决办法分析

    在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。本文就介绍了Tomcat内存溢出的三种情况及解决办法分析

    Java生产环境下性能监控与调优详解.7z

    本课程将为你讲解如何在生产环境下对Java应用做性能监控与调优;通过本课程,你将掌握多种性能监控工具应用,学会定位并解决诸如内存溢出、cpu负载飙高等问题;学会线上代码调试,Tomcat、Nginx,GC调优等手段; 读...

    Java生产环境下性能监控与调优详解视频教程

    Java生产环境下性能监控与调优详解视频教程 ... MAT 分析内存溢出的方法 可视化工具分析GC日志 通过这套视频学习如何在生产环境下进行性能监控与调优。 视频在百度网盘中,txt下载后获取网盘链接下载

    SunSolaris的JavaCore分析

    在Sun Solaris上Java默认是不生成OOM的JavaCore及Dump文件,本资源详细介绍了,如何在生产环境的运行时获取内存信息进行分析,定位问题。

    Java虚拟机

    增加了若干与生产环境相结合的实战案例;对第1版中的错误和不足之处的修正;等等。 第2版不仅技术更新、内容更丰富,而且实战性更强。全书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 编程语言 程语言编程语言 程语言 C#.4 1.1 Microsoft...

    商用通“MINI网络专家”新品上市

    作为民族产业的骄傲,“龙芯CPU”为国人赢得了骄傲和尊严,商用通“MINI”,秉承自主创新精神,发挥原创思维,用心积累核心技术,在深入分析中小企业实际情况的基础上,开创性的将高档路由器和低端服务器融为一体,...

    入门学习Linux常用必会60个命令实例详解doc/txt

    -p:通知login保持现在的环境参数。 -h:用来向远程登录的之间传输用户名。 如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:。 一般界面是这样的: Manddrake Linux release 9.1...

    基于AT89S52 单片的频率计

    TR0 置1 ,启动定时/计数器T0 对单片机的机器周期的计数,同时检测方波的第 三个下降沿;当判定检测到第三个下降沿时TR0 清0 ,停止计数,然后从计数 寄存器T0 读出测量数据,在完成数据处理后,由显示电路显示测量...

Global site tag (gtag.js) - Google Analytics