线程数_线程数设置 - CSDN
精华内容
参与话题
  • CPU个数,核心数,线程数

    万次阅读 多人点赞 2019-07-22 22:07:18
    我们在买电脑的时候,经常会看cpu的参数,对cpu的描述有这几种:“双核”、“双核四线程”、“四核”、“四核四线程”、“四核八线程”……。 我们接触的电脑基本上都只有一个cup。cpu的个数很容易得到,螺丝刀拆开...

    我们在买电脑的时候,经常会看cpu的参数,对cpu的描述有这几种:“双核”、“双核四线程”、“四核”、“四核四线程”、“四核八线程”……。

    我们接触的电脑基本上都只有一个cup。cpu的个数很容易得到,螺丝刀拆开你的电脑数一下就行了。这没有什么好说的。

    为了给电脑更高的性能,一个cup中集成了多个内核,这样电脑的性能就成倍的提升。随着科技的发展,我们发现每个内核的性能也变的十分强大,于是一个内核又被分成两个线程。但是,我们要注意的是,一个cpu分成多个内核,这是物理的分隔,拆开cpu是可以看到的;但是一个内核被分成两个线程是一种超线程技术,也就是串代码,操作系统会认为一个线程也是一个内核,有点欺骗操作系统的感觉。

    如果操作系统说我的cpu有四核,这时我们要提高警惕,是真四核还是四线程(假四核)。

    这是我的台式机windows7:

    任务管理器显示有4核。

    设备管理器显示依然为4核 

    我百度了一下:

    原来我的电脑是假四核。

     

    其实windows有一个命令是可以查看的:

    在cmd命令中输入“wmic”,回车;然后再输入“cpu get ”。 
    NumberOfCores:表示CPU核心数 
    NumberOfLogicalProcessors:表示CPU线程数 

    修改处理器个数

    物理内核个数是不能修改的,但是假内核个数是可以修改的:

    处理器个数修改成3,保存重启电脑。

    任务管理器中已经改变:

    设备管理器未发生改变:

     

    如何禁用超线程技术

    Hyper-Threading是Intel微处理器采用的一种技术,这种技术能够让微处理器在操作系统和应用程序中的性能表现的类似于两个处理器一样。

    BIOS,找到   Hyper-Threading选项设置成disable

    保存设置,启动电脑。

     

    任务管理器发生了变化:

    设备管理器也发生了变化:

     

    在window10系统中查看着些参数变的十分简单: 

    打开任务管理器

    展开全文
  • 最佳线程数总结

    千次阅读 2015-04-22 10:55:43
    最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。   为...

    最佳线程数:

    性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。

     

    为什么要找最佳线程数

    1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助

    2.找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出

     

    最佳线程数的获取:

    1、通过用户慢慢递增来进行性能压测,观察QPS,响应时间

    2、根据公式计算:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量

    3、单用户压测,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量。

     

    影响最佳线程数的主要因素:

    1、IO

    2、CPU

    根据公式:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量

    一般来说是IO和CPU。IO开销较多的应用其CPU线程等待时间会比较长,所以线程数量可以开的多一些,相反则线程数量要少一些,其实有两种极端,纯IO的应用,比如proxy,则线程数量可以开到非常大(实在太大了则需要考虑线程切换的开销),这种应用基本上后端(比如这个proxy是代理搜索的)的QPS能有多少,proxy就有多少。

    另一种是耗CPU的计算,这种情况一般来讲只能开到CPU个数的线程数量。但是并不是说这种应用的QPS就不高,往往这种应用的QPS可以很高。

     

    QPS和线程数的关系

    1、在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时相应时间持续上升。

    2、同一个系统而言,支持的线程数越多(最佳线程数越多而不是配置的线程数越多),QPS越高

     

    QPS和响应时间的关系

    1、对于一般的web系统,响应时间一般有CPU执行时间+IO等待时间组成

    2、CPU的执行时间减少,对QPS有实质的提升,IO时间的减少,对QPS提升不明显。如果要想明显提升QPS,优化系统的时候要着重优化CPU消耗大户。

     

    最佳线程数和jvm堆内存得关系:

    以上都是依据性能瓶颈在CPU的情况,对于java应用还有一个因素是FULL GC,我们要保证在最佳线程数量下,不会发生频繁FULL GC

    根据公式::(小GC时间间隔/rt)*(并发线程数量 * thm) <=young 计算得到的并发线程数量如果<最佳线程数量 则可能导致FULL GC较频繁,实际情况看来这种情况在web系统上非常少。不过可以模拟出来。

    所以我们在设置jboss线程的时候,可以利用内存公式计算出来的线程数量来设置,通过压测和计算得到最佳线程数,然后设置线程数。

     

    设置线程数量:

    压测最佳线程数<真实设置的线程数量<内存极限线程数

    比如,通过压测得到某系统的最佳线程数量是10,然后通过内存计算的线程数量是20,则,设置jboss的线程数量为15是可行的,如果直接设置了10,由于系统本身会受到一些依赖系统的变化而产生一些变化,比如系统依赖一些IO的响应时间会突然延长,由于线程数量还是10,其实这个时候最佳线程数量已经变成了13了,由于我们设置死了10,其结果就是导致qps下降,但是如果超过20,则又会引起FULL gc非常频繁,反过来影响QPS的下降。

     

    jboss的线程数设置:

    对于jboss而言,设置线程数量要看使用了那种线程连接,如http、ajp等

    http和ajp的设置是完全一样的,非常简单:

    以ajp为例,找到server.xml或者tomcat-server.xml:

    默认线程数量是200个

     <Connector port="8009" address="${jboss.bind.address}" connectionTimeout="15000" protocol="AJP/1.3"maxThreads="200" minSpareThreads="40" maxSpareThreads="75" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" useBodyEncodingForURI="true"/>

    这里将默认的线程数量改成了20,当然相应的其他最小空闲线程数和最大空闲线程数也做一下调整:

    <Connector port="8009" address="${jboss.bind.address}" connectionTimeout="15000" protocol="AJP/1.3"maxThreads="20" minSpareThreads="20" maxSpareThreads="20" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" useBodyEncodingForURI="true"/>

    展开全文
  • 线程数设多少合适??

    千次阅读 2018-04-05 21:32:43
    线程数设多少合适?? 提问:工作线程数是不是设置的越大越好? 回答:肯定不是的 1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义 2)线程切换是有开销的,如果线程...

    线程数设多少合适??

    提问:工作线程数是不是设置的越大越好?
    回答:肯定不是的
    1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义
    2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低

    提问:如果CPU是单核,设置多线程有意义么,能提高并发性能么?
    回答:即使是单核,使用多线程也是有意义的
    1)多线程编码可以让我们的服务/代码更加清晰,有些IO线程收发包,有些Worker线程进行任务处理,有些Timeout线程进行超时检测
    2)如果有一个任务一直占用CPU资源在进行计算,那么此时增加线程并不能增加并发,例如这样的一个代码
    while(1){ i++; }
    该代码一直不停的占用CPU资源进行计算,会使CPU占用率达到100%
    3)通常来说,Worker线程一般不会一直占用CPU进行计算,此时即使CPU是单核,增加Worker线程也能够提高并发,因为这个线程在休息的时候,其他的线程可以继续工作

    工作线程的工作模式

    这里写图片描述

    上图是一个典型的工作线程的处理过程,从开始处理start到结束处理end,该任务的处理共有7个步骤:
    1)从工作队列里拿出任务,进行一些本地初始化计算,例如http协议分析、参数解析、参数校验等
    2)访问cache拿一些数据
    3)拿到cache里的数据后,再进行一些本地计算,这些计算和业务逻辑相关
    4)通过RPC调用下游service再拿一些数据,或者让下游service去处理一些相关的任务
    5)RPC调用结束后,再进行一些本地计算,怎么计算和业务逻辑相关
    6)访问DB进行一些数据操作
    7)操作完数据库之后做一些收尾工作,同样这些收尾工作也是本地计算,和业务逻辑相关

    分析整个处理的时间轴,会发现:
    1)其中1,3,5,7步骤中【上图中粉色时间轴】,线程进行本地业务逻辑计算时需要占用CPU
    2)而2,4,6步骤中【上图中橙色时间轴】,访问cache、service、DB过程中线程处于一个等待结果的状态,不需要占用CPU,进一步的分解,这个“等待结果”的时间共分为三部分:
    2.1)请求在网络上传输到下游的cache、service、DB
    2.2)下游cache、service、DB进行任务处理
    2.3)cache、service、DB将报文在网络上传回工作线程

    量化分析并合理设置工作线程数

    最后一起来回答工作线程数设置为多少合理的问题。
    通过上面的分析,Worker线程在执行的过程中,有一部计算时间需要占用CPU,另一部分等待时间不需要占用CPU,通过量化分析,例如打日志进行统计,可以统计出整个Worker线程执行过程中这两部分时间的比例,例如:
    1)时间轴1,3,5,7【上图中粉色时间轴】的计算执行时间是100ms
    2)时间轴2,4,6【上图中橙色时间轴】的等待时间也是100ms
    得到的结果是,这个线程计算和等待的时间是1:1,即有50%的时间在计算(占用CPU),50%的时间在等待(不占用CPU):
    1)假设此时是单核,则设置为2个工作线程就可以把CPU充分利用起来,让CPU跑到100%
    2)假设此时是N核,则设置为2N个工作线程就可以把CPU充分利用起来,让CPU跑到N*100%

    结论:

    N核服务器,通过执行业务的单线程分析出本地计算时间为x,等待时间为y,则工作线程数(线程池线程数)设置为 N*(x+y)/x,能让CPU的利用率最大化。

    经验:

    一般来说,非CPU密集型的业务(加解密、压缩解压缩、搜索排序等业务是CPU密集型的业务),瓶颈都在后端数据库,本地CPU计算的时间很少,所以设置几十或者几百个工作线程也都是可能的。

    展开全文
  • 线程数设多少合适

    千次阅读 2019-02-22 09:21:09
    ①工作线程数是不是设置的越大越好?  回答:肯定不是的  1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义  2)线程切换是有开销的,如果线程切换过于频繁,反而会使...

    ①工作线程数是不是设置的越大越好?
            回答:肯定不是的
            1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义
            2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低

    ②如果CPU是单核,设置多线程有意义么,能提高并发性能么?
            回答:即使是单核,使用多线程也是有意义的
            1)多线程编码可以让我们的服务/代码更加清晰         
             2)通常来说,Worker线程一般不会一直占用CPU进行计算,此时即使CPU是单核,增加Worker线程也能够提高并发,因为这个线程在休息的时候,其他的线程可以继续工作

     

      一般来说,非CPU密集型的业务(加解密、压缩解压缩、搜索排序等业务是CPU密集型的业务),瓶颈都在后端数据库,本地CPU计算的时间很少,所以设置几十或者几百个工作线程也都是可能的。

     

    N核服务器,通过执行业务的单线程分析出本地计算时间为x,等待时间为y,则工作线程数(线程池线程数)设置为 N*(x+y)/x,能让CPU的利用率最大化。

    展开全文
  • cat /proc/sys/kernel/pid_max #(操作系统线程ID的最大值)系统支持的最大线程数 (sysctl kernel.pid_max)  cat /proc/sys/kernel/thread-max #表示内核所能使用的线程的最大数目  cat max_user_process...
  • 查看线程数的几种方法

    万次阅读 2018-06-09 08:56:48
    如果是查看系统中总的线程数,直接用top -H选项 2 pstree pstreee -p pid |wc -l 如果是查看系统中总的线程数,用pstree -p |wc -l 3 通过/proc cat /proc/17592/status 4 通过/proc ll /proc/17592/...
  • 最大进程线程数 连接数

    千次阅读 2018-10-07 18:03:02
    ======================== ========================================================= ==============================================...吞吐量(TPS)、QPS、并发、响应时间(RT)概念 开发的原因,需要对...
  • 线程数究竟设多少合理

    千次阅读 2016-08-24 12:09:57
    Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务...
  • sentinel流控设置--线程数直接失败

    万次阅读 2020-06-28 17:03:19
    为了演示效果,修改Controller代码,让线程多等待一会 import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public ...
  • cpu个数、核数、线程数、Java多线程关系的理解

    万次阅读 热门讨论 2019-10-24 11:34:43
    一 cpu个数、核数、线程数的关系 cpu个数:是指物理上,也及硬件上的核心数; 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数; 线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数【如果有...
  • Linux服务器 线程数和系统线程数

    千次阅读 2018-11-07 10:02:00
    1.查看服务器系统允许的最大线程数 ulimit -a 2. 修改配置文件 vi /etc/security/limits.d/90-nproc.conf 可以修改允许最大的线程数 3.查看当前系统比较好资源的线程 top -H 4.ps -ef|grep tomcat (查看tomcat...
  • corePoolSize:核心线程数;maximunPoolSize:最大线程数 每当有新的任务到线程池时, 第一步: 先判断线程池中当前线程数量是否达到了corePoolSize,若未达到,则新建线程运行此任务,且任务结束后将该线程保留在...
  • tomcat连接数线程数

    千次阅读 2016-12-05 16:53:37
    tomcat最大线程数的设置 Tomcat的server.xml中连接器设置如下   Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  enableLookups="false" redir
  • Tomcat线程数

    千次阅读 2015-11-12 13:34:15
    Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。 maxThreads="3000" minSpareThreads="800"/> <Connector execut
  • tomcat设置线程数

    千次阅读 2019-02-28 10:54:11
    查看Tomcat线程数 1、Tomcat默认线程数200 2、修改server.xml文件,增加maxThreads、minSpareThreads、maxSpareThreads、acceptCount 3、参数解释 maxThreads=“1000” 最大并发数 minSpareThreads=“100”///初始...
  • python多线程semaphore实现线程数控制

    千次阅读 2019-11-05 11:58:50
    前面写过一篇关于python多线程的实现的文章, 但是效果不是最佳的,写法也不是很好。通过网上学习,也了解到了semaphore这个东西。 百度给的解释:Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个...
  • linux系统中ulimit查看和更改系统限制ulimitulimit用于shell启动进程所占用的资源,可以用来设置系统的限制语法格式 ulimit [-acdfHlmnpsStvw] [size] 在/etc/security/limits.conf文件中定义 ...
  • java线程数过高原因分析

    千次阅读 2017-07-31 11:21:13
    前阵子我们因为B机房故障,将所有的流量切到了A机房,在经历了推送+自然高峰之后,A机房所有服务器都出现java线程数接近1000的情况(1000是设置的max值),在晚上7点多观察,java线程数略有下降,但还是有900+的样子...
  • 怎么确定分区?  “我应该选择几个分区?”——如果你在Kafka中国社区的群里,这样的问题你会经常碰到的。不过有些遗憾的是,我们似乎并没有很权威的答案能够解答这样的问题。其实这也不奇怪,毕竟
  • 一, Sentinel基于并发线程数流控 采用基于线程数的限流模式后,我们不需要再显式地去进行线程池隔离,Sentinel 会控制访问该资源的线程数,超出的请求直接拒绝,直到堆积的线程处理完成。相当于是以资源为维度, ...
1 2 3 4 5 ... 20
收藏数 876,692
精华内容 350,676
关键字:

线程数