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的简要分析命令的更多相关文章

  1. MapReduce启动的Map/Reduce子任务简要分析

      对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程.   ...

  2. hidraw设备简要分析

    关键词:hid.hidraw.usbhid.hidp等等. 下面首先介绍hidraw设备主要用途,然后简要分析hidraw设备驱动(但是不涉及到相关USB/Bluwtooth驱动),最后分析用户空间接 ...

  3. Activity源码简要分析总结

    Activity源码简要分析总结 摘自参考书籍,只列一下结论: 1. Activity的顶层View是DecorView,而我们在onCreate()方法中通过setContentView()设置的V ...

  4. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  5. Nginx日志常用分析命令汇总 (转)

    三.常用日志分析命令 1.总请求数 1 wc -l access.log |awk '{print $1}' 2.独立IP数 1 awk '{print $1}' access.log|sort |u ...

  6. apache日志文件详解和实用分析命令

    apache日志文件每条数据的请意义,以及一些实用日志分析命令. 一.日志分析  如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error ...

  7. Google发布SSLv3漏洞简要分析报告

    今天上午,Google发布了一份关于SSLv3漏洞的简要分析报告.根据Google的说法,该漏洞贯穿于所有的SSLv3版本中,利用该漏洞,黑客可以通过中间人攻击等类似的方式(只要劫持到的数据加密两端均 ...

  8. 【转】getopt分析命令行参数

    (一) 在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如: ./a.out -a1234 -b432 -c -d 程序会根据读取的参数执行相应的操作,在C语言中,这个 ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET ...

  10. getopt 分析命令行参数 -n -t 1

    在Linux中,我们常常用到 ls -l 等等之类带有选项项的命令,下面,让我们用C++来实现该类似的命令. 在实现之前,首先,我们来介绍一下一个重要函数:getopt() 表头文件 #include ...

随机推荐

  1. cookie和session的一些疑惑以及ai解答

    我: 那么当浏览器关闭的时候,当再次访问这个地址的时候,为什么之前设置的cookie没有被删除掉?而且按照你说的这次可能会生成一个新的sessionID,那么cookie里面的其他数据,它是如何获取上 ...

  2. 一些JavaSE学习过程中的思路整理(二)(主观性强,持续更新中...)

    目录 一些JavaSE学习过程中的思路整理(二)(主观性强,持续更新中...) 将一个子类的引用对象赋值给超类的对象(多态) 抽象方法和抽象类 简单概括以下包装器类的作用 面向接口编程时的一些细节 f ...

  3. CodeForces 1141F2 贪心 离散化

    CodeForces 1141F2 贪心 离散化 题意 给定一个序列,要求我们找出最多数量的不相交区间,每个区间和都相等. 思路 一开始没有头绪,不过看到 \(n \le 1500\) 后想到可以把所 ...

  4. Nacos 本地单机版部署步骤和使用

    本系列是 Spring Cloud 微服务实战系列教程.之前在 <Spring Cloud Eureka 入门 (一)服务注册中心详解> 聊过 Spring Cloud Eureka.那今 ...

  5. 实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联

    摘要:用实践案例带你掌握云连接CC如何实现跨区域多VPC与线下IDC Server互联. [背景] 当前在华为云华南.华东.香港region均部署了业务,同时在华南region通过云专线与线下IDC打 ...

  6. 数仓集群管理:单节点故障RTO机制分析

    摘要:大规模分布式系统中的故障无法避免.发生单点故障时,集群状态和业务是如何恢复的? 本文分享自华为云社区<GaussDB (DWS) 集群管理系列:单节点故障RTO机制分析(集群状态恢复篇)& ...

  7. MyBatis batchInsert 批量插入数据

    mybatis 是一个 Java 的持久层框架,它支持定制化 SQL.存储过程以及高级映射.通过 MyBatis,开发者可以直接编写原生态 SQL,避免了 JDBC 代码的繁琐. 如何在 MyBati ...

  8. CentOS 7上安装 Jenkins 2.346 -- yum 方式

    CentOS 7上安装 Jenkins -- yum 方式 装插件太麻烦了,最后选择了 装JAVA 11,安装最版本 Jenkins https://mirrors.jenkins.io/war/ 开 ...

  9. 多线程 ThreadPoolTaskExecutor 应用

    1.如何判断线程池所有任务是否执行完毕 package com.vipsoft.web; import org.junit.jupiter.api.Test; import org.slf4j.Log ...

  10. Profile Config 多环境不同配置

    应用场景如:我们可以在开发.测试环境中,启用 Swagger,在生产环境中不启用 package com.vipsoft.web.boot.config; import springfox.docum ...