找出线上java应用中的哪段代码在大量耗费性能

from:http://chenjianjx.iteye.com/blog/1681681

你发现你的机器的cpu usage达到了100%,并且发现都是你的java应用导致的;但是,这个应用里具体哪段代码在这样吃性能呢?

以下来自一个同事的分享:

1. 先找出吃性能的线程: top -H -p pid,找出最耗性能的线程ID(最左列) 
2. 获得线程ID的16进制表示: printf ‘0x%x\n‘ 线程ID 
3. 然后生成一下jstack,比如 kill -3 pid 
4. 在生成的jstack里搜索线程ID的16进制表示即可

时间: 2024-08-11 05:59:06

找出线上java应用中的哪段代码在大量耗费性能的相关文章

怎样去找出线上hive或mapreduce运行慢的原因

hive mapreduce 都会转成java.所以要用的java分析工具.当看到map或reduce 阶段运行缓慢,我们去线上找到mapreduce的进程: 1. top 发现进程: 2. top -Hp 32486 找到进程中cpu或mem磁盘消耗最高的线程: 3.  用jstack主要用来查看某个Java进程内的线程堆栈信息: bin/jstack -F 26510 4. 可以用jmap查看堆内存使用,也可以dump出来 jmap -dump:format=b,file=46710.dum

Java Project打包,发布到Web Project下之后,运行Web Project出现找不到Java Project中资源的解决办法

要想使得web项目可以访问引用的Java Project中的资源,需要在Java Project中,将需要的IO操作的文件都放置到src目录下 法一 在Java Project中,有IO操作的类需要这样写 package cn.edu.test; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.Inp

c# winform中的一段代码赏析

我遇到了一个bug,是客户测试我们的产品,报出来的,而且有异常信息文件,这对于定位问题,很有帮助. 我找到源码看了下,bug还无法重现.于是我随便点点客户端,经过了几次调试,结果报出错误来了.客户端界面如下: 代码如下: 1 /// <summary> 2 /// 选定项发生改变事件 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name=&quo

工作过程中的一段代码

<td class="text-center">{{demand.LOW_PRICE}}-{{demand.HIGH_PRICE}}?</td> <td class="text-center">{{demand.LOW_SQUARE}}-{{demand.HIGH_SQUARE}}</td> <td class="text-center">{{demand.ROOM1}}-{{deman

Java应用中使用ShutdownHook友好地清理现场

在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.Java中得ShutdownHook提供了比较好的方案. JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用System.exit() 3)终端使用Ctrl+C触发的中断 4)系统关闭 5)使用Kill pid命令干掉进程

Java应用中使用ShutdownHook友好地清理现场(转)

在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.Java中得ShutdownHook提供了比较好的方案. JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用System.exit() 3)终端使用Ctrl+C触发的中断 4)系统关闭 5)使用Kill pid命令干掉进程

JVM调优之jstack找出最耗cpu的线程并定位代码

一.jstack使用总结 分析java进程,cpu占用高的问题 { 1.找到cpu占用高的进程pid 在top中,按组合键: shift + h ,会按cpu使用从高到低排序2.找到cpu占用高的线程pid top -Hp cpu高的进程pid, shift +h 查找最高线程,显示线程3.jstack 进程的pid | grep -A 线程pid的十六进制 #分析Java应用程序线程堆栈dump出来 printf "%x\n" cpu高的线程pid ==> 得到十六进制 pyt

java开发中截取上传文件的文件名和后缀名

java开发中截取上传文件的文件名和后缀名 /** * Return the extension portion of the file's name . * * @see #getExtension */ public static String getExtension(File f) { return (f != null) ? getExtension(f.getName()) : ""; } public static String getExtension(String f

Linux上从Java程序中调用C函数

原则上来说,"100%纯Java"的解决方法是最好的,但有些情况下必须使用本地方法.特别是在以下三种情况: 需要访问Java平台无法访问的系统特性和设备: 通过基准测试,发现Java代码比其他语言编写的等价代码慢得多: 其他语言编写的代码已经经过大量测试和调试,并且知道如何将其导出到所有的目标平台上. Java平台有一个用于和本地C.C++代码进行互操作的API,称为Java本地接口(JNI).下面将举例讨论Linux平台下的JNI编程. 1. 创建java类文件 创建一个native