取得MapReduce的Thread Dump
====2016/5/20:
经过上级指示,为了MR性能调优,需要截取MR的服务器的线程堆栈(Thread Dump)
战友介绍的方法是这样的:
①、使用ps命令【ps -ef | grep java】过滤出所有的Java进程(毕竟MapReduce是运行在JVM中的)
②、从Java进程中找到MR的运行进程的PID(Process ID)
③、使用kill -3 <pid> 的命令来获取Thread Dump。获取之后的标准输出日志stdout中。
同事的介绍还是比较详细的,按照这个方法尝试了一下,确实是能取得Thread Dump。
但是呢,实际操作的过程中有两个问题,给我带来了很大的困扰:
问题①、Java的进程太多了,用肉眼去查找MR的进行太困难了。经常没等找到,进程就已经结束了。
导致kill -3 <pid>的时候,就会提示下面的信息。
问题②、即使找到了MR进程的PID,使用kill -3 命令也不是每次都能成功取得Thread Dump。
※使用ps -ef | grep java的结果如下图:看这个图是比较心疼自己的眼睛的。
针对问题①,下午进行了一下改进,就是grep的时候,不去用java的关键字,而是使用MR的Job ID去Grep。
JobId可以通过一下两个途径来取得:
途径1:Shell命令行
在使用hadoop jar <jar名> <类名>运行某个Jar包的时候,这个Job被接受并开始运行时,会分配一个JobID,这个ID在控制台上会提示出来。
途径2:Web页面
所有的Job都会在Web页面上表示出来,其中第一列的应用管理器的ID的后半段是和JobID一样的,使用这个也可以。
然后使用ps -ef | grep <job id>来查找和这个Job相关的所有进程。如下图所示:
小试身手之后,果然查找MR的进程方便了很多。甚是欣慰。。。
不过上面的问题②,ThreadDump不能每次成功的问题仍然困扰着我。而且到下午之后,既然没有1次能够成功取得Thread Dump。
====2016/5/21
今天是周六,推掉一些生活上的预约(苦逼码农的常态),果断过来加班。
走在路上,满脑袋都是问题②的事情,没有任何头绪。后来想起昨天领导随意说的一句话:是不是你Kill的进程不正确?
感觉很是有道理嘛,为什么不试试呢?迫不及待的来到公司,打开电脑,尝试了一下对MR的不同的进程进行kill。
结果,日了狗了,竟然真的是有的进程无法取得Thread Dump,而有的进程就可以。悲催的同时,见到一丝曙光也是比较开心的。
那么,问题来了,这些进程之间有什么区别,什么进程可以取得Thread Dump呢?
经过一番调查之后,得到如下结论:
--------
系统在运行每个进程时都会关联几个号,分别为pid、ppid、uid、euid。
进程的pid为运行进程时,系统自动分配的,用于唯一标识此进程的一个整数。进程的ppid就是进程的父进程的pid
--------
也就是说进程之间是有父子关系的。只有找到正确的进行才可以取得到dump文件。
过程如下所示: ※蓝色部分为子进程,红色为父进程。
stdout中的内容如下所示。
看到下面的内容,有种想哭的感觉。。。。。
====总结
①、使用ps命令查看进程的pid的时候,可以活用grep关键字。以缩减范围
②、可以使用kill -3 <pid>来发送消息,从而达到截取Thread Dump的目的。
③、kill -3 一定要对正确的进行使用。切记切记。
取得MapReduce的Thread Dump的更多相关文章
- TDA - Thread Dump Analyzer (Java线程分析工具)
TDA - Thread Dump Analyzer (Java线程分析工具)http://automationqa.com/forum.php?mod=viewthread&tid=2351 ...
- 性能分析之-- JAVA Thread Dump 分析综述
性能分析之-- JAVA Thread Dump 分析综述 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工 ...
- [转]Java Thread Dump 性能分析
Java and Thread 一个 web 服务器使用几十到几百个线程来处理大量并发用户,如果一个或多个线程使用相同的资源,线程之间的竞争就不可避免了,并且有时候可能会发生死锁. Thread co ...
- Java / JVM CPU 利用率高 - 诊断方法 1 - Thread Dump 结合 OS 诊断
IBM AIX Java 1. topas 命令定位 CPU 使用高的进程,比如下面 PID 614852 Name PID CPU% java 614852 ...
- thread dump
最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下. 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Du ...
- Performing a thread dump in Linux or Windows--reference
Linux/Unix 1. Find the Java/Tomcat process id. % ps ax | grep java You should see output like this 1 ...
- tomcat thread dump 分析【转载】
前言 Java Thread Dump 是一个非常有用的应用诊断工具, 通过thread dump出来的信息, 可以定位到你需要了解的线程, 以及这个线程的调用栈. 如果配合linux的top命令, ...
- 如何抓取Thread Dump小结(转)
当系统性能出现问题时,需要从各个方面来查看网络环境.主机资源.查看最经变更的代码等.如果是想从代码层面解决问题,那么最有效的方法就是查看相关dump文件.如果是使用IBM JDK(我默认你是在aix环 ...
- Thread Dump 和Java应用诊断(转)
Thread Dump 和Java应用诊断 Thread Dump是非常有用的诊断Java应用问题的工具,每一个Java虚拟机都有及时生成显示所有线程在某一点状态的thread-dump的能力.虽然各 ...
随机推荐
- CF - A. Writing Code
本博客参考自这里 不是我说,我就觉得这题题目贼鸡儿难懂 所以只能看看别的博客如何解释这题题目的意思咯. 有n个程序,这n个程序运作产生m行代码,但是每个程序产生的BUG总和不能超过b,给出每个程序产生 ...
- Ubuntu Server如何配置SFTP(建立用户监狱)
Ubuntu Server如何配置SFTP(建立用户监狱) SSH File Transfer Protocol是一个比普通FTP更为安全的文件传输协议.(参考资料:http://en.wikip ...
- Python 小知识点(9)--反射
通过字符串映射或修改程序运行时的状态.属性.方法.有如下四个方法 1.hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法 2.getattr( ...
- 函数~匿名方法~lambda的逐渐过渡思想
前提:基于委托实现 (1)使用函数名称 delegate void Printer(string s);//(1)申明委托 static void Main(string[] args) { //(3 ...
- GeoServer之styles定制
GeoServer之styles定制 GeoServer中styles类似于css,将地图中的点线面画出一层皮肤,引用在图层上.不同的地方在于.GeoServer中的styles用的是sld语法,也就 ...
- C# WinForm ProgressBar垂直显示进度和从右向左显示进度
1. 尝试将ProgressBar的RightToLeft属性设置为System.Windows.Forms.RightToLeft.Yes,同时将RightToLeftLayout属性设置为true ...
- SVN用命令行更换本地副本IP地址
1.运行svn info现连的svn信息 2.运行svn switch --relocate https://原来的地址 https://改过后的地址. svn help switch 查看switc ...
- excel表格的应用之简单的数据可视化
上面的为我们需要的手长与身高的数据 上面的是我们的数据可视化之后的点状图 我们需要先选中我们需要的数据表 然后点击我们插入中的推荐图表的选项 点开后会弹出这个界面 然后我们只需要选择char进行插入就 ...
- 【297】IDL 过程、函数&关键字参数
目录: 一.Procedure 1.1 基本说明&定义 1.2 关键字参数 二.Function 2.1 基本说明&定义 2.2 关键字参数 参考:IDL中函数中的带有关键字的参数的使 ...
- cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题
http://blog.csdn.net/eguid_1/article/details/73611781