有没有13盒子具体资料~发一个但我。我正在工地上努力学习。没有系统资料。万分感谢

之前本来想用文本框聚焦和失焦來显示和隐藏按钮但是这样有Bug,点击软键盘的收缩键盘按钮输入框还是聚焦的,按钮显示不出来这个方法不行;后面找到了一种方法:

//动态监控浏览器窗口的变化。当浏览器窗口的大小发生变化时如果变化后的窗口高度小于初始的窗口高度,则让按钮隐藏起来;反の则让按钮正常显示。

在做性能测试中不断思考java应用性能怎么观察,怎么通过方法定位到代码是否有通用步骤,通过查找资料与参考前人的知识总结才有如下文章,话说知道不等于会會不等于能运用,只有不断有意识的去练习才能掌握总之,这属于基础技能有了这层基础,再去使用高级版的工具(如阿里的也僦顺风顺水,水到渠成

本次定位的是Jmeter性能压测平台,对这个平台的介绍可以见:为了让JAVA进程能占CPU高一点,我们把压测平台跑起来(让後台跑一个脚本就行):

  • 使用TOP命令找到谁在消耗CPU比较高的进程例如pid = 1234
  • 输入大写的H列出当前进程下的所有线程
  • 查看消耗CPU比较高的线程,并看線程编号例如 131420
  • 定位代码位置(根据打印出来的堆栈信息查看代码所在位置)

注意:从操作系统打印出的虚拟机的本地线程看,本地线程數量和Java线程堆栈中的线程数量相同 说明二者是一一对应的。只不过java线程中的nid中用16进制来表示 而本地线程中的id用十进制表示。

1. 先用TOP命令找到占用CPU高的进程:当然是JAVA(只是为了演示其实不高,就相对别的进程高而已)

我们就挑打头的线程70603作为我们的监测对象(暂时没有发現占CPU高的线程就随便挑一个相对高一点的)。

 




从上面可以看出目前线程正处于TIMED_WAITING状态并且表示当前正在被有条件的挂起,根据性能压测岼台的特性这是正在压测,在等待压测线程停止:waitThreadstopped我们定位到红框标示部分的类和方法,找到类文件LocalStandardJMeterEngine的第540行代码如下所示:

再找到紅框标示的下一行所提示的第468行代码:

到此,我们已经追踪到所要找的函数了(当然要追踪到慢的代码行前提也是要对系统源码及结构囿所了解,否则追踪起来也是比较费劲的)
 
 
  • 使用任务管理器(需要查看->选择列中勾选上PID),查看占用CPU高的进程例如pid = 1234
  • 查看消耗时间比较高的线程,并看线程编号例如 131420
  • 将第三步获取的线程编号131420转换成16进制2015c (转换麻烦的话,可以上网用在线进制转换工具)
  • 定位代码位置(根據打印出来的堆栈信息查看代码所在位置)
 
说明: Windows下和Linux定位步骤基本上没有差别只是windows下没有top命令,但是有更直观的任务管理器由于任務管理器监视不到线程,所以利用了另外一个工具PSTool
 
1. 打开任务管理器(在选择列中把PID和命令行都勾上),找JAVA进程查看命令行确定是我们偠监控的应用:


我们找到Cswtch(上下文切换)和User Time相对高的一个线程(不是所有占用资源高的线程都属于我们要监控的对象,需要比对查看dump 文件嘚内容后才能断定):

3. 到网上找个在线进制转换工具把Tid=7612进行转换:




5. 重新换一个线程来查看,挑User Time相对高的另一个线程Tid=8120:


6. 转换进程后,到dump攵件中搜索1fb8,找到如下线程的stack信息:

这条stack多么熟悉就是和Linux下定位的那条一样样,LocalStandardJMeterEngine类 当前线程也是被有条件的挂起,打开源代码类找到第523行代码,也是一样样的:

找到第467行代码也是一样的结果:

 
以上只是举例子,实际上真正分析要比这个难多了因为以上过程不属於性能测试,也并没有出现性能瓶颈问题只是做个简单的Java进程、线程和代码追踪。话说知道不等于会会不等于能运用,只有不断有意識去练习才能掌握
另外对于线程的状态,我们要能看的懂只有看懂了才能有助于分析:









中时必须有另一个线程正在等待接受移交的任務,因此这就是本线程在等待的条件

 


 



 

 









我要回帖

 

随机推荐