精华内容
下载资源
问答
  • 单个进程中最大允许线程数

    千次阅读 2018-07-13 09:46:52
    1. 与系统资源相关,即线程栈的大小 a) 线程栈默认大小可以通过‘ulimit -s’查看,通常这个值是8M。如果用户修改了该值,则可以查看’/proc/self/limits’获取该进程相应的值 (其实是需要考虑线程栈和guard page...

    1.      与系统资源相关,即线程栈的大小

     

    a)        线程栈默认大小可以通过‘ulimit -s’查看,通常这个值是8M。如果用户修改了该值,则可以查看’/proc/self/limits’获取该进程相应的值 (其实是需要考虑线程栈和guard page的size)

    b)       在32系统上用户空间大小为3G,3 * 1024 / 8 ~= 384

    c)        程序其他数据需要占用一部分内存空间,则384 – 1 = 383; 进程中还包含一个主线程,则 383 – 1 = 382; linuxthreads 还需要一个管理线程, 则382 – 1 = 381

    d)       可以通过缩减栈的大小来上调单个进程的最大的线程数。

                            i.             Ulimit –s 设置系统默认的栈大小

                          ii.             调用 pthread_create 的时候用 pthread_attr_getstacksize 设置一个较小的栈大小

    2.      Glibc设置相关

    a)        老版本的glibc中会通过“/usr/include/bits/local_lim.h ”中的”PTHREAD_THREADS_MAX”控制单个进程中最大的线程数,即使栈再小,线程的个数也不能超过这个限制的值;除非重新编译glibc;

    b)       新版本的glibc, 这个限制作了调整(待研究)

     


    展开全文
  • 只要是有数据读写的应用都有一个最大连接数和最大线程的配置,配置合理的最大...今天我主要解释一下tomcat的最大线程数(maxThreads)、 最大等待数(acceptCount)和最大连接数(maxConnections),连接超时(conne...

    只要是有数据读写的应用都有一个最大连接数和最大线程的配置,配置合理的最大连接数和线程数,可以有效防止应用崩溃

    一. tomcat:

       tomcat是目前较为常用的Web容器,良好的配置能使用tomcat服务效率更高,
    今天我主要解释一下tomcat的最大线程数(maxThreads)、
    最大等待数(acceptCount)和最大连接数(maxConnections),连接超时(connectionTimeout)。
    
        1)maxThreads(最大线程数):每一次HTTP请求到达Web服务,
    tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200.
        2)accepCount(最大等待数):当调用Web服务的HTTP请求数达到tomcat的最大线程数时,
    还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,
    这个acceptCount就是指能够接受的最大等待数,
    默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。
        3)maxConnections(最大连接数):这个参数是指在同一时间,tomcat能够接受的最大连接数。
    一般这个值要大于maxThreads和acceptCount的和。
        4)connectionTimeout(连接超时) : 一个socket创建连接后,如何一直没有收到服务器返回数据,
    将在此时间后将此连接释放. 默认值为60000毫秒

    二.nginx:
     

    在Nginx运行的时候,会启动两种进程,
    一种是主进程master process;一种是工作进程worker process。
    
    worker_processes:配置文件中将worker_processes设置为4,启动Nginx后,
    使用进程查看命令观察名字叫做nginx的进程信息,以看到1个nginx主进程,
    master process;还有四个工作进程,worker process。
    主进程负责监控端口,协调工作进程的工作状态,分配工作任务,
    工作进程负责进行任务处理。一般这个参数要和操作系统的CPU内核数成倍数。
    
    worker_connections:这个属性是指单个工作进程可以允许同时建立外部连接的数量。
    无论这个连接是外部主动建立的,还是内部建立的。这里需要注意的是,一个工作进程建立一个连接后,
    进程将打开一个文件副本。所以这个数量还受操作系统设定的,进程最大可打开的文件数有关。
    linux要求每个进程最大能同时打开1024的文件,但是可以修改

    三. redis:

    redis通过监听一个TCP端口或socket的方式接收来自客户端的连接,当与客户端建立连接后,redis内部会进行如下操作:(1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型;(2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;(3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。
    修改方式:

       1. 修改配置文件:2.6之后版本,可以修改最大连接数配置,默认10000,
    可以在redis.conf配置文件中修改# maxclients 10000 ​
    
       2. 启动时 redis-server --maxclients 100000 -f /etc/redis.conf

    查看命令:

    127.0.0.1:6379> CONFIG GET maxclients 
    
     "maxclients" 
    
     "10000"

    四. mysql:
        mysql是最流行的数据库之一,它的优化涉及多个方面,这次只说最大连接数和最大线程数

    1. mysql的(max_connections)最大连接数默认是100, 最大可以达到16384
    2. innodb_thread_concurrency:支持的最大并发执行的线程数
    
    常用的几个命令:
    查看服务器的连接次数
    show status like 'Connections';
    查看曾经的最大连接数
    show status like 'Max_used_connections';
    查看当前连接的线程数
    show status like 'Threads_connected';
    查看当前正在运行的线程数
    show status like 'threads_running';
    查看线程缓存中的线程数
    show status like 'threads_cached';

    五. mongdb:
       

    最大连接数默认值为50;启动里边加参数  --maxConns=20000或者在 /etc/mongod.cnf (我自己见的配置文件添加 maxConns=20000)
    
    其它常用的配置项:
    #对mongo实例来说,每个host允许链接的最大链接数,这些链接空闲时会放入池中,如果链接被耗尽,任何请求链接的操作会被阻塞等待链接可用,推荐配置10
    connectionsPerHost=10
    #当链接空闲时,空闲线程池中最大链接数
    minPoolsSize=5
    #此参数跟connectionsPerHost的乘机为一个线程变为可用的最大阻塞数,超过此乘机数之后的所有线程将及时获取一个异常.eg.connectionsPerHost=10 and threadsAllowedToBlockForConnectionMultiplier=5,最多50个线程等级一个链接,推荐配置为5
    threadsAllowedToBlockForConnectionMultiplier=5
    #一个线程等待链接可用的最大等待毫秒数,0表示不等待,负数表示等待时间不确定,推荐配置120000
    maxWaitTime=120000
    #链接超时的毫秒数,0表示不超时,此参数只用在新建一个新链接时,推荐配置10,000.
    connectTimeout=10000
    #此参数表示socket I/O读写超时时间,推荐为不超时,即 0    Socket.setSoTimeout(int)
    socketTimeout=0
    #该标志用于控制socket保持活动的功能,通过防火墙保持连接活着
    socketKeepAlive=false
    #true:假如链接不能建立时,驱动将重试相同的server,有最大的重试次数,默认为15次,这样可以避免一些server因为一些阻塞操作零时down而驱动抛出异常,这个对平滑过度到一个新的master,也是很有用的,注意:当集群为复制集时,驱动将在这段时间里,尝试链接到旧的master上,而不会马上链接到新master上
    #false 当在进行socket读写时,不会阻止异常抛出,驱动已经有自动重建破坏链接和重试读操作. 推荐配置false
    autoConnectRetry=false
    #重新打开链接到相同server的最大毫秒数,推荐配置为0,如果 autoConnectRetry=true,表示时间为15s
    #com.jd.mongodbclient2.mongo.JDClientMongo.maxAutoConnectRetryTime=false
    #表示当没有手动关闭游标时,是否有一个自动释放游标对象的方法,如果你总是很小心的关闭游标,则可以将其设为false 推荐配置true
    
    #com.jd.mongodbclient2.mongo.JDClientMongo.cursorFinalizerEnabled=true
    
    #安全模式
    
    com.jd.mongodbclient2.driver.MongoDBDriver.safe=true
    #为true表示读写分离
    
    com.jd.mongodbclient2.driver.MongoDBDriver.slaveOk=false

    六. rabbitmq:
       修改RabbitMQ最大连接数.编辑/usr/lib/systemd/system/rabbitmq-server.service,在[Service]字段添加一行LimitNOFILE=65535:

    rabbitmqctl命令可以查看配置信息:

    xpfirst$rabbitmqctl status
    Status of node 'rabbit@10-101-17-13' ...
    [{pid,23658},
     ......
     {file_descriptors,
         [{total_limit,924},
          {total_used,10},
          {sockets_limit,829},
          {sockets_used,10}]},
     ......
    ]
    ...done.


      

    展开全文
  • 默认情况下,一个线程的栈要预留1M的内存空间 而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程 但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 你也可以通过...

    默认情况下,一个线程的栈要预留1M的内存空间 
    而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程 
    但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 
    你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。 
    如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。 

    即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制。 
    比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用的还是2GB。


    如果是同一台机器内的话,能起多少线程也是受内存限制的。每个线程对象都要站用非页面内存,而非页面内存也是有限的,当非页面内存被耗尽时,也就无法创建线程了。 

    如果物理内存非常大,同一台机器内可以跑的线程数目的限制值会越来越大。  

    在Windows下写个程序,一个进程Fork出2000个左右线程就会异常退出了,为什么?

    这个问题的产生是因为windows32位系统,一个进程所能使用的最大虚拟内存为2G,而一个线程的默认线程栈StackSize为1024K(1M),这样当线程数量逼近2000时,2000*1024K=2G(大约),内存资源就相当于耗尽。

    如果你的服务器端程序设计成:来一个client连接请求则创建一个线程,那么就会存在2000个限制(在硬件内存和CPU个数一定的情况下)。

    展开全文
  • Linux最大线程数限制及当前线程数查询 1、总结系统限制有: /proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值 /proc/sys/kernel/thread-max max_user_process(ulimit -u) #系统...

    Linux最大线程数限制及当前线程数查询

    1、总结系统限制有:

    /proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值

    /proc/sys/kernel/thread-max

    max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程

    /proc/sys/vm/max_map_count

    硬件内存大小

    2、Java虚拟机本身限制:

    -Xms  #intial java heap size

    -Xmx  #maximum java heap size

    -Xss  #the stack size for each thread

    3、查询当前某程序的线程或进程数

    pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l

    pstree -p 3660 | wc -l

    4、查询当前整个系统已用的线程或进程数

    pstree -p | wc -l

    1、 cat /proc/${pid}/status

    2、pstree -p ${pid}

    3、top -p ${pid} 再按H  或者直接输入 top -bH -d 3 -p  ${pid}

    top -H

    手册中说:-H : Threads toggle

    加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。

    4、ps xH

    手册中说:H Show threads as if they were processes

    这样可以查看所有存在的线程。

    5、ps -mp <PID>

    手册中说:m Show threads after processes

    这样可以查看一个进程起的线程数。

    展开全文
  • 默认情况下,一个线程的栈要预留1M的内存空间  而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程  但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。  你...
  • LINUX最大线程数及最大进程数

    万次阅读 2019-01-28 11:07:39
    查系统支持的最大线程数,一般会很大,相当于理论值 该命令在不同的机器上 值不一样。 在centos 服务器上面 : 513845 在ubuntu16.04 pc机上面 : 62667 两者机器配置 CPU 和内存 都不一样 cat /proc/sys/kernel/pid_...
  • Java线程池的核心线程数和最大线程数

    千次阅读 多人点赞 2021-03-14 19:24:35
    } 线程池有这么几个重要的参数: corePoolSize=> 线程池里的核心线程数量 maximumPoolSize=> 线程池里允许有的最大线程数量 keepAliveTime=> 空闲线程存活时间 unit=> keepAliveTime的时间单位,比如分钟,小时等 ...
  • CentOS7查看系统最大线程数

    千次阅读 2020-01-09 23:51:33
    查询系统最大支持线程数 cat /proc/sys/kernel/threads-max 查询当前已用线程数量 pstree -p | wc -l
  • 连接达到最大时,允许排队的最大连接(Maximum queue length for incoming connection requests when all possible request processing threads are in use.),默认为100; 2. server.tomcat.max-connections...
  • .net framework线程池最大线程数

    千次阅读 2014-03-17 15:48:58
    .net framework4.0,32位windows线程池最大线程数,cpu核数*1023 .net framework4.0,64位windows线程池最大线程数,cpu核数*32768 .net framework3.0,线程池最大线程数,cpu核数*250 .net framework2.0,线程池...
  • 单个进程最大线程数

    千次阅读 2014-08-20 10:21:48
    windows 操作系统中允许最大线程数。   =========================================================================== 默认情况下,一个线程的栈要预留1M的内存空间 而一个进程中可用的内存空间...
  • 为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接,超过这个连接的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接负载均衡的作用。 动手去做 一开始根据故障todoList...
  • 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...
  • ThreadPoolExecutor是JDK中的线程池实现,这个类实现了一个线程池需要的各个方法,它实现了任务提交、线程管理、监控等等方法。 来看看ThreadPoolExecutor类的构造方法源码,其他创建线程池的方法最终都会导向这个...
  • Tomcat最大线程数的设置

    千次阅读 2020-04-21 12:32:15
    如何加大tomcat连接数 在tomcat配置文件server.xml中的配置中,和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大...
  • 看到了网上关于JVM最大线程数问题的讨论,通过查阅资料加试验,整理了一些笔记,分享在此。 首先说明两个概念:jvm限制,系统限制: - jvm限制:jvm本身内存等因素对程序结果的影响,主要涉及参数:-Xms -Xmx -...
  • 今天来了解一下linux里面的一些小知识: (一)Linux系统中最大可以起多少个进程?...如何查看linux系统默认的最大进程,这里以centos7(x64)作为例子: [root@es1 ~]# cat /proc/sys/kernel/pid_max
  • linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX 这个限制可以在 /usr/include/bits/local_lim.h 中查看 对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于...
  • 修改linux系统用户最大线程数限制

    千次阅读 2018-06-26 11:47:13
    ulimit 的作用 ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软...ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件(max open files)和可同时运行的最大进程(max u...
  • 文章来源:风云社区 ...max_connections:支持的最大并发连接 The maximum permitted number of simultaneous client connections show variables like 'innodb_thread_concurrency' innod...
  • tomcat最大线程数的设置

    千次阅读 2015-06-17 08:47:23
    tomcat在配置时设置最大线程数,当前线程数超过这个数值时会出错,那么有没有办法捕获到这个错误,从而在client端显示出错信息?   2. 如何加大tomcat连接数 在tomcat配置文件server.xml中的配置中,和...
  • 没满,创建一个工作线程来执行任务。满了,则进入下个流程;其次线程池判断工作队列(workQueue)是否已满?没满,则将新提交的任务存储在工作队列里。满了,则进入下个流程;最后线程池判断整个线程池...
  • Linux线程数和系统线程数查看

    千次阅读 2020-07-08 15:07:27
    1.查看服务器系统允许最大线程数 ulimit -a 2. 修改配置文件 vim /etc/security/limits.d/20-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #...
  • Win 7, Server 2008 R2最大线程数限制

    万次阅读 2012-03-18 16:09:35
    最近在做压力测试时发现Win 7 和 Server 2008 R2 系统内线程数设为1500则...最大线程数: 32bit:1450 64bit:100000 测试代码如下: #include "stdafx.h" #include #include DWORD CALLBACK ThreadProc(v
  • Linux下能够创建的最大线程数

    千次阅读 2013-01-19 11:13:40
    1. 首先可以运行下面的程序检查,检查你现在的系统总共能创建多少个线程。我的系统上是i=380,也就是最多能创建380个线程。后面分析为什么是它。 // maxthread.cc , compile: gcc maxthread.cc -o thread -lpthread...
  • tomcat设置线程数

    万次阅读 2019-02-28 10:54:11
    查看Tomcat线程数 1、Tomcat默认线程数200 2、修改server.xml文件,增加maxThreads、minSpareThreads、maxSpareThreads、acceptCount 3、参数解释 maxThreads=“1000” 最大并发数 minSpareThreads=“100”///初始...
  • JVM最大可支持线程数计算方法

    千次阅读 2016-09-15 23:28:00
    JVM最大创建线程数量由JVM堆内存大小、线程的Stack内存大小、系统最大可创建线程数(Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响。具体如下: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 323,185
精华内容 129,274
关键字:

允许最大线程数