jvm工具使用

经常会遇到线上服务内存飙高的问题,所以需要具体分析一下到底是哪块的代码出问题了。

1.jmap

使用命令:jmap -dump:format=b,file=/home/winds 23414
遇到了这样的问题:

23414: well-known file is not secure

这个问题是由于当前执行的用户与进程所属的用户不一致导致的。
通过以下命令解决即可

sudo -s     //在自己的用户名下切换到root,不需要输入密码
sudo -u $user jstack $pid 

然后再执行命令即可:

jmap -heap 23414 > test1.txt

还是可能会出现问题:

Attaching to process ID 23414, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 23414: Operation not permitted

发现进程所属的用户是www-data, 直接转换用户目录:

su www-data

然后再执行命令报错:

jmap -dump:format=b,file=/home/wushaofeng/20190625.dump 23414

Dumping heap to /home/wushaofeng/20190625.dump ...
Permission denied

很简单,把 /home/wushaofeng路径的权限修改为777

先回到自己的用户名路径下,然后执行命令
chmod 777 /home/wushaofeng

然后切换回www-data用户:

jmap -dump:format=b,file=/home/wushaofeng/20190625.dump 23414

下载到本地:

sz 文件名

进程pid转16进制:

printf "%x\n" 23414

接下来我需要用本地的jvisualvm对dump文件进行分析。
找到java_home 路径:

/usr/libexec/java_home

最后导入文件到visualvm中展示:
在这里插入图片描述

虚拟机配置参数说明:

 -Xms1024m -Xmx3500m -Xmn512m -XX:PermSize=192m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50

说明:
持续更新
https://blog.csdn.net/j080624/article/details/85679252

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值