searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

云服务中排查jvm常用的命令

2024-10-14 09:40:16
1
0
> 代码有时会存在性能问题,除了用基准测试来验证代码性能外。有时会和环境有关联,总结一下在各环境验证性能。
---
### 本地性能查看
> 本地性能查看比较简单,一下步骤就行
- 安装jprofiler
- 启动idea执行服务
- jprofiler可以看到对应进程,点击进去就行
- 切换到CPU views视图,开启cpu监控
- idea就可以开始启动服务,接收请求
- cpu views查看hot spots就可以看到各个类、方法的耗时并可以导出查看,定位性能
> 这一类适用于监控持续性服务接收大量请求处理情况的查看。如果只是单纯的检测代码性能,采用基准测试会更好一些。

---
### linux下查看性能
> linux查看性能依赖于jdk和shell相关的工具。
1. jdk工具介绍
  - jps:查看所有java进程,`jps`
  - jstat: 查看堆信息详情,`jstat -gcutil pid`
  - jinfo: 查看虚拟机参数,`jinfo -flag CMSInitiatingOccupancyFraction 2618`
  - jmap: 导出堆文件,`jmap -dump:format=b,file=Desktop/dump.bin 2618`,`jmap -histo 8225`
  - jhat: 堆分析工具,`jhat dump.bin`,生成http供查看
  - jstack: 查看线程堆栈,`jstack pid`
  - jstatd: 查看远程主机信息
  - jcmd: 命令行工具
  > 常用的是jmap查看堆文件,对于占用大量内存对象分析非常用。jstack查看有哪些对象耗用了大量cpu。
2. 运用`jstack`分析大量cpu占用进程
  - 使用`jps`得到java进程,然后使用`top -Hp pid`得到该进程下所有线程:如下
  ``` Bash
  top -Hp 16006
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  • 以上可以看到16049、16050、160513这3个占用最多,通过printf "%x\n" 16049可以获得16进制码3eb1
  • 然后jstack -l 16006 | grep -C5 '3eb1'可以获得该线程对应代码信息
  1. jstat可以查看gc相关信息
  • jstat -gc pid time 垃圾回收统计
  • jstat -gccapacity pid time堆内存统计
  • jstat -gcnew pid time新生代统计
  • jstat -gcnewcapacity pid time堆新生代内存统计
  • jstat -gcutil pid time总结垃圾回收统计

arthas使用

  • 搜索arthas即可下载zip包,然后解压
  • java -jar arthas-boot.jar即可启动,选择对应的jvm进程进入命令行界面
  • thread -n 5查看前五个消耗资源最多的线程,比jstack快很多
  • trace -n 10 net.opentsdb.utils.batch.HbaseBatchPut batchPut 统计该方法最近10次的耗时(特别有用,可查看详情)
  • tt -t -n 20 net.opentsdb.utils.batch.* batchPut 检测记录方法所有执行时间(比上一个更直观,只统计信息)
  • watch net.opentsdb.plugin.impl.LocalMetaCache increment "{params,target,returnObj}" -x 2 通过watch查看传入和传出信息,另类的debug
  • 其他命令通过help command查看即可

0条评论
作者已关闭评论
朱****鹏
3文章数
0粉丝数
朱****鹏
3 文章 | 0 粉丝
朱****鹏
3文章数
0粉丝数
朱****鹏
3 文章 | 0 粉丝
原创

云服务中排查jvm常用的命令

2024-10-14 09:40:16
1
0
> 代码有时会存在性能问题,除了用基准测试来验证代码性能外。有时会和环境有关联,总结一下在各环境验证性能。
---
### 本地性能查看
> 本地性能查看比较简单,一下步骤就行
- 安装jprofiler
- 启动idea执行服务
- jprofiler可以看到对应进程,点击进去就行
- 切换到CPU views视图,开启cpu监控
- idea就可以开始启动服务,接收请求
- cpu views查看hot spots就可以看到各个类、方法的耗时并可以导出查看,定位性能
> 这一类适用于监控持续性服务接收大量请求处理情况的查看。如果只是单纯的检测代码性能,采用基准测试会更好一些。

---
### linux下查看性能
> linux查看性能依赖于jdk和shell相关的工具。
1. jdk工具介绍
  - jps:查看所有java进程,`jps`
  - jstat: 查看堆信息详情,`jstat -gcutil pid`
  - jinfo: 查看虚拟机参数,`jinfo -flag CMSInitiatingOccupancyFraction 2618`
  - jmap: 导出堆文件,`jmap -dump:format=b,file=Desktop/dump.bin 2618`,`jmap -histo 8225`
  - jhat: 堆分析工具,`jhat dump.bin`,生成http供查看
  - jstack: 查看线程堆栈,`jstack pid`
  - jstatd: 查看远程主机信息
  - jcmd: 命令行工具
  > 常用的是jmap查看堆文件,对于占用大量内存对象分析非常用。jstack查看有哪些对象耗用了大量cpu。
2. 运用`jstack`分析大量cpu占用进程
  - 使用`jps`得到java进程,然后使用`top -Hp pid`得到该进程下所有线程:如下
  ``` Bash
  top -Hp 16006
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  • 以上可以看到16049、16050、160513这3个占用最多,通过printf "%x\n" 16049可以获得16进制码3eb1
  • 然后jstack -l 16006 | grep -C5 '3eb1'可以获得该线程对应代码信息
  1. jstat可以查看gc相关信息
  • jstat -gc pid time 垃圾回收统计
  • jstat -gccapacity pid time堆内存统计
  • jstat -gcnew pid time新生代统计
  • jstat -gcnewcapacity pid time堆新生代内存统计
  • jstat -gcutil pid time总结垃圾回收统计

arthas使用

  • 搜索arthas即可下载zip包,然后解压
  • java -jar arthas-boot.jar即可启动,选择对应的jvm进程进入命令行界面
  • thread -n 5查看前五个消耗资源最多的线程,比jstack快很多
  • trace -n 10 net.opentsdb.utils.batch.HbaseBatchPut batchPut 统计该方法最近10次的耗时(特别有用,可查看详情)
  • tt -t -n 20 net.opentsdb.utils.batch.* batchPut 检测记录方法所有执行时间(比上一个更直观,只统计信息)
  • watch net.opentsdb.plugin.impl.LocalMetaCache increment "{params,target,returnObj}" -x 2 通过watch查看传入和传出信息,另类的debug
  • 其他命令通过help command查看即可

文章来自个人专栏
探索时序数据库
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0