java 自带thread分析工具_java自带的jvm分析工具

news/2024/7/7 21:00:36

这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了。上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈。

1.jps

类似ps -ef|grep java 显示java进程号

或者pgrep java

2.jstack

打印jvm内存的堆栈信息,打印出来的结果类似

2010-04-21 20:10:51

Full thread dump Java HotSpot(TM) Server VM (10.0-b23 mixed mode):

“RMI TCP Connection(idle)” daemon prio=10 tid=0x08f7a000 nid=0x1928 waiting on condition [0x4b234000..0x4b2350a0]

java.lang.Thread.State: TIMED_WAITING (parking)

at sun.misc.Unsafe.park(Native Method)

– parking to wait for <0x68ec3430> (a java.util.concurrent.SynchronousQueue$TransferStack)

at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)

at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)

at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)

at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)

at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:944)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906)

at java.lang.Thread.run(Thread.java:619)

“Attach Listener” daemon prio=10 tid=0x08a08800 nid=0x18e4 runnable [0x00000000..0x4b142068]

java.lang.Thread.State: RUNNABLE

“recvMsgTP-1_sharereport_groupId_refund_[daily]-33040763-3-thread-10” prio=10 tid=0x08f3d400 nid=0x2985 waiting on condition [0x4b192000..0x4b192fa0]

java.lang.Thread.State: WAITING (parking)

at sun.misc.Unsafe.park(Native Method)

– parking to wait for <0x6af53cd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)

at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)

at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)

at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)

at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906)

at java.lang.Thread.run(Thread.java:619)

这样我们可以根据打印结果,看到现在哪些线程在运行,哪些在等待, 进而再找到线程等待执行的原因,从而分析出程序执行变慢的原因。

3.jstat -gcutil

对java 垃圾回收信息的统计,这样我们可以得到垃圾回收是否正常,full GC的执行时间和频率是否正常等。

S0 S1 E O P YGC YGCT FGC FGCT GCT

8.34 0.00 53.24 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.54 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.93 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.93 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.93 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.97 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.98 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.98 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 53.98 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 54.01 13.14 51.77 74 7.596 28 25.099 32.695

8.34 0.00 54.40 13.14 51.77 74 7.596 28 25.099 32.695

后面加T表示的是Time 执行时间,单位是秒

YGC FGC 分别是young GC和Full GC执行的次数。

4.jinfo – flags

可以查询java运行的参数设置

Attaching to process ID 21982, please wait…

Debugger attached successfully.

Server compiler detected.

JVM version is 10.0-b23

-Dprogram.name=run.sh -Xms1024m -Xmx1024m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:PermSize=96m -XX:MaxPermSize=96m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Xdebug -Xrunjdwp:transport=dt_socket,address=18787,server=y,suspend=n -Djava.net.preferIPv4Stack=true

5.jmap

-histo

打印出java中的对象信息,包括实例个数,字节大小和完整类名。

num #instances #bytes class name

———————————————-

1: 660495 66381608 [C

2: 134119 34894408 [B

3: 73441 30779672 [I

4: 670401 16089624 java.lang.String

5: 125062 15547312

6: 427296 13673472 java.util.TreeMap$Entry

7: 328585 13143400 java.util.concurrent.ConcurrentHashMap$EntryIterator

8: 125062 10010904

9: 132205 8504792 [Ljava.lang.Object;

10: 173806 7883528

这些命令后面都要加上java进程号。


http://lihuaxi.xjx100.cn/news/236461.html

相关文章

型网站的架构设计问题----大型高并发高负载网站的系统架构

随着中国大型IT企业信息化速度的加快&#xff0c;大部分应用的数据量和访问量都急剧增加&#xff0c;大型企业网站正面临性能和高数据访问量的压力&#xff0c;而且对存储、安全以及信息检索等等方面都提出了更高的要求…… 本文中&#xff0c;我想通过几个国外大型IT企业及网站…

微信小程序之授权登录的实现(附完整源码)

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;由于微信官方修改了 getUserInfo 接口&#xff0c;所以现在无法实现一进入微信小程序就弹出授权窗口&#xff0c;只能通过 button 去触 发。官方连接&#xff1a;点击打开链接 1.实现思路 自己写一个微信…

32位java 最大内存_【答疑系列】为什么32位系统只支持最大4G内存?

这个问题一直都有同学问到&#xff0c;算是提问次数最多的问题之一了。32位是什么现在主流的操作系统都是64位的&#xff0c;早期存在32位操作系统&#xff0c;相信大家也都有所听闻&#xff0c;其实&#xff0c;在更早之前&#xff0c;还有16位、8位的&#xff0c;这里就不展开…

什么是POM maven

POM是项目对象模型(Project Object Model)的缩写&#xff0c;下面援引一下百度百科中对于POM的解释 定义 Maven是以项目为中心的设计。POM是Maven对一个单一项目的描述。没有POM的话&#xff0c;Maven是毫无用处的——POM是Maven的核心。是POM实现的并驱动了这种以模型来描述的…

9.8.6恢复系统数据库

系统数据库和用户数据库一样容易发生故障&#xff0c;所以确保它们得到足够的保护十分重 要。一般来说&#xff0c;恢复系统数据库时有两种选择。可以从备份还原&#xff0c;或者从头重建它们。我 强烈推荐备份还原方法&#xff0c;因为从头重建意味着有人量的工作要做。由于系…

QTP的那些事---页面弹出框的处理,页面等待加载的处理

处理方法&#xff1a;先判断父类对象是否存在&#xff0c;如果存在&#xff0c;判断相关的static文本对象是否存在&#xff0c;如果存在&#xff0c;则点击弹出框中的按钮即可&#xff1b; 例如如下的代码&#xff1a; 设置循环判断dialog对象是否存在&#xff0c;如果存在&…

java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算

时间互转代码片段&#xff1a;* 时间戳 转 时间 ** param beginDate* return* see [类、类#方法、类#成员]*/public static String timeStampToTime(String beginDate){SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date new Date(Long…

Docker镜像使用

当运行容器时&#xff0c;使用的镜像如果在本地中不存在&#xff0c;docker 就会自动从 docker 镜像仓库中下载&#xff0c;默认是从 Docker Hub 公共镜像源下载。 下面我们来学习&#xff1a; 1、管理和使用本地 Docker 主机镜像2、创建镜像列出镜像列表 我们可以使用 docker …