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

故障:收到服务器报警,内存使用率超过80%

1.查看

使用dstat和top查看内存使用最高的应用

使用dstat

查到内存占用最高的是java应用,使用2253M内存,但是这台服务器跑了好几个java,具体哪个进程使用top看下资源情况

使用top

可以看到java应用整体内存使用率超过了70%,其中pid为16494的进程 一个应用占了28.7的内存

2.定位线程问题

使用ps查看16494的线程情况

命令:ps p 16494 -L -o pcpu,pmem,pid,tid,time,tname,cmd

看到16494这个pid的应用产生了很多线程。

3.查看内存使用的堆栈

使用jstack查看

我们挑选了TID=17417的线程进行分析

在分析前需要将17417这个id转换为16进制,方便查找信息

[root@localhost ~]# printf "%x\n" 17417

4409

16进制为4409

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

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

4.查看内存堆栈信息

[root@localhost ~]# vim jstack.log

在日志信息中查找刚刚转换的4409

可以看到这个线程状态为WAITING

通过查看日志发现有大量的 waiting on condition

parking to wait for <0x0000000085dce510>

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

5.代码优化

将相应日志发送给相应开发,优化线程

补充:分析java线程占用cpu或者内存高的代码

1、通过top查看占用cpu或者内存高的进程截图如下【备注输入大写P以cpu从大到小排序,大写M以内存大小排序】

2、通过对应的cpu找到PID也就是进程对应的pid,然后找到java进程106854这个进程id

3、通过命令top -Hp PID 例如top -Hp 106854

就可以列出该进程下的所有线程id

4、通过输出大写的P查看线程占用cpu最高的或者通过大写M查看内存占用最高的

然后找到109391这个线程id

5、使用命令printf “%x\n” 109391 输出对应的十六进制码,1ab4f这个码是为了过滤线程id查到对应的代码

6、使用命令jstack PID|grep 1ab4f 【备注PID是进程的id,1ab4f是这个进程下的一个线程占用最高的cpu十六进制码】

7、通过上面的输出发现kafka,所以会联想到,kafka一直监听消息,所以消耗cpu,正常现象

8、如果出现自己写的类,说明需要修改代码逻辑了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

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

  1. 手机拍的照片计算机内存不足怎么办,手机内存不够用,照片应该怎么处理才能够少占用内存?...

    手机内存不够用,照片应该怎么处理才能够少占用内存? 随着手机功能越来越强大,我们的手机内存也越来越少被使用.除了APP占据了我们手机内存的很大一部分,另一个最大的存在就是我们的手机图片.手机图片实际上 ...

  2. zabbix监控mysql内存_zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数...

    zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数 首先,在zabbix脚本目录下添加一个脚本,写入如下代码 #!/bin/bash #license:GPL ...

  3. 对《java程序员上班那点事》笔者对数组占用内存质疑

    1.<java程序员上班那点事>笔者对数组占用内存的描述 2.实际测试情况: /*** 测试一维数组占用内存*/public static void testOneArray() {Sys ...

  4. java弱引用(WeakReference)和SoftReference的区别以及在android内存处理的作用

    http://mingnjintian-163-com.iteye.com/blog/1120472 weakReference一般用来防止内存泄漏,要保证内存被VM回收 softReference的 ...

  5. oracle软件占多少内存,oracle 占用内存

    1.在使用database configuration assistant 配置之时,注意设置SGA大小,一般会默认占用内存的40%,这样就特别慢了. 2.不使用oracle的时候把服务停掉. 3.使 ...

  6. unity占内存大小_unity texture 占用内存大小对比

    打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...

  7. win10 注册服务器占内存,windows10占用内存大怎么办_win10内存占用高解决方法

    大部分用户都已经升到win10系统,当使用win10系统可能会遇到内存占用率高的情况.占用内存高的话电脑运行就会卡住,可能导致电脑死机.那么要如何解决windows10占用内存大呢?遇到这种情况可以试 ...

  8. ‍w3wp.exe占用内存过高的问题

    今天下午服务器突然不能访问,通知机房重启后恢复.怀疑是网站asp程序的问题.上网查了查: ****                     **** 在IIS6下,经常出现w3wp的内存占用不能及时释 ...

  9. svhost占用内存过高

    Win7系统开机后,系统响应缓慢,检查任务管理器发现某个 svchost.exe 进程占用内存和CPU过高,严重的还会经常导致打开的某些程序失去响应. svchost.exe 是用来启动系统服务的,所 ...

  10. 128G手机为何实际只有112G?预装App占用内存不合理

    北京青年报 作者:温婧 128G手机为何实际内存只有112G? 专家:应给硬件减负把主动权交给用户 日前,相声演员岳云鹏在网络上表示,自己新买的128G的手机实际内存只有112G,认为手机厂商应当在宣 ...

最新文章

  1. 【前端】纯前端的一个‘喜欢我吗?’
  2. 原来matplotlib 散点图可以这样
  3. 1、代理服务器及haproxy基础
  4. linux操作系统cp命令
  5. centos 搭建web平台
  6. Maven中的自定义settings.xml文件
  7. Altium Designer 15 PCB图层详解
  8. 如何在 Mac 上映射网络驱动器
  9. 关于在手机上注册Google账号
  10. Spark Streaming系列-1、什么是Spark Streaming?
  11. 【接口篇 / Lan】(5.4) ❀ 02. 与交换机连接 (回程路由) ❀ FortiGate 防火墙
  12. 计算机毕设(附源码)JAVA-SSM基于Web美食网站设计
  13. 基于原子势函数及人工蜂群算法进行形状匹配优化(Matlab代码实现)
  14. 搜索算法工程师、专家、leader
  15. 飞檐走壁已经不是成龙甄子丹们的特技了,TA也可以做到!
  16. 百度热搜榜标题与热搜指数爬虫(python)
  17. [译]自上而下认识Elasticsearch
  18. 一款纯前端类似excel的在线表格
  19. 基于Opencv的车牌识别系统想必大家都会了,那么识别后计费系统会了吗?
  20. 【Excel VBA】设置宏语句的快速访问按钮即如何设置快速访问工具栏

热门文章

  1. IDEA使用自带数据库连接工具连接Mysql,及报错解决
  2. ajax跨域请求.json文件,使用JSONP对JSON文件进行跨域Ajax请求
  3. Centos7.5源码编译安装nodejs
  4. Qt 实现钢笔画线效果详细原理
  5. 【Java多线程编程】典型的多线程同步例程
  6. 详解图的各种令人心慌的概念和四种图的存储结构(整理到吐)
  7. 用栈实现括号匹配的检验
  8. 以下python语言关键字在异常处理_【单选题】以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( )...
  9. Excel是计算机应用软件,计算机应用软件Excel 2003教学计划
  10. python虚拟环境搭建mac_mac搭建python virtualenv虚拟环境并使用 - 李金龙