博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 内存异常排错
阅读量:5749 次
发布时间:2019-06-18

本文共 883 字,大约阅读时间需要 2 分钟。

  hot3.png

    同事说某测试服务器,启动的服务总是莫名奇妙的挂掉,并且新的服务也启动不起来。让我看下是什么原因导致的。

    登上系统后,执行 top 先查看资源使用情况:

155350_iAD3_2751137.png

发现这个资源利用甚是奇怪

    CPU 甚是清闲,IO很低,唯独内存占用很厉害,并且swap空间已经耗尽!!!

按下 M 按照内存排序资源使用如上图。

先看下是处理什么业务的程序如此占用如此大内存吧(通过监听端口号区分业务有时比去看启动命令好的多):

160236_k4jE_2751137.png

然后回头问下同事吧,同事出去了…………

好吧

既然是java程序,那就看看里面有啥数据吧:

dump 内存信息

160306_vVzu_2751137.png

几乎瞬间执行完成,看下此文件有多大

160438_p8oo_2751137.png

才214M,我似乎意识到了什么……

将数据下载到本地,然后拿MAT看下里面有啥内容吧

160614_mWcG_2751137.png

资源基本没啥使用,所以说开了40G内存使用了30M的数据存储。

印证了我刚才意识到的问题。

在看《深入JAVA虚拟机第二版》有阐述,java虚拟机会根据所部署的机器配置自动的去开辟内存资源。

来看下在此机器上默认开辟的大小

jinfo 12049 

161516_rYWT_2751137.png

会有这么一段参数设定

然后实际开辟多大呢

jmap -heap 12049

161624_A5Fz_2751137.png

果真开了很大。

好吧找到原因了。

那么解决方法就很简单了,添加启动参数 -Xms2048m -Xmx2048m -XX:MaxMetaspaceSize=512m 这个配置基本满足测试需求了。

顺便看下虚拟机默认参数设定吧:

查看所有的,这些参数就是所谓的黑技术--调优所用

java -XX:+PrintFlagsFinal –version

看下根据主机配置虚拟机修改的参数

java -XX:+PrintCommandLineFlags –version

查看jvm比较厉害的垃圾回收器

java -XX:+PrintFlagsFinal -version | grep -e  'Use[a-zA-Z1-9]*GC'

好,内存与垃圾回收器是需要调整比较多的场景。然而需要把握一个原则,不要过早优化你的配置!!!

转载于:https://my.oschina.net/seal90/blog/1620755

你可能感兴趣的文章
java基础面试题-1
查看>>
深克隆与序列化效率的比较
查看>>
C++入门篇01
查看>>
3.python开发语言的特点
查看>>
Nginx使用Proxy_cache实现服务器端静态文件缓存
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
nagios监控使用139邮箱报警
查看>>
Windows Phone 7 中各种Task解说(启动器与选择器)
查看>>
ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
查看>>
罗森伯格助力2011年中国智能建筑技术发展应用论坛哈尔滨站
查看>>
网络割接
查看>>
mysql主从复制及失败切换
查看>>
windows server 2016 活动目录(二)
查看>>
openstack G版 修改vm的flavor级别
查看>>
python_控制台输出带颜色的文字方法
查看>>
java泛型中特殊符号的含义
查看>>
一秒 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql 问题
查看>>
在centos7下用http搭建配置svn服务
查看>>
Android组件化最佳实践 ARetrofit原理
查看>>
舍弃浮躁, 50条重要的C++学习建议
查看>>