1.使用top命令查看内存使用最高的应用


使用大写M可按照内存使用排序,大写P可按cpu使用排序;

可以看到第一个java应用占用的cpu和内存明显高于其他几个;

2.定位线程问题

使用top查看第一个线程19503的线程情况

命令:top -Hp 19503

可以看到19503 这个pid应用产生了很多的线程;

3.查看内存使用的堆栈信息

使用jstack命令查看

将pid为19503 的应用打印到日志中

[root@localhost ~]# jstack -l 19503 > jstack_19503.log

4.查看内存堆栈信息

[root@localhost ~]# more jstack_19503.log


发现大量线程状态为WAITING的

parking to wait for  <0x00000000e7e54130>

存在大量线程等待被唤醒,占用大量内存。

当然,其中原因可能不止这个,也可能发生死锁等情况,可以根据具体情况分析自己的代码,再根据实际情况优化修改;

补充:这里说一下使用jstack命令时遇到的异常情况:

1.登录用户和应用所属用户不一致:

19503: well-known file /tmp/.java_pid19503 is not secure: file's group should be the current group (which is 1000) but the group is 0

这个可能是由于应用的所属用户和当前用户不一致引起的,切换为应用所属用户即可

可以通过这个命令查看所有java应用的信息:

ps -ef | grep java

2.jstack无法连接jvm

19503: Unable to open socket file: target process not responding or HotSpot VM not loaded

看到网上很多解答说是因为:这个java进程的pid文件删除了。

由于linux操作系统为了防止/tmp目录文件过多,有个删除管理机制:tmpwatch;

系统每天会用tmpwatch命令检查并删除 /tmp 下超过240小时未访问过的文件和目录。

具体解决办法:https://blog.51cto.com/zhangshaoxiong/1310166

但是感觉修改较为复杂,且需要修改到系统文件,所以我这边使用了一个临时方法,在启动jar包时加一个命令指定一个临时文件夹即可:

java -Djava.io.tmpdir=/tmp/tmpdir -Dfile.encoding=utf-8 -Xmx512m -jar test.jar --spring.profiles.active=test

其中的-Djava.io.tmpdir=/tmp/tmpdir命令增加的指定命令,/tmp/tmpdir为指定文件夹位置。

使用jstack排查java应用占用内存过高问题相关推荐

  1. java内存问题怎么排查,java占内存高排查 java应用占用内存过高排查的解决方案...

    想了解java应用占用内存过高排查的解决方案的相关内容吗,zhaixing_0307在本文为您仔细讲解java占内存高排查的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java,占内存过 ...

  2. Java进程占用内存过高,排查解决方法

    Java进程占用内存过高,排查解决方法 参考文章: (1)Java进程占用内存过高,排查解决方法 (2)https://www.cnblogs.com/eeexu123/p/10913389.html ...

  3. 排查解决Java进程占用内存过高

    排查解决Java进程占用内存过高 1 在项目部署运行之前 1 检查JVM参数设置 2 检查代码逻辑 3 使用内存分析工具 4 检查线程 5 调整应用程序的设计 7 调整硬件资源 2 在项目部署运行之后 ...

  4. java事务占用内存吗,如何排查java应用中CPU使用率高或内存占用高的问题

    如何排查java应用中CPU使用率高或内存占用高的问题?这类问题的排查步骤基本通用的.现在通过一个具体的例子来说明. 问题描述 最近有个线上项目每天0点过后CPU使用率会上升至200%到300%. 排 ...

  5. mc服务器java占用过大_如何排查java应用中CPU使用率高或内存占用高的问题

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:MnameHZJ my.oschina.net/u/1420452/blog/224 ...

  6. Java程序占用 CPU 过高怎么排查

    Java程序占用 CPU 过高怎么排查 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅 ...

  7. Java进程占用内存超高分析

    Java进程占用内存超高分析_ 1. 报错 2. 解决 3. 我用到的解决方法 写了一个Java服务,没有定时服务,没有线程池,没有重度的读写,只是对外提供了几个接口,接口的访问量并不高,结果占用内存 ...

  8. 分析java 线程占用内存_Java线程:保留的内存分析

    分析java 线程占用内存 本文将为您提供一个教程,使您可以确定活动应用程序Java线程中保留了多少Java堆空间 . 将提供来自Oracle Weblogic 10.0生产环境的真实案例研究,以使您 ...

  9. antimalware service executable占用内存过高_SQLServer占用服务器内存过高,更改这个设置就能降低内存使用率

    前两天我的服务器突然告警提示我的内存占用过高,使用率高达94.3%.当时我就有点纳闷了,服务器配置 互联网服务器 是4核8G的,只装了4个应用程序,其中就有SQL SERVER2012,而且使用频率也 ...

  10. linux下查找java进程占用CPU过高原因

    linux下查找java进程占用CPU过高原因 1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu. 2.查找线程 使用top -H -p &l ...

最新文章

  1. Maven项目中:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create conn
  2. Catch Overflow!
  3. 修改python的pip下载源
  4. html5 查看图片,html5实现图片预览和查看原图
  5. Java 8 Lambdas –缺少脱离Java的链接
  6. 曝张一鸣在游戏群批员工上班时聊游戏,遭回怼:那你退群啊
  7. URL请求到Action的映射规则
  8. iOS开发小技巧 -- tableView-section圆角边框解决方案
  9. 在SQL Server 语句中,如何将参数做为表名传递到查询语句中
  10. 如何使用PowerShell批量删除注册表项
  11. 计算机专业为啥是吃青春饭的,计算机专业是吃青春饭的行业吗?
  12. Uni-App 简单引导页示例
  13. 关于杂质过滤的一点研究
  14. linux批量安装系统uefi,PXE批量部署Linux之四:一台服务器同时支持BIOS和UEFI
  15. JavaEE——作业管理系统期末总结
  16. 中国本土便利店遍地开花,7-Eleven便利店入华为何“水土不服”?
  17. aix打开linux共享目录超长,AIX修改用户名和密码长度限制
  18. 微分几何在机器人领域的应用(一)
  19. ASP调用存储过程中与SQL对应的数据类型
  20. C++高级——多线程编程

热门文章

  1. 计算机格式化为ntfs,如何将u盘重新格式化为NTFS格式
  2. JavaScript中三元一次函数的解法
  3. laravel seeder 填充数据
  4. 程序语言翻译: 2.1在以阶段划分的编译器中,贯穿于编译器工作始终的是( )。2.2 对高级语言程序进行翻译时,源程序中的变量不可能映射到( )
  5. 《我的博客》之选择公共博客平台还是自建博客站点
  6. python搜索引擎根据关键词爬取内容
  7. Tensorflow详解 命令行参数flags
  8. win10台式计算机调亮度,台式win10电脑屏幕亮度无法调节怎么办
  9. Markdown 引用Gitee图片外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  10. linux ntp时间立即同步命令_Linux时间同步,ntpdate命令、ntpd服务详解