Java进程占用系统内存较高的排查方法
1、通过top 查看具体是哪个进程占用内存较多
Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.0 us, 1.0 sy, 0.0 ni, 96.3 id, 0.3 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 1016168 total, 63544 free, 824060 used, 128564 buff/cache
KiB Swap: 2047996 total, 1612356 free, 435640 used. 49916 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25894 www 20 0 3080304 757036 3252 S 3.3 74.5 25:55.03 java
1 root 20 0 43300 2180 1340 S 0.0 0.2 3:20.35 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.43 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 12:44.14 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
2、定位线程问题(通过命令查看PID 为25894 进程的线程情况),命令:# ps p 25894 -L -o pcpu,pmem,pid,tid,time,tname,cmd
# ps p 25894 -L -o pcpu,pmem,pid,tid,time,tname,cmd %CPU %MEM PID TID TIME TTY CMD
0.0 74.4 25894 25894 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25896 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.1 74.4 25894 25897 00:01:09 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25898 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25899 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25900 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25901 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25902 00:00:00 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.1 74.4 25894 25903 00:01:18 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
0.0 74.4 25894 25904 00:00:14 ? /App/java/jdk1.8.0_102/bin/java -Djava.util.logging.config.file=/App/tomcat_jtws-opefront/conf/logging.properties -Djava.util.logging.manager=org.ap
.....................................以下部分省略..................................... # ps p 25894 -L -o pcpu,pmem,pid,tid,time,tname,cmd |wc -l
101
由此可以看到这个PID:25894的进程产生了很多线程。接下来就可以通过jstack查看内存使用的堆栈,具体可以执行 ps p 25894 -L -o pcpu,pmem,pid,tid,time,tname,cmd |wc -l 来查具体有多少线程.
3、将PID为25894的堆栈信息打印到jstack.log中,命令: #jstack -l 25894 > jstack.log
4、查看日志,有很多WAITING & TIMED_WAITING 状态的日志信息,具体需要研发查看一下代码的情况;
#cat jstack.log |grep -E 'WAITING|TIMED_WAITING'
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (on object monitor)
java.lang.Thread.State: TIMED_WAITING (on object monitor)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: WAITING (parking)
java.lang.Thread.State: WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (on object monitor)
java.lang.Thread.State: WAITING (on object monitor)
java.lang.Thread.State: WAITING (on object monitor)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
java.lang.Thread.State: TIMED_WAITING (parking)
后经研发检查代码并升级程序至新版本,问题解决。
参考链接:https://www.javatang.com/archives/2017/10/25/36441958.html#TIMED_WAITING
Java进程占用系统内存较高的排查方法的更多相关文章
- java进程占用系统内存高,排查解决
转自:http://blog.51cto.com/chengxiaobai/2052530?cid=695076 故障:最近收到生产服务器的报警短信以及邮件,报警内容为:内存使用率高于70%. 使用t ...
- java进程占用系统内存高,排查方法
查看所有内存占用情况 top 定位线程问题(通过命令查看16764 进程的线程情况) ps p -L -o pcpu,pmem,pid,tid,time,tname,cmd 计数 ps p -L -o ...
- java进程占用CPU资源过高分析脚本
#!/bin/bash #输入占用CPU较高的进程号 pid=$ if [ -z $pid ] then echo "PID is NULL" exit fi #找到该进程中占用较 ...
- Java进程占用内存过高,排查解决方法
最近收到邮件报警,说内存使作率达到84%.如下图: 解决方法: A:可能是代码原因导致的问题: 1.使用命令:top 查看当前进程的状态 2.从上图可以看到PID:916的java进程占用内存较大.定 ...
- 万答#3,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 问题1,有推荐的MGR运行最佳配置参考吗 在「3306π」社区广州站5月22日的分享会上,万里数据库CTO娄帅给出了他建议 ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- Java进程占用CPU资源过多分析
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通 ...
- python 计算apache进程占用的内存大小以及占物理内存的比例
目的:计算所有apache进程占用的内存大小以及占物理内存的比例: 思路:利用系统中/proc/meminfo的现有数据进行统计 1.pidof列出服务对应进程的PID [root@yanglih ...
- linux下查询进程占用的内存方法总结
linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...
随机推荐
- iOS 屏幕录制实现
iOS 屏幕录制实现 目录 iOS 屏幕录制实现 录屏API版本变化 App内部录制屏幕 录音麦克风声音 App内部录屏直播 Bonjour APP广播端实现 广播端App(直播平台)的实现 iOS1 ...
- Solution -「COCI 2014-2015 #2」「洛谷 P6406」Norma
\(\mathcal{Description}\) Link. 给定 \(\{a_n\}\),求: \[\sum_{i=1}^n\sum_{j=i}^n(j-i+1)\min_{k=i}^j\ ...
- Acwing_蓝桥_递归
一.关于由数据范围反推算法复杂度及其算法 关于输入输出:问题规模小于105:cin,scanf都差不多,但是要是大于105推荐使用scanf和printf. 二.关于递归 1.定义 自己调用自己 2. ...
- ClickHouse在大数据领域应用实践
一.序言 面向大数据量查询数据库,优点是在较大数据量(千万级)的前提下具有较好的查询性能. 1.应用场景 ClickHouse应用于OLAP(在线分析处理)领域,具体来说满足如下特点使用此技术比较合适 ...
- 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能测试场景设计
说明: 本文是基于虚拟机环境配置设计的 性能测试需求 总tps≥100 每个业务的rt<500ms 持续稳定跑50万业务量 单场景 目的:找到单场景的性能问题,为容量场景提供参考,如果低于容量场 ...
- cs144 lab0 lab1记录
这个叫什么?Write Up吗 lab0 lab0要做的事,实现buffer部分的功能,要自己写变量以及实现接口. 成员函数 write()向buffer内写数据,peek_out() pop_ou ...
- Spring系列22:Spring AOP 概念与快速入门篇
本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Programming 面 ...
- kibana操作记录
GET _search { "query": { "match_all": {} } } GET _cat/nodes GET _cat/health GET ...
- JAVA变量的命名规范
所有变量.方法.类名:见名知意 类成员变量:首字母小写和驼峰原则:monthSalary 局部变量:首字母小写和驼峰原则 常量:大写字母和下划线:MAX_VALUE 类名:首字母大写和驼峰原则:Man ...
- iptables使用详解(centos7)
安装前 里面有iptables的命令 [root@mcw01 ~]$ rpm -qa|grep iptables iptables-1.4.21-18.0.1.el7.centos.x86_64 [r ...