资讯专栏INFORMATION COLUMN

记一次,jvm 内存溢出

tainzhi / 2203人阅读

摘要:什么是内存溢出内存溢出是指,程序创建对象需要内存,但是却没有内存可用了,内存就溢出了。使用命令查看个数输入后,按诊断是文件在服务端没读取到,还是内存溢出。无耐,阿里云学生机配置不好,只能稍微修改一点,再将文件切割为小文件上传了参数请参考

1、什么是内存泄漏
内存泄漏是指,有未被释放的java对象,一直停留在内存中。GCRoot 无法追踪到此对象,导致此对象无法被回收。

2、什么是内存溢出
内存溢出是指,java程序创建对象需要内存,但是却没有内存可用了,内存就溢出了。
溢出:从字面理解,桶不够装,水溢出了

3、当时的环境:
打包成jar后,直接 运行 java -jar xx.jar。默认的jvm 运行参数 -Xms 。 因此给jvm分配的内存比较小。然后,当时上传了1个有10W条的数据的excel插入到数据库。结果就是,运行了几分钟,用top命令查看,java 的 cpu使用率为 99%。结果就是程序直接报错。

4、当时情况
1、当时不清楚自己服务器的配置情况(阿里云学生机)
2、在本地测试好好的,在服务器端就不行了,怀疑是文件没上传,怀疑内存溢出

5、解决过程

1、先查看服务器配置
①、使用free -h 查看服务器内存。

②、使用top 命令查看 cpu 个数

输入top 后, 按 1

2、诊断是文件在服务端没读取到,还是内存溢出。
①上传小量的数据,发现上传成功,也就是是内存不大够
②使用top 命令。 客户端上传大文件。使用top命令时,发现上传后,jvm 的cpu 使用率 直接飙到 99%。内存从5% 飙到 35%。最后客户端直接报错

3、设置 jvm 的启动参数

-Xms : 初始堆大小(堆在java中是用于给对象分配内存的)
-Xmx : 最大堆大小
jcmd [pid] VM.flags

①查看 jvm 启动参数,看是否设置小了

jcmd [pid] VM.flags

②发现确实是设置下小了,重新设置,并启动

nohup java -Xms512m -Xmx512m -jar xx.jar &

最后的结果就是,程序运行稍微快了,之前上传1000条左右的数据都很慢,现在就快很多了

总结:
原本是想着能不能通过把jvm的启动参数设置大一点,进而来支持10W条数据的上传。无耐,阿里云学生机配置不好,只能稍微修改一点,再将文件切割为小文件上传了!

jvm参数请参考: https://segmentfault.com/a/11...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71595.html

相关文章

  • 一次JVM调优

    摘要:现象登入生产环境,使用命令因为这时候并没有打的,所以只能观察现象。其他的可以根据这个类推,是内纯的占用量。 前言 我们的游戏上线之初,经常有玩家反馈卡,或者有网络延迟等现象,造成用户流失等现象,这时候我就想到是不是可能是之前的jvm配置有问题,或者存在内存泄露等问题。 现象 登入生产环境,使用命令,因为这时候并没有打gc的log,所以只能观察现象。 jstat -gcutil 270...

    sugarmo 评论0 收藏0
  • 一次OkHttpClient导致线程过多的排查

    摘要:首先先解读下这个报警内容,原因活跃线程数过多,是监听的端口号用来获取虚拟机各项信息,代表着此时的线程数,是设置的报警阈值。 前言 前天,一位21世纪的好好青年正在工位上默念社会主义大法好的时候,钉钉上又报警了(公司项目接入了open-faclon监控,指标不正常会报警给钉钉的机器人),无奈默默流泪挥手告别社会主义大法开始定位线上问题。 报警内容 首先我们先来看下报警信息,为防止泄露公...

    tianyu 评论0 收藏0
  • JVM 堆(heap)溢出案例

    摘要:一说明当虚拟机申请不到内存空间的时候,会报堆内存溢出。记录次数不让进程结束,便于使用分析工具来查看内存情况使用的版本报错信息运行结果表明,运行到次时,出现了堆内存溢出。 一、说明 当虚拟机申请不到内存空间的时候,会报堆内存溢出: OutOfMemoryError:java heap space。 常见的原因:http://outofmemory.cn/c/java-... 我测试到时...

    leejan97 评论0 收藏0
  • 十种JVM内存溢出的情况,你碰到过几种?

    摘要:内存溢出的情况就是从类加载器加载的时候开始出现的,内存溢出分为两大类和。以下举出个内存溢出的情况,并通过实例代码的方式讲解了是如何出现内存溢出的。内存溢出问题描述元空间的溢出,系统会抛出。这样就会造成栈的内存溢出。 导言: 对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不需要自己实现释放内存,不容易出现内存泄漏和内存溢出的问题,由虚拟机管理内存这一切看起来非常美好,但是一旦...

    ShevaKuilin 评论0 收藏0
  • 关于JVM内存溢出的原因分析及解决方案探讨

    摘要:内存溢出分配的内存空间超过系统内存。内存泄漏的原因分析由大块组成堆,栈,本地方法栈,程序计数器,方法区。内存溢出的原因分析内存溢出是由于没被引用的对象垃圾过多造成没有及时回收,造成的内存溢出。小结栈内存溢出程序所要求的栈深度过大导致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序计数器,其他...

    xuexiangjys 评论0 收藏0

发表评论

0条评论

tainzhi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<