1. 首页
  2. IT资讯

一台 Java 服务器可以跑多少个线程?

“u003Cpu003E技术博文,及时送达u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRelVn4tG7zucng” img_width=”535″ img_height=”10″ alt=”一台 Java 服务器可以跑多少个线程?” inline=”0″u003Eu003Cpu003E作者 | 新栋BOOKu003Cu002Fpu003Eu003Cpu003E链接 | u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003Ewwwu003Cu002Fiu003E.jianshuu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E.comu003Cu002Fiu003Eu002Fpu002Ff1930596947du003Cu002Fpu003Eu003Cpu003E一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002FRevs17HGW8VrQs” img_width=”740″ img_height=”289″ alt=”一台 Java 服务器可以跑多少个线程?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003E京东自研UMP监控分析u003Cu002Fpu003Eu003Cpu003E打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRevs17UCphxYT3″ img_width=”638″ img_height=”728″ alt=”一台 Java 服务器可以跑多少个线程?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003EIBM Thread and Monitor Dump Analyzer for Javau003Cu002Fpu003Eu003Cpu003E共计u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E166u003Cu002Fiu003E1个线程,和监控数据得出的吻合。但这个数量应该是大了,我们都知道线程多了,就会有线程切换,带来性能开销。u003Cu002Fpu003Eu003Cpu003E当时就想到一台java服务器到底可以跑多少个线程呢?跟什么有关系?现整理如下。u003Cu002Fpu003Eu003Cpu003E每个线程都有一个线程栈空间通过-Xss设置,查了一下我们服务器的关于jvm内存的配置u003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003E-Xms4096mu003Cu002Fcodeu003Eu003Ccodeu003E-Xmx4096mu003Cu002Fcodeu003Eu003Ccodeu003E-XX:MaxPermSize=1024mu003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cpu003E只有这三个,并没有-Xss 和-XX:ThreadStackSize的配置,因此是走的默认值。几种JVM的默认栈大小u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002FRevs17c4zmjVGL” img_width=”427″ img_height=”222″ alt=”一台 Java 服务器可以跑多少个线程?” inline=”0″u003Eu003Cpu003E可以通过如下命令打印输出默认值的大小,u003Cstrongu003E命令:jinfo -flag ThreadStackSizeu003Cu002Fstrongu003E;例如u003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003E[root@host-192-168-202-229 ~]#jinfo -flag ThreadStackSize u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E180u003Cu002Fiu003E7u003Cu002Fcodeu003Eu003Cbru003Eu003Ccodeu003E-XX:ThreadStackSize=1024u003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cpu003E不考虑系统限制,可以通过如下公式计算,得出最大线程数量u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E线程数量=(机器本身可用内存-JVM分配的堆内存)u002FXss的值u003Cu002Fstrongu003E,比如我们的容器本身大小是8G,堆大小是4096M,走-Xss默认值,可以得出 最大线程数量:4096个。u003Cu002Fpu003Eu003Cpu003E根据计算公式,得出如下结论:u003Cu002Fpu003Eu003Cpu003E结论1:jvm堆越大,系统创建的线程数量越小。u003Cu002Fpu003Eu003Cpu003E结论2:当-Xss的值越小,可生成线程数量越多。u003Cu002Fpu003Eu003Cpu003E我们知道操作系统分配给每个进程的内存大小是有限制的,比如32位的Windows是2G。因此操作系统对一个进程下的线程数量是有限制的,不能无限的增多。经验值:3000-5000左右(我没有验证)。u003Cu002Fpu003Eu003Cpu003E刚才说的是不考虑系统限制的情况,那如果考虑系统限制呢,主要跟以下几个参数有关系u003Cu002Fpu003Eu003Cpu003Eu003Cemu003Eu002Fprocu002Fsysu002Fkernelu002Fpid_max 增大,线程数量增大,pid_max有最高值,超过之后不再改变,而且32,u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E64u003Cu002Fiu003E位也不一样u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cemu003Eu002Fprocu002Fsysu002Fkernelu002Fthread-max 系统可以生成最大线程数量u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cemu003Emax_user_process(ulimit -u)centos系统上才有,没有具体研究u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cemu003Eu002Fprocu002Fsysu002Fvmu002Fmax_map_count 增大,数量增多u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003E线程是非常宝贵的资源,我们要严格控制线程的数量,象上面我们的截图情况,显然线程数量过多。这个是跟我们自己配置了fixed大小的线程池有关系。京东有自己的rpc框架jsf,里面可以针对每个服务端口设置线程大小。u003Cu002Fpu003Eu003Cp class=”pgc-end-source”u003E-END-u003Cu002Fpu003Eu003Cp class=”pgc-end-source”u003E如果看到这里,说明你喜欢这篇文章,请转发、点赞。u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E微信u003Cu002Fiu003E搜索「web_resource」,u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E关注u003Cu002Fiu003E后回复「进群」或者扫描下方二维码即可进入无广告交流群。u003Cu002Fpu003Eu003Cp class=”pgc-end-source”u003E↓扫描二维码进群↓u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRclVELq4D7W5d4″ img_width=”499″ img_height=”642″ alt=”一台 Java 服务器可以跑多少个线程?” inline=”0″u003E”

原文始发于:一台 Java 服务器可以跑多少个线程?

主题测试文章,只做测试使用。发布者:℅傍ㄖ免沦陷dε鬼,转转请注明出处:http://www.cxybcw.com/17934.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code