jstack

Java threads: interpreting thread states of a running JVM

偶尔善良 提交于 2019-12-03 17:36:56
A Java thread is always in one of the following ten states: NEW: Just starting up, i.e., in process of being initialized. NEW_TRANS: Corresponding transition state (not used, included for completness). IN_NATIVE: Running in native code. IN_NATIVE_TRANS: Corresponding transition state. IN_VM: Running in VM. IN_VM_TRANS: Corresponding transition state. IN_JAVA: Running in Java or in stub code. IN_JAVA_TRANS: Corresponding transition state (not used, included for completness). BLOCKED: Blocked in vm. BLOCKED_TRANS: Corresponding transition state. The unused state ( UNINITIALIZED ) has been

JAVA GC(Garbage Collection)及OOM那些事

亡梦爱人 提交于 2019-12-03 16:29:59
JAVA运行时内存区域 程序计数器 一块很小的内存空间 当前线程所执行的字节码的行号指示器 当前线程私有 不会出现OutOfMemoryError情况 java虚拟机栈 通常存放基本数据类型,对象引用(一个指向对象起始地址的引用指针或一个代表对象的句柄),reeturnAddress类型(指向一条字节码指令的地址) 线程私有,生命周期与线程相同 java方法执行的内存模型,每个方法执行的同时都会创建一个栈帧,存储局部变量表(基本类型、对象引用)、操作数栈、动态链接、方法出口等信息 StackOverflowError异常:当线程请求的栈深度大于虚拟机所允许的深度 OutOfMemoryError异常:如果栈的扩展时无法申请到足够的内存 本地方法栈 与虚拟机栈相似,主要为虚拟机使用到的Native方法服务,在HotSpot虚拟机中直接把本地方法栈与虚拟机栈二合一 和虚拟机栈一样可能抛出StackOverflowError和OutOfMemoryError异常。 Java堆(Java Heap) java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此区域的唯一目的就是存储对象实例。java堆是垃圾收集器管理的主要区域。java堆还可以细分为:新生代与老年代。再细一点有Eden空间、Form Survivor空间、To Survivor空间等。 可以通过-Xmx和

记一次dbcp数据库连接池问题分析

梦想的初衷 提交于 2019-12-03 14:48:21
最开始使用数据库连接池 DBCP 是在公司的项目中,使用 Spring+MyBatis 直接简单的设置了一些参数就拿来用了。因为配置的部分也是其他同事做好的,所以对于 DBCP 也没有深入了解过。 后来帮同学写一点服务器代码,没有用其他任何框架只是使用 DBCP 数据库连接池来管理数据库连接。在这个过程中发现程序直接执行到被挂起,但是程序并没有执行完。 我使用的dbcp数据库连接池的版本是1.x,下图是我依赖的包文件的示意图 图1 dbcp版本 下面的代码只是为了还原问题的情况的代码,这是比较糟糕的代码,请不要在实际中这样写。代码只是使用BasicDataSource获得连接,而不关闭连接。 import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; public class Start { private static BasicDataSource dbcp = new BasicDataSource(); static{ dbcp.setDriverClassName("com.mysql.jdbc.Driver"); dbcp.setUsername("tim"); dbcp.setPassword("123456");

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof

早过忘川 提交于 2019-12-03 10:48:27
前提概要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测。接下来的两个专题分别会讲VisualVM的具体应用。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。 一、 jps(Java Virtual Machine Process Status Tool) : 基础工具 实际中这是最常用的命令,下面要介绍的小工具更多的都是先要使用jps查看出当前有哪些Java进程,获取该Java进程的id后再对该进程进行处理。 jps主要用来输出JVM中运行的进程状态信息。语法格式如下: Java代码 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: Java代码

jdk内置工具jstack查询有问题代码(具体到哪一行)

走远了吗. 提交于 2019-12-03 10:16:40
1,编写死循环代码类JstackCase; 2,编译该类 3,放到linux系统,并运行 4,新建连接到linux,使用top命令:查看当期那CPU使用情况 5.找到CPU使用率较高的线程ID: 命令:ps p 16480 -L -o pcpu,pid,tid,time,tname,cmd 6.查看进程16480中的信息: 命令:jstack -l 2511> 2511.pid vi查看16480.pid文件: 代码: import java.util.concurrent.Executor;import java.util.concurrent.Executors;public class JstackCase{ public static Executor executor = Executors.newFixedThreadPool(5); public static Object lock = new Object(); public static void main(String[] args){ new Thread(new Task(),"asd").start(); } static class Task implements Runnable{ @Override public void run(){ synchronized(lock){ calculate()

java jstack tool insufficient memory or insufficient privilege to attach

匿名 (未验证) 提交于 2019-12-03 02:59:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am really confused about: In my windows 2008r2, I have a windows service, in fact it's a java progress running as SYSTEM user. Now, I use Jstack rawly to the the service. But it occur error : insufficient memory or insufficient privilege to attach But if I use Jstack's options -F , it can work finely. I view the jdk's source, It uses a class BugSpotAgent to finish above. I want to know the root cause I can't use Jstack rawly, is it the SYSTEM user privilege problem? I also have try to use PsExec.exe (a tool) to run my Jstack rawly(That

jstack: Target process not responding

匿名 (未验证) 提交于 2019-12-03 01:34:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am running Ubuntu server edition and I wanted to take a thread dump of Tomcat. So, I first tried to find out which PID tomcat uses: $ jps -l 5809 sun.tools.jps.Jps But it's not there? So, I used top instead and found out the PID 5730. Then I called jstack to get the thread dump: $ sudo jstack -l 5730 5730: Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can be used when the target process is not responding What's going on? :-( I already tried to export CATALINA_TMPDIR as described in Jstack

jstack使用

匿名 (未验证) 提交于 2019-12-02 23:59:01
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11484664.html 1.查看当前应用占用的PID,比如41565 1 ps - ef | grep $ { application_name } 2. 查看进程内部线程占用情况 1 top - H - p 41565 3. 找出占用CPU最多的线程ID,比如41575,打印出对应的16进制号,比如:a267 1 printf "%x\n" 41575 4. 通过jstack打出当前JVM线程快照信息 1 jstack 41565 > ~/ jstack . txt 5. 打开jstack.txt,使用 a267 关键字进行分析定位 Reference https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html 来源:博客园 作者: 哈天奇不奇 链接:https://www.cnblogs.com/agilestyle/p/11484664.html

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解 转至元数据结尾

不打扰是莪最后的温柔 提交于 2019-12-02 18:16:06
OutOfMemoryError,内存不足 内存容量 螺纹死锁 锁争用(锁争用) Java进程消耗CPU过高 A,jps(Java虚拟机进程状态工具) jps主要用于输出JVM中运行的进程状态信息。语法格式如下: jps [选项] [主机ID] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: -q不输出类名,Jar名和纳入主方法的参数 -m输出预设主方法的参数 -l输出main类或Jar的全限名 -v输出JVM的参数 例如下面: root @ ubuntu:/#jps -m -l 2458 org.artifactory.standalone.main.Main /usr/local/artifactory-2.2.5/etc/jetty.xml 29920 com.sun.tools.hat.Main主端口9998 /tmp/dump.dat 3149 org.apache.catalina.startup.Bootstrap启动 30972 sun.tools.jps.Jps -m -l 8247 org.apache.catalina.startup.Bootstrap启动 25687 com.sun.tools.hat.Main-端口9999 dump.dat 21711 mrf-center.jar B,jstack

CPU 使用率 100% 怎么办

无人久伴 提交于 2019-12-02 05:04:48
CPU 使用率 100% 怎么办 独家号 码上实战 作者 flyhero 原文链接 工作中遇到CPU使用率100%,不要慌,一起来找出原因并fix掉它。 记住这里大致流程,当线上突然遇到时,也不必手足无措。 总体流程 找出CPU比较高的进程PID top 打印该进程下线程的CPU占用比较高的tid top -Hp {PID} 将该tid进行16进制转换id printf "%x\n" {tid} 打印线程的堆栈信息 jstack {PID} |grep {id} -A 100 当然这四步的执行需要时间,但我们可以将这几步写成shell脚本来执行。 安装JDK命令行工具 服务器上安装的OpenJDK ,是否有常用的命令行工具? 验证是否安装 [root@op-system ~]$ jstack -h Usage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> (to connect to a hung process) jstack [-m] [-l] <executable> <core> (to connect to a core file) jstack [-m] [-l] [server_id@]<remote server IP or hostname> (to