====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的更多相关文章

  1. TDA - Thread Dump Analyzer (Java线程分析工具)

    TDA - Thread Dump Analyzer (Java线程分析工具)http://automationqa.com/forum.php?mod=viewthread&tid=2351 ...

  2. 性能分析之-- JAVA Thread Dump 分析综述

    性能分析之-- JAVA Thread Dump 分析综述       一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工 ...

  3. [转]Java Thread Dump 性能分析

    Java and Thread 一个 web 服务器使用几十到几百个线程来处理大量并发用户,如果一个或多个线程使用相同的资源,线程之间的竞争就不可避免了,并且有时候可能会发生死锁. Thread co ...

  4. Java / JVM CPU 利用率高 - 诊断方法 1 - Thread Dump 结合 OS 诊断

    IBM AIX Java 1. topas 命令定位 CPU 使用高的进程,比如下面 PID 614852 Name            PID  CPU% java         614852  ...

  5. thread dump

    最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下. 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Du ...

  6. 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 ...

  7. tomcat thread dump 分析【转载】

    前言 Java Thread Dump 是一个非常有用的应用诊断工具, 通过thread dump出来的信息, 可以定位到你需要了解的线程, 以及这个线程的调用栈. 如果配合linux的top命令, ...

  8. 如何抓取Thread Dump小结(转)

    当系统性能出现问题时,需要从各个方面来查看网络环境.主机资源.查看最经变更的代码等.如果是想从代码层面解决问题,那么最有效的方法就是查看相关dump文件.如果是使用IBM JDK(我默认你是在aix环 ...

  9. Thread Dump 和Java应用诊断(转)

    Thread Dump 和Java应用诊断 Thread Dump是非常有用的诊断Java应用问题的工具,每一个Java虚拟机都有及时生成显示所有线程在某一点状态的thread-dump的能力.虽然各 ...

随机推荐

  1. 27 mysql主从出现错误

    大多数的互联网应用场景都是读多写少,在发展过程中可能会出现读性能问题,在数据库层解决读性能问题:一主多从 下面是多主从结构 虚线箭头表示主备关系,A与A’互为主备,从库B,C,D指向主库A,一主多从的 ...

  2. [Python] Argparse module

    he recommended command-line parsing module in the Python standard library 1. Basic import argparse p ...

  3. 面试宝典:Java面试中最高频的那20%知识点!

    Java目前已经不仅仅是一门开发语言,而是一整套生态体系. 作为一个Java程序员,既是幸运的,也是不幸的.幸运的是我们有很多轮子可以拿过来用,不幸的是我们有太多的轮子需要学习. 但是,无论是日常工作 ...

  4. bower的安装和使用

    第一 下载node 网址https://nodejs.org/en/ 安装过程基本直接“NEXT”就可以了. 安装完成之后,我们先检测下NodeJS是否安装成功,cmd命令行中键入: node -v ...

  5. 20_java之集合Map

    01Map集合概述 A:Map集合概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同  a:Collection中的集合,元素是孤立 ...

  6. WePY 在手机充值小程序中的应用与实践

    wepyjs 发布了两个月了,中间经历了很多版本更新,也慢慢开始有一些用户选择 wepyjs 作为开发框架来开发小程序,比如一些线上小程序. 以及一些来自网上的 wepyjs 的相关资源: demo源 ...

  7. mongodb(三)

    索引详讲索引管理空间索引 for(var i = 0 ; i<200000 ;i++){ db.books.insert({number:i,name:i+"book"}) ...

  8. asp.net(c#)GridView实现鼠标悬停高亮显示

    搜索了一下,发现对于这种基本都使用girdview中的RowDataBound事件完成,下面看看网上提供的简单方法protected void GridView1_RowDataBound(objec ...

  9. 使用ssh client与bash scripts轻松管理多台主机

    当我们需要控制一个局域网中的很多台服务器时,一个简单的全局操作可能会被放大地异常繁琐,这时我们就会需要新的工具来快速完成这种工作. 我们将使用ssh客户端提供的一些工具来快速完成这一开发工作,我们的开 ...

  10. BLE 周边设备断开

    运行中,突然远程设备断开. TBluetoothLEDevice.IsConnected 为false了. 再次搜索,订阅, BluetoothLE1.SubscribeToCharacteristi ...