论坛首页 Java企业应用论坛

多线程与cpu利用率的问题

浏览 4383 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-26   最后修改:2008-12-01
运行环境:
windows2003 64bit, 2g 4核 intel至强cpu, 4G内存
jdk1.5, Jboss 4.2.2
MySql 5
使用了struts, spring, hibernate
任务说明:
使用jdk1.5 的concurrent包创建线程池调度程序, 调度400多个Runnalbe对象, 每10分钟执行一遍400个任务,每个任务在多线程运行的情况下大概需要1分钟才能完成。如果只执行一个任务,用不了1秒钟。

代码片段:
//==============================================================
//myTaskThread -- 任务类
public class myTaskThread implements Runnable{

public void run() {
// 执行任务
。。。
}
}
//====================================================
public class TargetExecutor {
//线程池大小设置
private int poolSize = 10;
private Executor executor; //声明一个执行器

private final Logger log = Logger.getLogger(TargetExecutor.class);
public void init(){
//初始设置线程池大小
executor = Executors.newFixedThreadPool(poolSize); }
//executeTasks()每10分钟执行一次
public void executeTasks() {
//系统启动时把400多个myTaskThread对象存入这个set中
Set taskSet = getTargetThreadSet();
Iterator it = targetSet.iterator();

while(it.hasNext()){
MyTaskThread thread = (MyTaskThread) it.next();
executor.execute(thread);
}
}
}
//====================================================


问题: 尽管任务很多,每个任务耗时也比较长,但是cpu的利用率只有1~2%, 我把线程池的大小调到50, 100, 200都不能提高CPU的利用率。

请问怎样提高jvm的cpu的利用率
   发表时间:2008-07-26  
你任务代码里干了什么没贴出来,根本没法评估嘛。
引用

   大概需要1分钟才能完成。

是指400个任务1分钟?400个任务每个任务1分钟?,所有任务完成的时间是多少?你只是启动了10个线程来干活。假如你的任务总是等待IO的话(比如说数据库连接数不够),那CPU利用率根本上不去,瓶颈根本不在线程,你的run方法里找出执行时间最长的语句再分析。
0 请登录后投票
   发表时间:2008-07-26  
任务代码有段连接远程web 服务器的动作, 我把它换成循环10000次,CPU的使用率就上去了,看来这就是瓶颈。多谢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics