内存溢出监控 内存状况

export JAVA_OPTS="-server -Xms4096M -Xmx4096M -Xmn256M -Xss228k -XX:+UseBiasedLocking -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled"

JAVA_OPTS="$JAVA_OPTS -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump002"


在凯特琳娜.sh文件中,加入此配置。


在内存溢出时会把服务器当前信息打印到该文件中。


但有一点,此文件会很大,内存上限4G 那么 该文件有有4G。


2017年4月12日10:40:13

接上文,在经过了一段时间正式应用后,昨天终于内存溢出了 。


从服务器上下载了 记录内存情况的文件。但是不知道如何分析。

经组内经验充足的前辈指导,指导了有一个eclipse插件。能够专门用来分析内存使用情况。插件名称为:MemoryAnalyzer 一个界面类似eclipse的软件。

可以打开服务器上记录内存信息的二进制文件 ,格式为:.hprof格式

从百度上即可下载。

下载后,直接打开 .exe文件,fileopen内存信息文件。 界面中含有饼状图用来展示内存使用情况。


使用插件后分析 有一个大块儿的饼状图,占用内存 90%+ 找到该模块,进行分析后发现,原来是 mysql 相关的 insert语句出现问题。


个人分析可能是因为是积月累的insert语句连接数据库后不能及时释放。所以导致内存溢出。

排查指定sql语句及与数据库mysql连接层并未发现未释放连接等其他肉眼可见现象。

后百度未果,询问组内经验人士得知,问题出现在  使用的mysql6.0.jar包上。 这个jar包不知道是之前哪位项目开发人员引入(可能是非官方版本)。此jar包中,在insert量大的时候,会出现不稳定情况。导致insert占用内存。

后更换为mysql5.1.2.jar包,部署测试环境,进行压测,300*300再未发现insert占用大量内存,饼状图上的模块也都是正常占用10%+,没有特别明显的占用模块。

问题解决。,,,,

下面是一个手动从linux上获取内存状况文件 输出到文件。

jmap -dump:format=b,file=temp_heapdump.hprof <pid> 手动打印内存使用情况

<pid> 用来替换 pid


mysql-connector-java-5.1.27

这个insert的问题得到修复的版本。公司的其他项目用的也是此jar包。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值