Windows上的Java线程CPU分析

本文将为您提供一个教程,介绍如何在Windows OS上快速查明Java线程贡献者与CPU严重问题有关。 Windows与Linux,Solaris和AIX等其他操作系统一样,使您可以在进程级别监视CPU利用率,还可以监视在进程中执行任务的单个线程。

在本教程中,我们创建了一个简单的Java程序,使您可以逐步学习该技术。

故障排除工具

本教程将在下面使用以下工具:

  • Windows Process Explorer (查明高CPU线程贡献者)
  • JVM线程转储(用于代码级别的线程关联和根本原因分析)

高CPU模拟器Java程序

下面的简单程序只是循环并创建新的String对象。 这将使我们能够按线程分析执行此CPU。 我建议您将其导入您选择的IDE中,例如Eclipse并从那里运行它。 执行Windows计算机后,应立即观察到CPU数量的增加。

package org.ph.javaee.tool.cpu;/*** HighCPUSimulator* @author Pierre-Hugues Charbonneau* http://javaeesupportpatterns.blogspot.com**/
public class HighCPUSimulator {private final static int NB_ITERATIONS = 500000000;// ~1 KB data footprintprivate final static String DATA_PREFIX = "datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata
datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatad
atadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata
datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata
datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata
datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata
datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata
datadatadatadatadatadatadata";/*** @param args*/public static void main(String[] args) {System.out.println("HIGH CPU Simulator 1.0");System.out.println("Author: Pierre-Hugues Charbonneau");System.out.println("http://javaeesupportpatterns.blogspot.com/");try {for (int i = 0; i < NB_ITERATIONS; i++) {// Perform some String manipulations to slowdown and expose looping process...String data = DATA_PREFIX + i;                }} catch (Throwable any) {System.out.println("Unexpected Exception! " + any.getMessage()+ " [" + any + "]");}System.out.println("HighCPUSimulator done!");}}

步骤#1 –启动流程浏览器

Process Explorer工具以可视方式动态显示CPU使用情况。 这对于实时分析非常有用。 如果您需要每个线程在CPU上的历史数据,则还可以将Windows perfmon与%Processor Time&Thread Id数据计数器一起使用。 您可以从下面的链接下载Process Explorer:
http://technet.microsoft.com/zh-cn/sysinternals/bb896653

在我们的示例中,您可以看到在执行示例程序之后,Eclipse javaw.exe进程现在使用了约25%的CPU利用率。

步骤#2 –启动Process Explorer的Threads视图

下一步是显示javaw.exe进程的“线程”视图。 只需右键单击javaw.exe进程,然后选择“属性”。 将根据以下快照打开“线程”视图:

  • 第一列是线程ID(十进制格式)
  • 第二列是每个线程使用的CPU利用率%–
  • 第三列也是另一个计数器,指示线程是否正在CPU上运行

在我们的示例中,我们可以看到罪魁祸首是使用约25%CPU的线程ID#5996。

步骤#3 –生成JVM线程转储

此时,Process Explorer将不再有用。 目的是查明一个或多个Java线程,这些线程消耗了我们实现的大部分Java进程CPU利用率。 为了进入分析的下一个层次,您将需要捕获JVM线程转储。 这将使您能够将线程ID与线程堆栈跟踪相关联,从而可以查明这种处理类型正在消耗如此多的CPU。
JVM线程转储的生成可以通过几种方式完成。 如果您使用的是JRockit VM,则可以按照以下示例使用jrcmd工具:

获得线程转储数据后,只需搜索线程ID并找到您感兴趣的线程堆栈跟踪。
在我们的示例中,从Eclipse触发的线程“主线程”被暴露为主要罪魁祸首,而这正是我们想要演示的。

Main Thread id=1 idx=0x4 tid=5996 prio=5 alive, native_blockedat org/ph/javaee/tool/cpu/HighCPUSimulator.main(HighCPUSimulator.java:31)at jrockit/vm/RNI.c2java(IIIII)V(Native Method)-- end of trace

步骤#4 –分析罪魁祸首的线程堆栈跟踪并确定根本原因

此时,您应该具备进行根本原因分析所需的一切。 您将需要检查每个线程堆栈跟踪,并确定要处理的问题类型。 最后一步通常是您将花费大部分时间的地方,问题可能很简单(例如无限循环),也可能很复杂(例如与垃圾回收相关的问题)。

在我们的示例中,线程转储确实揭示了CPU的高CPU数量来自第31行附近的示例Java程序。正如所料,它确实揭示了我们为本教程专门设计的循环条件。

for (int i = 0; i < NB_ITERATIONS; i++) {// Perform some String manipulations to slowdown and expose looping process...String data = DATA_PREFIX + i;                }

我希望本教程可以帮助您了解如何分析和帮助查明Windows OS上Java CPU问题的根本原因。 请继续关注更多更新,下一篇文章将为您提供Java CPU故障排除指南,包括如何处理最后的分析步骤以及常见问题模式。

参考: Java EE支持模式和Java教程博客中的JCG合作伙伴 Pierre-Hugues Charbonneau在Windows上的Java线程CPU分析 。


翻译自: https://www.javacodegeeks.com/2012/04/java-thread-cpu-analysis-on-windows.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask 继承模版的基本使用1

转载于:https://www.cnblogs.com/wanghaonull/p/6399492.html

计算机日期函数公式大全,Excel技巧: 根据日期汇总月份的计算公式

在许多情况下&#xff0c;Excel记录的数据将按照发生的日期进行记录&#xff0c;但是根据日期记录的数据将非常分散&#xff0c;通常需要每月汇总相应的数据. 在这种情况下&#xff0c;您需要将日期转换为月份. 本文介绍了如何使用SUMPRODUCT函数按月汇总数据.公式提示在SUMPRO…

coverity代码检测工具介绍_微服务测试之静态代码扫描

静态代码扫描为整个发展组织增加价值。无论您在开发组织中发挥的作用如何&#xff0c;静态代码扫描解决方案都具有附加价值&#xff0c;拥有软件开发中所需要的尖端功能&#xff0c;最大限度地提高质量并管理软件产品中的风险。背景微服务架构模式具有服务间独立&#xff0c;可…

ADF:在任务流终结器中支持bean作用域

介绍 当我们需要在任务流消失之前完成一些最终工作&#xff08;干净的资源&#xff0c;紧密的连接等&#xff09;时&#xff0c;这是使用任务流终结器的非常普遍的推荐做法。 和往常一样&#xff0c;我们使用在任务流中声明的托管bean。 托管Bean可以具有不同的范围-请求&#…

linux中匿名用户怎么登陆_南京课工场IT培训:Linux中vsftpd服务配置(匿名,用户,虚拟用户)...

vsftpd概述vsftpd 是“very secure FTP daemon”的缩写&#xff0c;安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字&#xff0c;它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面&#xff0c;是一个完全免费的、开放源代码的ftp服务…

Java High CPU故障排除指南–第1部分

本文是该系列的第1部分&#xff0c;它将为您提供有关如何进行故障排除和识别Java高CPU问题根本原因的综合指南。 该指南也适用于独立的Java程序&#xff0c;但旨在帮助涉及Java EE企业日常生产支持的个人。 它还将包括最常见的高级CPU问题列表以及高级解决方案。 生产问题解决…

php进程间通信 yoc_swoole的process模块创建和使用子进程

swoole中为我们提供了一个进程管理模块 Process&#xff0c;替换PHP的 pcntl 扩展&#xff0c;方便我们创建进程&#xff0c;管理进程&#xff0c;和进程间的通信。swoole提供了2种进程间的通信&#xff1a;1、基于 unix socket 的管道 pipe。2、基于 sysvmsg 的消息队列。我们…

mysqls压力测试怎么用_阿里研究员:测试稳定性三板斧,我怎么用?

阿里妹导读&#xff1a;如何治理测试稳定性问题&#xff1f;很多人会说&#xff1a;环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的&#xff0c;而不是方法论和理论体系层面的。今天&#xff0c;阿里研究员郑子颖来说说测试…

HttpModule与HttpHandler详解

ASP.NET对请求处理的过程&#xff1a;当请求一个*.aspx文件的时候&#xff0c;这个请求会被inetinfo.exe进程截获&#xff0c;它判断文件的后缀&#xff08;aspx&#xff09;之后&#xff0c;将这个请求转交给 ASPNET_ISAPI.dll&#xff0c;ASPNET_ISAPI.dll会通过http管道&…

【iOS开发】---- 强大的UI修改工具 UIAppearance-有图片效果

iOS5及其以后提供了一个比较强大的工具UIAppearance&#xff0c;可以轻松的统一你的界面&#xff0c;它提供如下两个方法&#xff1a; (id)appearance (id)appearanceWhenContainedIn:(Class <>)ContainerClass,... 第一个方法是统一全部改&#xff0c;比如你设置UINav…

使用Jetty设置JNDI(嵌入式)

我在开发工作区上运行嵌入式Jetty&#xff0c;从而节省了一些编译和部署恶性循环的时间。 我与Jetty的合作不多&#xff0c;易用性使我着迷于它。 我需要设置JNDI才能检索与数据库相关的活动的连接池。 尽管某些地方有完整的文档&#xff0c;但大多数都是分散的。 因此&#xf…

交华为换机access配置_华为交换机Hybrid接口及基础配置

一、回顾VLANVLAN基本概念VLAN即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域(多个VLAN)的通信技术。VLAN内的主机间可以直接通信&#xff0c;而VLAN间不能直接互通&#xff0c;从而将广播报文限制在一个VLAN内。由于VLAN之间的隔离&#xff0c;所以一些类…

HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)

参考文献&#xff1a; http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下载地址 http://hc.apache.org/downloads.cgi Apache-》Projects-》HttpComponents 2.DownloadServlet 1 package com.servlet;2 3 import java.io.Buffer…

git push 的符号笔有什么用_如何同步多个 git 远程仓库

点击上方“后端技术精选”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;taadismy.oschina.net/taadis/blog/3073220题外话&#xff0c;开发中遇到问题或者学习新技术时缺少交流环境&#xff0c;可以点击加入【后端技术交流群】日常需求以前…

2、Spring的 IoC详解(第一个Spring程序)

Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;的容器框架。在这句话中重点有两个&#xff0c;一个是IoC&#xff0c;另一个是AOP。今天我们讲第一个IoC。 一. IoC理论的背景 我们都知道…

js 获取father_(原创)Node.JS实战26:强大的工作池。收藏吧!你一定会用的到。...

在实际项目中&#xff0c;如果遇到需要大计算量的操作&#xff0c;按需fork&#xff08;分叉&#xff09;其实不是一个好的选择。因为fork的子进程也是V8&#xff08;NodeJS的核心引擎&#xff09;的新实例&#xff0c;每创建一个新实例&#xff0c;需要约30毫秒启动时间&#…

修复steam服务器失败,steam服务器链接失败

steam服务器链接失败 内容精选换一换当NTP服务器异常时产生该告警。当NTP服务器异常消除时&#xff0c;该告警恢复。主OMS节点配置的NTP服务器异常&#xff0c;可能会导致主OMS节点与外部服务器不能同步时间&#xff0c;集群时间可能会产生飘移。NTP服务器网络异常。与NTP服务器…

将jar添加到发布目录_第32批免购置税新能源车型目录发布;通用BEV3平台将入华...

1、第32批免购置税新能源车型目录发布&#xff0c;几何X/理想ONE等283款车型入选6月2日&#xff0c;工信部发布《免征车辆购置税的新能源汽车车型目录(第三十二批)》&#xff0c;共有283款新能源车型入选。其中新能源乘用车方面包括&#xff0c;一汽大众Q2L/e-BORA、东风风神E7…

HPROF –内存泄漏分析教程

本文将为您提供有关如何通过生成和分析Sun HotSpot JVM HPROF堆转储文件来分析JVM内存泄漏问题的教程。 一个现实的案例研究将用于此目的&#xff1a;Weblogic 9.2内存泄漏影响Weblogic Admin服务器。 环境规格 Java EE服务器&#xff1a;Oracle Weblogic Server 9.2 MP1 中…

mq服务器与客户端消息同步,使用 ActiveMQ 实现JMS 异步调用

目录简介服务之间的同步调用&#xff0c;可以使用 HTTP 或 RPC 来完成&#xff0c;但并非所有的调用都需要同步&#xff0c;有些场景下&#xff0c;当客户端调用服务端时&#xff0c;并不需要等待服务端做出响应&#xff0c;此时就应该使用异步调用。异步调用的常用方式是基于 …