MyEclipse性能调优初体验
2016-01-19 15:53
495 查看
MyEclipse性能调优初体验
简介一下工作环境,MyEclipse2014,你懂的
项目中有一个基于web的工作流引擎,仅仅要执行起来就CPU差点儿耗尽(尽管看似27%,事实上已经把俺4核的CPU当中一个核给全然占光了)
启动性能分析的简要方法:
项目根文件夹上右键
在MyEclipse Server Application的项目下新建一个配置
main的tab页中能够看到prject和server的选择,我这里仅仅有一个tomcat7支持的web项目
点击右下角的 Profilebutton。
则会在tomcat中启动自己的web项目而且自己主动启动性能工具进行监视。笔者这里自己主动启动的是visualVM 1.3.6,您自己安装的版本号可能会不太一样
工具启动之后。就能够看到关于是CPU监视还是内存监视的部分了。
我这里项目因为是CPU占用的问题。所以选择CPU
在监视界面上能够看到下面的热点方法
除开系统的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%的理论值,这才是一个服务应该具有的气质嘛。哈哈
到这里告一段落吧,深入的东西下次再说
简介一下工作环境,MyEclipse2014,你懂的
项目中有一个基于web的工作流引擎,仅仅要执行起来就CPU差点儿耗尽(尽管看似27%,事实上已经把俺4核的CPU当中一个核给全然占光了)
启动性能分析的简要方法:
项目根文件夹上右键
在MyEclipse Server Application的项目下新建一个配置
main的tab页中能够看到prject和server的选择,我这里仅仅有一个tomcat7支持的web项目
点击右下角的 Profilebutton。
则会在tomcat中启动自己的web项目而且自己主动启动性能工具进行监视。笔者这里自己主动启动的是visualVM 1.3.6,您自己安装的版本号可能会不太一样
工具启动之后。就能够看到关于是CPU监视还是内存监视的部分了。
我这里项目因为是CPU占用的问题。所以选择CPU
在监视界面上能够看到下面的热点方法
除开系统的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%的理论值,这才是一个服务应该具有的气质嘛。哈哈
到这里告一段落吧,深入的东西下次再说
相关文章推荐
- RandLoop ececute failed with exception (class java.lang.UnsatisfiedLinkError):dalvik.system.PathClas
- 为benchmarksql的PostgreSQL java驱动进行升级
- JAVA_NEW和赋值的区别
- 浅谈Java中的对象和对象引用
- 一、基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收
- 设计模式:观察者模式(基于 Java)
- spring boot--creating your own auto-configuration
- JAVA学习日记(1)
- 自己记一点springMVC的注解
- 数组转换集合
- Quartz+spring实例应用(受教育其他博主的文章,在原来基础之上进行改正)
- SpringMVC拦截器---解决乱码例子(一)
- 初步理解Java的三大特性——封装、继承和多态
- Maven搭建SpringMVC+Mybatis项目详解
- Eclipse下安装的SVN中文插件转变为英文版
- Eclipse 背景颜色豆沙绿护眼
- java之单例模式【整理】
- (java)urlconnection访问ContentEncoding为gzip的网页
- SpringMVC + Spring + Mybatis + Maven整合实例
- java 线程的开始、暂停、继续