关于多线程的问题
问题:
多线程并发处理:图片下载、缩放、图片切割、上传。
一次性提交30个任务时(每个任务大概有10张图片,每张图片有500KB左右),服务器CPU达到96%。
关键是任务都已经执行完成了之后,CPU仍然报错在96左右
注:tomcat每次启动时会初始化30个线程放在线程池,最大允许创建200个线程,以下是我的线程池的代码。请各位兄弟帮看。
此应用上线后的使用人数为2000人左右。所以实际使用的时候可能会产能非常高的并发。部分用户可能会一次性提交500个任务。每个任务平均10个图。每张图平均500KB。我这个服务器为后台处理服务器,现在等稳定之后是要建立负载均衡的。有懂的帮忙计算一下这样大概的需求大概需要多少后台服务器,什么样的配置要求。我的分就这么多了。希望各位不吝赐教!
环境:
linux(ubuntu 14)+tomcat8+jdk8
CPU:AMD(型号忘记了)
内存:2G
网络:5M
多线程并发处理:图片下载、缩放、图片切割、上传。
一次性提交30个任务时(每个任务大概有10张图片,每张图片有500KB左右),服务器CPU达到96%。
关键是任务都已经执行完成了之后,CPU仍然报错在96左右
注:tomcat每次启动时会初始化30个线程放在线程池,最大允许创建200个线程,以下是我的线程池的代码。请各位兄弟帮看。
此应用上线后的使用人数为2000人左右。所以实际使用的时候可能会产能非常高的并发。部分用户可能会一次性提交500个任务。每个任务平均10个图。每张图平均500KB。我这个服务器为后台处理服务器,现在等稳定之后是要建立负载均衡的。有懂的帮忙计算一下这样大概的需求大概需要多少后台服务器,什么样的配置要求。我的分就这么多了。希望各位不吝赐教!
package com.sq.system.util.easy;
import java.util.HashMap;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 线程池管理类
* @author 粗人
* @date 2016-06-06
* @version 1.0_160606
*/
public class EasyThread {
//初始值、最大值、保持时间、单位、队列类型
static ThreadPoolExecutor executor = new ThreadPoolExecutor(30, 200, 200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(30));
/**
* 查看线程池列表状态
* @return
*/
public static HashMap<String,String> getPoolStatus()
{
HashMap<String,String> map = new HashMap<String,String>();
map.put("CorePoolSize", "初始线程: "+executor.getCorePoolSize()+"");
map.put("MaximumPoolSize", "最大线程: "+executor.getMaximumPoolSize()+"");
map.put("PoolSize", "线程池: "+executor.getPoolSize()+"");
map.put("QueueSize", "队列: "+executor.getQueue().size()+"");
map.put("CompletedTaskCount", "已完成: "+executor.getCompletedTaskCount()+"");
return map;
}
/**
* 重新设置线程池
* @param initPoolSize 初始线程池大小
* @param maxPoolSize 最大线程池大小
* @param timeout 线程超时时间毫秒
*/
public static void setPoolParam(int initPoolSize,int maxPoolSize,int timeout )
{
executor = new ThreadPoolExecutor(initPoolSize, maxPoolSize, timeout, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(initPoolSize));
}
/**
* 添加线程
* @param object
* @return
*/
public static boolean addTask(Thread object)
{
boolean result = false;
try
{
executor.execute(object);
result = true;
}catch(RejectedExecutionException e){
result = false;
}
return result;
}
/**
* 关闭线程池
*/
public static void shutdown() {
executor.shutdown();
}
}
环境:
linux(ubuntu 14)+tomcat8+jdk8
CPU:AMD(型号忘记了)
内存:2G
网络:5M
...全文
相关推荐
DateFormat多线程问题
在多线程环境下,不恰当的使用`DateFormat`可能导致数据不一致、性能下降甚至程序崩溃。这篇博客将深入探讨`DateFormat`在多线程环境下的问题及其解决方案。
浅析Python多线程下的变量问题
然而,当需要在线程间共享数据时,就必须处理好线程同步问题。3. 数据传递问题:在多线程编程中,将数据从一个线程传递到另一个线程也是一个挑战。
多线程死锁问题
在Java多线程编程中,死锁是一个非常重要的概念,也是开发者需要密切关注和避免的问题。死锁是指两个或多个线程互相等待对方释放资源,从而导致它们都无法继续执行的状态。
Python tkinter 多线程 哲学家进餐问题
"Python tkinter 多线程实现的哲学家进餐问题示例代码"在计算机科学中,"哲学家进餐问题"是一个经典的并发控制问题,用来展示死锁的可能性。这个问题描述了五个哲学家围坐在一张圆桌旁,每
个人总结40个Java多线程面试问题和答案
Java多线程的缺点是增加了程序的复杂度,可能会导致deadlock和数据不一致的问题。13. 如何使用多线程?


高性能WEB开发
