能跑java的服务器_一台java服务器可以跑多少个线程?

一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。

f1930596947d

京东自研UMP监控分析

打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下:

f1930596947d

IBM Thread and Monitor Dump Analyzer for Java

共计1661个线程,和监控数据得出的吻合。但这个数量应该是大了,我们都知道线程多了,就会有线程切换,带来性能开销。

当时就想到一台java服务器到底可以跑多少个线程呢?跟什么有关系?现整理如下。

每个线程都有一个线程栈空间通过-Xss设置,查了一下我们服务器的关于jvm内存的配置

-Xms4096m

-Xmx4096m

-XX:MaxPermSize=1024m

只有这三个,并没有-Xss 和-XX:ThreadStackSize的配置,因此是走的默认值。几种JVM的默认栈大小

f1930596947d

可以通过如下命令打印输出默认值的大小,命令:jinfo -flag ThreadStackSize  ;例如

[root@host-192-168-202-229 ~]#jinfo -flag ThreadStackSize 1807

-XX:ThreadStackSize=1024

不考虑系统限制,可以通过如下公式计算,得出最大线程数量

线程数量=(机器本身可用内存-JVM分配的堆内存)/Xss的值,比如我们的容器本身大小是8G,堆大小是4096M,走-Xss默认值,可以得出 最大线程数量:4096个。

根据计算公式,得出如下结论:

结论1:jvm堆越大,系统创建的线程数量越小。

结论2:当-Xss的值越小,可生成线程数量越多。

我们知道操作系统分配给每个进程的内存大小是有限制的,比如32位的Windows是2G。因此操作系统对一个进程下的线程数量是有限制的,不能无限的增多。经验值:3000-5000左右(我没有验证)。

刚才说的是不考虑系统限制的情况,那如果考虑系统限制呢,主要跟以下几个参数有关系

/proc/sys/kernel/pid_max 增大,线程数量增大,pid_max有最高值,超过之后不再改变,而且32,64位也不一样

/proc/sys/kernel/thread-max 系统可以生成最大线程数量

max_user_process(ulimit -u)centos系统上才有,没有具体研究

/proc/sys/vm/max_map_count 增大,数量增多

线程是非常宝贵的资源,我们要严格控制线程的数量,象上面我们的截图情况,显然线程数量过多。这个是跟我们自己配置了fixed大小的线程池有关系。京东有自己的rpc框架jsf,里面可以针对每个服务端口设置线程大小。转载请标明出处,并附上原文链接。遵守行业道德。

喜欢的最好方式是点击 关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php取json子对象属性,php中输出json对象的值(实现方法)

实例如下所示:$json {"report":{"date":"2012-04-10","content":"abcdefght"}};$arr (array) json_decode($json,true);echo 当前日期是:. $arr[report][date];echo "";echo ;print_r($a…

php mysql 表关联,mysql的多表关联_MySQL

bitsCN.commysql的多表关联数据库中经常要用到多个表的关联。mysql的关联主要包括inner join,left join,right join三种,下面分别加以介绍,并举例说明。顾名思义,inner join集合了两个表的信息,只有都包含的…

ulink php,【转载】15款USB数字界面横向评测(对比顶级CD转盘)!多看点!

还有一则有趣的回帖,一位纽约的烧友认为作者没有尝试何庆华最新的数字界面非常可惜,他认为何先生自主开发的DI-V3电源套件非常之牛,甚至超过了AP1PP的水准(不少人认为这个组合有一点点过于分析,不如何先生的作品水润)。他认为以他…

php取掉字符串第一位支付,php怎样去掉字符串中的第一个字符

php去掉字符串中的第一个字符的方法:可以利用substr()函数来实现。substr()函数可以返回字符串的提取部分,如果失败则返回false,或者返回一个空字符串。substr() 函数返回字符串的提取部分,如果失败则返回 FALSE,或者返…

matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

somomo91你不觉得信息量太少了么?摸不着头脑,zhouxiaobo是啊,信息量太少,LZ能详细描述一下你的问题吗或者直接给出你的数据和要求2012jxyl引用回帖:zhouxiaobo at 2013-06-06 09:44:49是啊,信息量太少,LZ能…

php验证码背景图是数字,ThinkPHP5.0.20验证码背景图片

tp5配置验证码相关问题一、验证码背景图片及tp中文验证码5.0.1及以上支持者在应用配置目录(application)下面 extra 子目录内配置captcha.php文件;配置参数如下:2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY,// 验证码字体大小(px)fontSize &g…

c mysql安装教程,Mysql安装教程_完成版(吐血式安装)

每次在不同操作系统中安装oracle和mysql这些常规数据库,步骤就那么点儿,但是遇见的错误却是千差万别。。记一次耗时两天的mysql数据库安装新得,有耐心,有毅力,憋生气。1.官网上下载免安装的版本(也就是下载下来直接解压…

oracle替代变量输出,【Oracle】替代变量

1.替代变量通常而言,替代变量的前缀是&或者&&区别:& 用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值&&用来创建一个持久变量,当用&&命令引用这个变量时&#xff…

oracle 常用故障,Oracle常见问题解决方案汇总

1、Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务数据库服务器崩了,而且尝试重启服务和重启机器都解决不了问题打开cmd窗口C:\Users\hxt>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期三 12月 5 11:39:54 2018Co…

特洛伊木马脚本linux,手动查杀特洛伊木马

首先也是最重要的,重新启动电脑到安全模式下,让所有文件都可见。然后进入到C:看看根目录是否存在不熟悉的文件,如果有,且日期为发现中毒现象当天,则删除之。接着到c:\windows,首先按照修改时间顺序排列图标…

linux添加虚拟硬盘命令,虚拟机linux扩盘命令操作

虚拟机linux扩展硬盘分原有硬盘上增加及新增硬盘,二者实现差不多。扩盘:fdisk -l查看是哪个盘扩盘了,如sdb重启后,将sdb刷新pv: pvresize /dev/sdb,pvdisplay查看是否增加了,再将逻辑卷分区VG(L…

mac ssh远程登录linux,MAC使用SSH远程登录

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Sun 20 December 2015tags: 备忘录MAC使用SSH远程登录打开sshMac Terminal是自带SSH的,可以用whereis来看看$ whereis ssh但是在现有进程中是找不到ssh…

四叶草引导windows和linux,Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像...

作为一个穷逼大学生,想搞iOS开发 买不起Mac只能鼓捣鼓捣黑苹果啦。。。。。。。。之前我的电脑通过变色龙引导的方式装了个OSX10.10和win8.1双系统,因为自学的是Swift语言之前装的OSX10.10.4的Xcode(6.多版本的)只支持到Swift1.2,所以现在要装…

linux bash 字符串 连接,Linux Bash 中字符串操作

Linux Bash 中字符串操作所谓 "子字符串" 就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有多种方法可以从中把数字或指定部分字符串抽取出来.本文会向你展示在 bash shell 中如何获取或者说查找出子…

maven下载源码linux,Maven 下载 源码和javadoc 命令

摘要:我们在写代码时候,往往是想查看一下源码,看看源码的一些细节内容。一般情况下,在IDE(如eclipse)中近仅仅只需按住ctrl 点击对应的方法即可进入对应的源码部分。但是有些时候很多依赖项并不会默认下载对应的源码,因…

Unity将来时:IL2CPP是什么?

Unity3D 想必大家都不陌生,独立游戏制作者们很多人都在用它,甚至一些大公司也用在很商业的游戏制作上。Unity3D最大的一个特点是一次制作,多平台部署,而 这一核心功能是靠Mono实现的。可以说Mono是Unity3D核心的核心,是…

手游频繁崩溃”闪退”? 从程序上找原因

手游频繁崩溃”闪退”? 从程序上找原因 作为玩家,当游戏crash的时候是什么心情,如果这个游戏玩起来还不错的话,那我可能还会打开第二次,如果这个游戏一般的话我可能直接怒删了。当多次出现闪退crash的时候,…

汇编语言属于C语言吧,汇编语言和c语言的区别是什么

区别:汇编语言的效率高,对硬件的可操控性更强,体积小,不易维护,可移植性很差;c语言的效率比较低,硬件可操控性比较差,目标代码体积大,容易维护,可移植性很好。…

一款已上市MMO手游地图同步方案总结

1. 客户端地图格子的相关知识在2.5D的MMO游戏里,角色是通过3D的方式渲染,2D的地图是通过2D的方式显示,所以在客户端一般会有三个坐标系: a) 3D坐标系:所有需要3D渲染的角色和光效,都以3D坐标系中定位。 b) …

Unity 内存管理

一:资源类型 GameObject, Transform, Mesh, Texture, Material, Shader, noxss和各种其他Assets。 二:AssetBundle文件内存镜像 来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法。也可以来自Memory,用…