浏览 4383 次
锁定老帖子 主题:多线程与cpu利用率的问题
精华帖 (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的利用率 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-26
你任务代码里干了什么没贴出来,根本没法评估嘛。
引用 大概需要1分钟才能完成。 是指400个任务1分钟?400个任务每个任务1分钟?,所有任务完成的时间是多少?你只是启动了10个线程来干活。假如你的任务总是等待IO的话(比如说数据库连接数不够),那CPU利用率根本上不去,瓶颈根本不在线程,你的run方法里找出执行时间最长的语句再分析。 |
|
返回顶楼 | |
发表时间:2008-07-26
任务代码有段连接远程web 服务器的动作, 我把它换成循环10000次,CPU的使用率就上去了,看来这就是瓶颈。多谢
|
|
返回顶楼 | |