MyEclipse性能调优初体验

简介一下工作环境,MyEclipse2014,你懂的

项目中有一个基于web的工作流引擎,仅仅要执行起来就CPU差点儿耗尽(尽管看似27%,事实上已经把俺4核的CPU当中一个核给全然占光了)


启动性能分析的简要方法:

项目根文件夹上右键

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2F0Y2hlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


在MyEclipse Server Application的项目下新建一个配置

main的tab页中能够看到prject和server的选择,我这里仅仅有一个tomcat7支持的web项目

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2F0Y2hlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


点击右下角的 Profilebutton。

则会在tomcat中启动自己的web项目而且自己主动启动性能工具进行监视。笔者这里自己主动启动的是visualVM 1.3.6,您自己安装的版本号可能会不太一样

工具启动之后。就能够看到关于是CPU监视还是内存监视的部分了。

我这里项目因为是CPU占用的问题。所以选择CPU


在监视界面上能够看到下面的热点方法

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2F0Y2hlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

除开系统的API类的方法(它们一般是被业务方法调用多次导致消耗CPU的),找到了ExecutorEngine.execute()方法是罪魁祸首
好了。直奔这种方法,发现里面仅仅有一个轮询的代码段
  while(true){
   // 获取队列中的一条事件
   EventInfo eventInfo = eventMangeCenter.takeEvent();
   if(eventInfo != null){
    // 首先将事件插入数据库
    insertHistoryEvent(eventInfo);
    // 运行按事件类型注冊的监听器的处理程序
    executeProcessByEventType(eventInfo);
    // 运行按事件编码注冊的监听器的处理程序
    executeProcessByEventCode(eventInfo);
    // 运行按事件类型和事件编码注冊的监听器的处理程序
    executeProcess(eventInfo);
       }    
  }
而eventMangeCenter.takeEvent();方法例如以下
  */
 public EventInfo takeEvent(){
  EventInfo info = null;
  if(queueEventInfo.peek() != null){
   // 取出第一条,而且删除
   info = queueEventInfo.poll();
  }
  return info;
 }
继续深入,takeevent并没有完毕它应该具有的功能:堵塞
 public EventInfo takeEvent(){
  EventInfo info = null;
  if(queueEventInfo.peek() != null){
   // 取出第一条,而且删除
   info = queueEventInfo.poll();
  }
  return info;
 }

至此。问题原因找到了,然后将定义为 private Queue<EventInfo> queueEventInfo 改动为private BlockingQueue<EventInfo> queueEventInfo; 利用java本身的BlockingQueue来实现轮训的时候,有数据才開始动,没数据就等着

public EventInfo takeEvent() throws InterruptedException {
  return queueEventInfo.take();
}

再次启动tomcat server的项目,CPU在没有服务里请求的时候,保持0%的理论值,这才是一个服务应该具有的气质嘛。哈哈

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2F0Y2hlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


到这里告一段落吧,深入的东西下次再说

MyEclipse性能调优初体验的更多相关文章

  1. 初窥MySQL性能调优

    本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法 性能测试工具—mysqlslap mysqlslap是MySQL自带的一款非常优秀的性能测试工具.使用它可以 模拟多 ...

  2. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  3. MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化

    第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...

  4. MySQL性能调优与架构设计——第6章 MySQL Server 性能的相关因素

    第6章 MySQL Server 性能的相关因素 前言 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的大部 ...

  5. iOS-------应用性能调优的25个建议和技巧

    性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的 ...

  6. iOS应用性能调优建议

    本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以 ...

  7. iOS应用性能调优的25个建议和技巧

    本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以 ...

  8. linux概念之性能调优

    目前,对系统进行性能调试的工具有很多,这些可以两大类:一类是标准的分析工具,即所有的UNIX都会带的分析工具: 另一类是不同厂商的UNIX所特有的性能分析工具,比如HP-UX就有自己的增值性能分析工具 ...

  9. [转]iOS应用性能调优的25个建议和技巧

    写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/ ...

随机推荐

  1. 读取本地HTML的小说阅读器应用源码项目

    该源码是一个不错的读取本地HTML的小说阅读器,读取本地HTML的小说阅读器,并且源码也比较简单的,非常适合我们的新手朋友拿来学习,有兴趣的朋友研究下. 源码下载: http://code.662p. ...

  2. codeforces 21D. Traveling Graph 状压dp

    题目链接 题目大意: 给一个无向图, n个点m条边, 每条边有权值, 问你从1出发, 每条边至少走一次, 最终回到点1. 所走的距离最短是多少. 如果这个图是一个欧拉回路, 即所有点的度数为偶数. 那 ...

  3. poj 1769 Minimizing maximizer 线段树维护dp

    题目链接 给出m个区间, 按区间给出的顺序, 求出覆盖$ [1, n] $ 至少需要多少个区间. 如果先给出[10, 20], 在给出[1, 10], 那么相当于[10, 20]这一段没有被覆盖. 令 ...

  4. IBM X System ServerGuide 8.41 服务器 系统安装 引导盘

    IBM X System ServerGuide 8.41 支持操作系统: 32位: Microsoft Windows 2003/2003 R2 (Enterprise, Standard, Web ...

  5. 浅谈POSIX线程的私有数据

    当线程中的一个函数需要创建私有数据时,该私有数据在对函数的调用之间保持一致,数据能静态地分配在存储器中,当我们采用命名范围也许可以实现它使用在函数或是文件(静态),或是全局(EXTERN).但是当涉及 ...

  6. xcode UIButton创建、监听按钮点击、自定义按钮 、状态 、内边距

    代码创建 //创建UIButton UIButton * btnType=[[UIButton alloc]init]; //设置UIControlStateNormal状态下的文字颜色 [btnTy ...

  7. elmah - Error Logging Modules and Handlers for ASP.NET - 1 : 初体验

    elmah(英文):https://code.google.com/p/elmah/   写作思路:先看结果,然后再说原理   elmah文章基本内容如下   1.安装 2.基本使用 3.详细配置讲解 ...

  8. asp.net Listbox控件用法

    2008-02-18 19:56 来源: 作者: ListBox(列表框)控件可以显示一组项目的列表,用户可以根据需要从中选择一个或多个选项.列表框可以为用户提供所有选项的列表.虽然也可设置列表框为多 ...

  9. JavaScript对css样式表操作

    CSS样式表3种方式: 内嵌:写在html标签中的样式 :如:<p style="width:100px"> 内嵌</p> 内联:写在html 中<h ...

  10. 关于响应式、媒体查询和media的关系 、流媒体布局flex 和em rem像素的使用 我有一些废话要讲.....

    一.什么是响应式 随着移动端越来遇火 网站的布局成为一个热议的话题 有的人喜欢用手机浏览网站.有的人喜欢用paid浏览网站.有人喜欢用电脑浏览网站 那么问题来了 我们怎么样才能使用一套css样式 完成 ...