jcmd的简要分析命令

jcmd,简要,分析,命令 · 浏览次数 : 15

小编点评

**jcmd 简要分析命令** ```bash jcmd $pid Thread.printjcmd ``` **分析结果** ``` **************堆栈里面的进程前缀分类******************** java.lang.Thread.State@522088854354092400: running **************堆栈里面的进程状态分类******************** java.lang.Thread.State@522088854354092400: waiting **************locked的资源分类******************** java.lang.Thread.State@522088854354092400: locked ``` **说明** * `$pid` 是要分析的进程的进程号。 * `Thread.printjcmd` 是一个用于打印线程的 jcmd 命令。 * `$now` 是一个日期和时间字符串。

正文

jcmd的简要分析命令


背景

端午加班一整天. 回到家同事让他们抓取一下堆栈信息好进行分析
连上VPN后就进行了一下处理.
自己简单看了下堆栈的总数等信息. 

同事使用工具进行了分析. 我这边其实下过很多工具,但是都荒废了
就想,自己这些时间一直学习shell, 可以手工写一个简单分析.这样也有主语问题的快速分析与判断
晚上还顺便看了扣丁的微信公众号,学到了些新的知识点, 也准备记录一下. 感谢前人的努力贡献.

进行堆栈抓取和简要分析

now=`date +%Y%m%d%H%M`
jcmd `jcmd |grep caf |awk '{print $1}'` Thread.print  >${now}.log
echo "**************堆栈里面的进程前缀分类********************" >> ${now}.analyzer.log
cat ${now}.log |grep java.lang.Thread.State -B 1 |grep -v java.lang.Thread.State: |grep -v '\-\-' |grep ^'"' |awk '{print $1}' |awk -F "-" '{print $1}' |sort |uniq -c |sort -k1hr >>${now}.analyzer.log
echo "**************堆栈里面的进程状态分类********************" >> ${now}.analyzer.log
cat ${now}.log |grep java.lang.Thread.State|awk -F ":" '{print $2}' |sort |uniq -c  |sort -k1hr >> ${now}.analyzer.log
echo "**************locked的资源分类********************" >> ${now}.analyzer.log
cat ${now}.log|grep -i locked |awk -F "(" '{print $2}'|sort |uniq -c |sort -k1hr >> ${now}.analyzer.log

说明

其实抓取的方式很简单 就是 jcmd $pid Thread.print
jcmd 其实是JDK7 增加的一个总调命令, 他可以实现技术又有的java性能相关命令的工作. 

这里不展开讲, 其实就是先抓取JVM的堆栈信息
先按照线程名字的最前面的前缀进行排序和分析并且转储到一个日期前缀的文件中

然后分析进程的状态信息. 然后也转储到相同文件中. 

最后在看一下 locked的到底是锁到了哪些资源

其实命令可以随便加. 这个都是可以的. 

其他学习

今天晚上顺便学习了 http-nio的进程的分类和pool进程的区别等. 感觉还是有收获的. 这里想总结一下:
1. http和pool其实都是线程池, pool也不是连接池的概念, 这里需要着重清晰
   http主要进行网络交互相关的现场池, 他针对网络做了大量的调优工作.  pool更趋向于普通任务或者是一次性动作类的线程池.
   pool更加通用. http更加专注于http网络请求处理. 

2. http-nio 仔细看其实有三类. 一类是accept 一类是poller, 最多的一类其实就是exec的进程
   accept 顾名思义就是监听接收client请求的线程, 一般只有一个. 
   poller 线程一般用于 对accept接收管理的线程进行处理, 也可以进行redirect, 需要exec处理的就提交给jvm内部处理. 
   exec 的线程一般就是干活的了. 产品里面的max和min的线程数一般限制的就是这个线程池数为主 

3. 今天还学了一个这样的参数: maxKeepAliveRequests
   其实这个参数是tomcat 学习 apache 而来的一个参数. 
   他的含义是一个tcp连接上面最多可以复用的请求数, 
    如果设置为1 就是http1.0 没有任何复用,一个http一个tcp请求
    不设置时默认值是100, 他在连续处理了100个请求后就会强制断掉tcp连接, 四步挥手后重新三步握手建议tcp连接.
    设置为 -1 就不在进行max值的限制, 可以尽可能多的复用tcp连接. 
    如果是单用户或者是 很多负载均衡的场景, 我理解是可以将这个数值改大的. 

与jcmd的简要分析命令相似的内容:

jcmd的简要分析命令

# jcmd的简要分析命令 ## 背景 ``` 端午加班一整天. 回到家同事让他们抓取一下堆栈信息好进行分析 连上VPN后就进行了一下处理. 自己简单看了下堆栈的总数等信息. 同事使用工具进行了分析. 我这边其实下过很多工具,但是都荒废了 就想,自己这些时间一直学习shell, 可以手工写一个简单分

[转帖] JVM诊断命令jcmd介绍

https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

[转帖] JVM诊断命令jcmd介绍

https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

[转帖] JVM诊断命令jcmd介绍

https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

[转帖] JVM诊断命令jcmd介绍

https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

[转帖] JVM诊断命令jcmd介绍

https://www.cnblogs.com/codelogs/p/16535451.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jst

jcmd的简单总结

jcmd的简单总结 背景 自从2019年公司转向java技术路线. 一直断断续续的在学习java相关的技术内容. 但是总感觉学的不是很深入. 这周比较累.也不想在学新东西了. 所以想着再总结一下jcmd相关的内容. 希望能够记住相关命令, 不需要在每次都百度 简要说明 jcmd等命令操作时需要能够a

[转帖]查看docker中运行的JVM参数问题及解决方法

方法一、jcmd命令: 1、jps获取java的线程id 2、jcmd pidVM.flags获取 51152:-XX:CICompilerCount=3 -XX:InitialHeapSize=526385152 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=

[转帖]jcmd命令详解

1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具。 jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程

[转帖]jcmd命令详解

1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具。 jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程