启动线程池运行程序 线程池很大 导致cpu过载 问题, 请问都什么可以及时回收 降低cpu利用率
1 查看是否死循环了
2 查看线程是否都浪费在切换上了,这样线程太多也不能提高效率。
3 降低线程数,看看是否还是过载。
最后问一句,是自己的程序么?
线程池线程并不是越多越好,越多会导致频繁的线程上下文切换,会导致cpu忙,如果你的请求数量很大,千万不能无限创建线程,会宕机的。正确的设计应该根据cup个数合理分配一定数量的线程池,一旦任务过多让
任务等待,任务会等待直到线程池有空闲在继续执行 任务。另外最好在run任务设计上也要考虑当前任务是否可能很耗时,甚至可能永远不能终止,最好代码考虑下超时中断机制以防导致线程池工作线程忙,而无法处理其他任务
程序里添加sleep,让线程休眠。特别是轮询的程序,很有效。当然,你程序有效的负载本身很大,那没办法。你得换更好的硬件。
我的这台工作站有 72个 cpu,就很少 cpu 100%了。
如果可以控制线程同时访问的该服务,可以考虑使用java多线程的信号量来控制下。
百度一下 java多线程的信号量 ,希望对你有帮助。