我相信做技术的都会遇到过这样的问题,生产环境服务遇到宕机的情况下如何去分析问题?比如说JVM内存爆掉、CPU持续高位运行、线程被夯住或线程deadlocks,面对这样的问题,如何在生产环境第一时间跟踪分析与定位问题很关键。下来让我们看看通过如下步骤在第一时间分析问题。

CPU占用较高场景

收集当前CPU占用较高的线程信息,执行如下命令:

top -H -p PID -b -d 1 -n 1 > top.log

top -H -p PID

结果如下:

 

 

上图显示的都是某一个进程内的线程信息,找到cpu消耗最高的线程id,再配合jstack来分析耗cpu的代码位置,那如何分析呢?

先执行jstack获取线程信息

jstack -l PID > jstackl.log

将PID(29978)转成16进制:0x751a,16进制转换工具很多可以在线随便搜索一个或者基本功好的自己计算。

打开jstackl.log,查找nid=0x751a的信息,这样就定位到了具体的代码位置,这里由于是安全原因我就不贴图了。

通过上面的步骤就可以轻松的定位那个线程导致cpu过高,当然也可以通过其他方式来定位,下面介绍一个快捷的方式

#线程cpu占用
#!/bin/bash [ $# -ne 1 ] && exit 1 jstack $1 >/tmp/jstack.log for cpu_tid in `ps -mp $1 -o THREAD,tid,time|sort -k2nr| sed -n '2,15p' |awk '{print$2"_"$(NF-1)}'`;do cpu=`echo $cpu_tid | cut -d_ -f1` tid=`echo $cpu_tid | cut -d_ -f2` xtid=`printf "%x\n" $tid` echo -e "\033[31m========================$xtid $cpu%\033[0m" cat /tmp/jstack.log | sed -n -e "/0x$xtid/,/^$/ p" #cat /tmp/jstack.log | grep "$xtid" -A15 done rm /tmp/jstack.log

上述命令会以百分比的方式来显示每个线程的cpu消耗百分比,这里我就不贴图了,谁用谁知道。

内存消耗过高场景

收集当前活跃对象数据量信息,执行以下命令获取

jmap -histo:live pid > jmaplive.log

ps. jmap -histo:live 数据可以多进行几次,比如说间隔几分钟输出一次,然后对比两个文件的差异可以看出gc回收的对象,如果多次结果没有差异并且gc频繁执行,证明剩余对象在引用无法gc回收,这时就需要对服务进行限流给服务喘气的机会。

或者收集dump信息,通常这种获取方式需要较长时间执行,并产生大容量的dump文件,我们会考虑逐步废掉通过这个文件来分析。执行以下命令获取

jmap -dump:file=./dump.mdump pid

dump文件通过MAT工具来进行内存泄漏分析。

线程、内存分析工具

上面说过通过jstack生成的线程文件是可以通过工具来直接打开可视化分析的,这里我推荐使用:tda(Thread Dump Analyzer)这个工具可以自行搜索下载。

通过jmap -dump生成的dump文件也是可以通过工具来进行可视化分析的,这里我推荐使用MAT(Memory Analysis Tools)它可以通过eclipse plugin的方式使用或者独立的下载安装包使用。

生产环境如何快速跟踪、分析、定位问题-Java的更多相关文章

  1. 生产环境下JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

  2. 生产环境JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

  3. 生产环境下JAVA进程高CPU占用故障排查---temp

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

  4. IBM Thread and Monitor Dump Analyzer for Java解决生产环境中的性能问题

    这个工具的使用和 HeapAnalyzer 一样,非常容易,同样提供了详细的 readme 文档,这里也简单举例如下: #/usr/java50/bin/java -Xmx1000m -jar jca ...

  5. 【生产环境】Tomcat运行一段时间后访问变慢分析历程

    环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...

  6. Java生产环境下性能监控与调优详解视频教程 百度云 网盘

    集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...

  7. Linux性能分析:生产环境服务器变慢,诊断思路和性能评估

    Linux性能分析:生产环境服务器变慢,诊断思路和性能评估 一.整机:top 二.CPU:vmstat 所有CPU核信息 每个进程使用CPU的用量分解信息 三.内存:free 四.硬盘:df 五.磁盘 ...

  8. 进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?

    Tips:与前文 <进击的 Ansible(一):Ansible 快速入门> 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS.由于 Ansible 项目开发活 ...

  9. 【Java面试】生产环境服务器变慢,如何诊断处理?

    "生产环境服务器变慢?如何诊断处理" 这是最近一些工作5年以上的粉丝反馈给我的问题,他们去一线大厂面试,都被问到了这一类的问题. 今天给大家分享一下,面试过程中遇到这个问题,我们应 ...

随机推荐

  1. 物理机装kali复盘

    复盘总结 最近把旧电脑想刷成kali的单系统,便下载了最新版本的kali 2018.1 的镜像文件.由此出现了很多问题. 首先在制作启动盘的时候,我用了很多软件,比如Ultriso,rufus,uni ...

  2. jquery跨域3

    这两天用 Jquery 跨域取数据的时候,经常碰到 invalid label 这个错误,十分的郁闷,老是取不到服务器端发送回来的 json 值, 一般跨域用到的两个方法为:$.ajax 和$.get ...

  3. 【旧文章搬运】KeUserModeCallback用法详解

    原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载=============== ...

  4. python使用ftplib做ftp操作

    ftplib是 Python的内置的一个标准模块,它提供了极强大的对FTP服务器的操作,通过它我们可以连接并操作FTP服务端,开始练习: 一.导入模块并进行连接 >>> from f ...

  5. UVaLive 3983 Robotruck (DP + 单调队列)

    题意:有n个垃圾,第i个垃圾坐标为(xi,yi),重量为wi,有一个机器人,要按照编号从小到大的顺序剑气所有的垃圾兵扔进垃圾桶,垃圾桶在原点, 每次总重量不能超过C,两点间距离为曼哈顿距离,求出最短的 ...

  6. HDU - 4535 ZZULI 1867: 礼上往来【错位排序】

    1867: 礼上往来 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 216  Solved: 65 SubmitStatusWeb Board Desc ...

  7. win10系统,mysql-installer-community-5.7.19.0.msi安装

    1.进入官网找到自己所需的安装包:https://dev.mysql.com/  ,路径:DOWNLOAD-->MYSQL Community Edition(GRL)-->MYSQL o ...

  8. ASP.NET Core Web API + Angular 仿B站(三)后台配置 JWT 的基于 token 的验证

    前言: 本系列文章主要为对所学 Angular 框架的一次微小的实践,对 b站页面作简单的模仿. 本系列文章主要参考资料: 微软文档: https://docs.microsoft.com/zh-cn ...

  9. 51nod 1031+斐波那契和杨辉三角的一些基础知识

    直接斐波那契... #include<stdio.h> #include<queue> #include<string.h> #include<iostrea ...

  10. HDU 3501【欧拉函数拓展】

    欧拉函数 欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) . 通式:φ(x)=x*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)-..(1- ...