线程数

倾斜数据之合并根节点——SuperMap iDesktop

a 夏天 提交于 2019-11-28 07:21:01
作者 赵爽 文章目录 使用产品 :SuperMap iDesktop 产品下载地址 :http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx 之前说了倾斜摄影加载的方法,当倾斜数据比较多的时候,在桌面或者是前端浏览的时候会存在浏览卡顿的问题,这时候要怎么处理呢?下面来说一下处理方法—— 合并根节点 在iDesktop的 三维数据 选项卡的 倾斜摄影 工具栏中,选择 数据处理 下拉栏, 合并根节点 源配置文件 :生成配置文件的scp文件 目标配置文件 :合并根节点后的scp文件 金字塔层级 :可简单的理解为压缩(合并)次数,默认为1 压缩类型 :用于什么设备上,分为PC和不压缩 线程数 :分配给合并根节点操作的线程数,默认为8个线程参与操作,用户可自定义线程数。 有的小伙伴对金字塔层级不是很明白,下面我仔细的说一下。 每次的压缩,都会将缓存文件夹数量/4,也就是说如果把金字塔曾经设置为2的话,缓存文件夹数量就会除以16(压缩前1600个,压缩后100个)。 那么应该处理到什么程度才算合适呢?当缓存文件夹数量小于100个的时候,基本上就已经合适了。 来源: https://blog.csdn.net/supermapsupport/article/details/100030809

java(线程池的创建方式,和线程池的原理)

风格不统一 提交于 2019-11-28 06:07:00
1.为什么要使用线程池: 减少资源消耗,通过重复的使用已创建好的线程,避免了线程的频繁创建和销毁所造成的 消耗 提高响应速度,当任务到达的时候,不需要再去创建,可以直接使用已经创建好的线程就能立即执行任务 提高线程的管理性,线程池可以统一管理线程的创建,销毁,分配,调优监控 2.使用线程池能解决什么问题 通过固定的几个线程为大量的操作服务,降低线程的频繁创建,销毁线程所需要消耗的时间,从而提高效应效率 3.线程池的创建方式 1.5版本通过Executors创建线程池 * @since 1.5 * @author Doug Lea */ public class Executors { /** * Creates a thread pool that reuses a fixed number of threads * operating off a shared unbounded queue. At any point, at most * {@code nThreads} threads will be active processing tasks. * If additional tasks are submitted when all threads are active, * they will wait in the queue until a thread is

实战Tomcat性能优化

孤街浪徒 提交于 2019-11-28 05:42:01
前言 由于不同的硬件配置导致默认的tomcat配置无法达到最佳的性能,导致我们需要对tomcat的进行相应的配置调整。 Tomcat内存优化 配置信息:JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’ 将以上配置信息在tomcat中的catalina.sh 中配置如下图所示: 参数描述: -server 启用jdk 的 server 版;   -Xms java虚拟机初始化时的最小内存;   -Xmx java虚拟机可使用的最大内存;   -XX: PermSize 内存永久保留区域 -XX:MaxPermSize 内存最大永久保留区域 根据不同的配置硬件设备可适当调整参数的大小,内存大、cpu核数多,可对相应的参数设置过大,反之设置适当偏小。 Tomcat并发优化 并发优化主要在conf中server.xml文件中配置。配置代码如下: <Connector port="8080"   protocol="HTTP/1.1"   maxHttpHeaderSize="8192"   minProcessors="100"   maxProcessors="1000"   acceptCount="1000"   redirectPort="8443"

ThreadPoolExecutor参数

走远了吗. 提交于 2019-11-27 22:25:39
参数明细 查看大图 ThreadPoolExecutor执行顺序: 线程池按以下行为执行任务 当线程数小于核心线程数时,创建线程。 当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。 当线程数大于等于核心线程数,且任务队列已满 若线程数小于最大线程数,创建线程 若线程数等于最大线程数,抛出异常,拒绝任务 设置 参数 默认值 corePoolSize=1 queueCapacity=Integer.MAX_VALUE maxPoolSize=Integer.MAX_VALUE keepAliveTime=60s allowCoreThreadTimeout=false rejectedExecutionHandler=AbortPolicy() 如何来设置 需要根据几个值来决定 tasks :每秒的任务数,假设为500~1000 taskcost:每个任务花费时间,假设为0.1s responsetime:系统允许容忍的最大响应时间,假设为1s 做几个计算 corePoolSize = 每秒需要多少个线程处理? threadcount = tasks/(1/taskcost) =tasks*taskcout = (500~1000)*0.1 = 50~100 个线程。corePoolSize设置应该大于50 根据8020原则,如果80%的每秒任务数小于800

Tomcat性能调优方案

↘锁芯ラ 提交于 2019-11-27 20:08:55
Tomcat性能调优方案 一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。 【适用场景】 任何 项目 。 二、Java虚拟机调优 应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。 JDK1.4比JDK1.3性能提高了近10%-20%,JDK1.5比JDK1.4性能提高25%-75%。 因此对性能要求较高的情况推荐使用 JDK1.6。 【适用场景】 任何项目。 三、Apache集成Tomcat Web服务器专门处理HTTP请求,应用服务器是通过很多协议为应用提供商业逻辑。虽然Tomcat也可以作web服务器,但其处理静态html的速度比不上Apache,且其作为web服务器的功能远不如Apache,因此把Apache和Tomcat集成起来,将html和Jsp的功能部分进行明确分工,让Tomcat只处理Jsp部分,其他的由Apache,IIS等web服务器去处理,由此大大提高Tomcat的运行效率。 如果一个项目中大量使用了静态页面、大量的图片等,并有有较大的访问量,推荐使用Apache集成Tomcat的方式来提高系统的整体性能。

jmeter对tomcat性能测试

三世轮回 提交于 2019-11-27 19:35:32
主要对tomcat的参数做一些记录(jmeter和tomcat在同一个计算机,可能引起测试误差) 我的计算机配置 4核8线程 8G内存 案例一 tomcat JVM 1.8G堆内存,无数据库操作 #最大线程数server.tomcat.maxThreads =10000 #这个参数是指在同一时间,tomcat能够接受的最大连接数,一般这个值要大于maxThreads+acceptCountserver.tomcat.maxConnections =20000#当线程数量达到最大线程数时所允许的最大等待队列的长度server.tomcat.acceptCount =200#最小空闲线程数server.tomcat.minSpareThreads =10 并发数 平均响应时间 响应时间中位数 90%用户的响应时间 95%用户的响应时间 99%用户的响应时间 最小响应时间 最大响应时间 错误率 吞吐量(s) 每秒发送的数据(KB) 每秒接受的数据(KB) HTTP Request 1000 354 337 850 862 873 1 879 0.0% 887.3 103.9 274.6 HTTP Request 5000 1000 1047 1725 2009 2422 94 2721 0.0% 802.9 94.0 248.5 HTTP Request 10000 1692 1389

【多线程】设置线程池线程数量

别来无恙 提交于 2019-11-27 18:49:46
一、需求 Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。“工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能。 二、一些共性认知 在进一步深入讨论之前,先以提问的方式就一些共性认知达成一致。 提问:工作线程数是不是设置的越大越好? 回答:肯定不是的 1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义 2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低 提问:调用sleep()函数的时候,线程是否一直占用CPU? 回答:不占用,等待时会把CPU让出来,给其他需要CPU资源的线程使用 不止调用sleep()函数,在进行一些阻塞调用,例如网络编程中的阻塞accept()【等待客户端连接】和阻塞recv()【等待下游回包】也不占用CPU资源 提问:如果CPU是单核,设置多线程有意义么,能提高并发性能么? 回答:即使是单核,使用多线程也是有意义的 1)多线程编码可以让我们的服务/代码更加清晰,有些IO线程收发包,有些Worker线程进行任务处理,有些Timeout线程进行超时检测 2)如果有一个任务一直占用CPU资源在进行计算

JUC 总结

别说谁变了你拦得住时间么 提交于 2019-11-27 18:25:18
1创建线程的方式 比较常见的一个问题了,一般就是四种: (1)继承Thread类 (2)实现Runnable接口 (3)实现 Callable 接口:该方式相较于实现 Runnable 接口,方法多了返回值,并且可以抛出异常 FutureTask (4)线程池 2 start()方法和run()方法的区别 只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run()方法里面的代码 全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码。 3什么是线程安全 如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是 线程安全的 。 (1)不可变 像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用 设置不可变对象的原因: 因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误.此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读取数据时不会有任何问题.我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象. (2)绝对线程安全 不管运行时环境如何

Executor线程池原理与源码解读

我与影子孤独终老i 提交于 2019-11-27 16:49:28
线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的类将被Thread执行,表示一个基本任务 public interface Runnable { //run方法就是它所有内容,就是实际执行的任务 public abstract void run(); } //Callable同样是任务,与Runnable接口的区别在于它接口泛型,同时它执行任务候带有返回值; //Callable的使用通过外层封装成Future来使用 public interface Callable<V> { //相对于run方法,call方法带有返回值 V call() throws Exception; } 注意:启动Thread线程只能用start(JNI方法)来启动,start方法通知虚拟机,虚拟机通过调用器映射到底层操作系统,通过操作系统来创建线程来执行当前任务的run方法 Executor框架 Executor接口是线程池框架中最基础的部分,定义了一个用于执行Runnable的execute方法。 从图中可以看出Exectuor下有一个重要的子接口ExecutorService,其中定义了线程池的具体行为: execute

jmeter压测,数据分析,压测实现

我们两清 提交于 2019-11-27 10:29:53
1.开始之前,先介绍下压测的一些基本插件:线程组常用分为三类:user thread , step thread ,ultimate thread : user thread :最通用的最原始的线程实现;分为循环实现线程,可以实现线程delay延时; step thread :能够实现一些较复杂场景,比如常见爬坡类类型,以及持续在线场景 This Group will start 10 threads:这次的测试总共会起10个线程。 First , wait for 0 seconds:等待0s后开始起线程,也就是不等待直接起线程。 Then start 0 threads;从0个线程开始持续增加。 Next,add 2 threads every 3 seconds:每增加2个线程后会运行3s,再起余下的2个线程,再运行3s,以此类推。 Using ramp-up 6seconds:前面每起2个线程的时候花6s,与上面结合起来即6s内起2个线程,运行3s,然后再再6s内再起2个线程,再运行3s,以此类推。 Then hold load for 30 seconds. :全部的线程起来后,运行30s 后开始停止。 Finally , stop 2 threads every 1 seconds:最后停止线程,2个线程停一次,等1s再 ultimate thread: 参数含义解释: