java xss 默认值_一台 Java 服务器可以跑多少个线程?

原标题:一台 Java 服务器可以跑多少个线程?

转自:简书,作者:新栋BOOK

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

dcfa8bb87f08f61fc22459949ad7b853.png

京东自研UMP监控分析

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

e384762a36baecb404031cf8540e2745.png

IBM Thread and Monitor Dump Analyzer for Java

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

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

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

-Xms4096m

-Xmx4096m

-XX:MaxPermSize=1024m

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

69560c8ee452206a4f981f6ae669cbf3.png

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

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

-XX:ThreadStackSize=1024

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

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

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

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

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

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

/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,里面可以针对每个服务端口设置线程大小。

参考资料:

最近面试BAT,整理一份面试资料《 大厂Java面试通关指北》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复BAT领取,更多内容陆续奉上。返回搜狐,查看更多

责任编辑:

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

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

相关文章

mysql引擎inndbmmyisam_Mysql中MyISAM引擎和InnoDB引擎的比较

结论如果不清楚自己应该用什么引擎,那么请选择InnoDB,Mysql5.5的版本默认引擎都是InnoDB,早期的Mysql版本默认的引擎是MyISAMMyISAM 和 InnoDB的适用场景MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,查…

JAVA入门级教学之(连接运算符)

/*关于字符串的连接运算符 关于java中的""运算符: 1.加号运算符在java语言中有两个作用: *加法运算,求和 *字符串的连接运算 2.当""运算符两边的数据都是数字的话,一定是进行加法运算。 3.当"…

java android aes加密解密_AES加密解密在JAVA和ANDROID下互通

昨天外包安卓的那个人说AES的加解密结果不一样。于是百度搜索发现还真是!贴上AES加密核心:Cipher cipher Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);CBC是工作模式,AES一共同拥有电子passw…

JAVA入门级教学之(三元运算符)

/* 三元运算符/三目运算符/条件运算符 1.语法规则: 布尔表达式?表达式1:表达式2; true 执行表达式1 false 执行表达式2 */ public class OperatorTest06 {public void main(String[] args) { //编译错误 //10; //男;//布尔类型的变量 boolean sexf…

java 加密 数字_java 加密数字签名

1)消息摘要:这是一种与消息认证码结合使用以确保消息完整性的技术。 主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA- 1,jdk1.5对上面都提供…

JAVA入门级教学之(if语句)

/* 关于java语言中的if语句,属于选择结构 if语句又被称为分支语句/条件控制语句1.if语句的语法结构:四种编写方式 第一种:条件为真,执行大括号内容 条件为假,*跳出*大括号内容 if(布尔表达式){ java…

python怎么处理数据标注_在python中将数据标记为敏感

编辑我提出了一个使用ctypes(反过来使用c)将内存归零的解决方案。import sysimport ctypesdef zerome(string):location id(string) 20size sys.getsizeof(string) - 20memset ctypes.cdll.msvcrt.memset# For Linux, use the following. Change the 6 to whatever it is o…

JAVA入门级教学之(switch语句)

/* 关于switch语句(我称为匹配语句): 1.switch语句也属于选择结构,也是分支语句 2.switch语句的语法结构: 一个比较完整的switch语句应该这样编写: //case有匹配的意思,相当于拿数据匹配&#x…

java实现验证码图片_java实现验证码图片

1 packagesip.utils;2 importjava.awt.Color;3 importjava.awt.Graphics2D;4 importjava.awt.geom.AffineTransform;5 importjava.util.Random;67 /**8 * 验证码图片生成器9 *10 *authorWuZhengFei11 *12 */13 public classIdentityCode {14 /**15 * 验证码图片的宽度。16 */17…

JAVA入门级教学之(for循环)

/* 1.循环结构: 在程序中有一些代码段需要重复执行,假如没有循环结构, 就需要重复写代码。 将来把需要反复执行的代码片段放到"循环",再联合计数器,共同控制这段需要反…

如何做推荐系统 java_Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统

今天大部分时间都在写业务代码,然后算是从无到有的配置了下spring与mybatis的集成。SpringMVCMybatis Web开发流程配置数据源在applicationContext.xml中引入数据源的配置:在spring-my-datasource.xml中配置数据源相关的内容:配置完成后&…

JAVA入门级教学之(while循环语句)

/* while循环语句: 1.while(布尔表达式) { 循环体; } 2.while循环的执行原理: 先判断布尔表达式的结果: *true …

JAVA入门级教学之(do...while循环)

/* do...while: 1.do...while循环的语法结构: do{ 循环体; }while(布尔表达式); 2.do...while循环的执行原理: 3.do...while循环的执行次数: …

java 接口表单提交_Java http 调用接口提交表单以及文件

Java HttpURLConnection 使用/****/package com.demo.java;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnectio…

JAVA入门级教学之(break跳出)

/* 关于java控制语句中的break语句: 1.break是java语言中的关键字,被翻译为"中断/折断" 2.break";"可以成为一个单独完整的java语句; 3.break语句使用在switch语句中,用来终结swit…

java 文件通道_Java NIO(四)文件通道

文件通道通道是访问I/O服务的导管,I/O可以分为广义的两大类:File I/O和Stream I/O。那么相应的,通道也有两种类型,它们是文件(File)通道和套接字(Socket)通道。文件通道指的是FileChannel,套接字通道则有三个&#xff…

JAVA入门级教学之(continue)

/* continue语句: 1.continue表示:继续/下一个的意思 2.continue;也是一个continue关键字加一个分号构成一个单独的完整的java语句, 主要出现循环语句中用来控制循环的执行。 …

java算法实验标尺问题_在codeigniter项目中使用标尺库

我正在尝试将下面链接中可用的标尺库集成到我的codeigniter项目中 .我使用这些链接中给出的步骤安装和配置它 . 但仍然无法使用库中的方法 . 我尝试了库中的示例代码,但它不起作用 . 看起来Ruler库没有得到我的项目,因此方法没有解决 . 寻求帮助以实现这…

JAVA入门级教学之(方法-1)

目录 JAVA入门级教学之(方法-1) 1.以下程序不使用"方法",分析一下程序会存在哪些优缺点? 2.方法的本质:是一段代码片段,可以完成特定功能,可以重复利用 3.注意:方法定义在…

java设计模式初探之装饰者_JAVA设计模式初探之装饰者模式

装饰者模式1、意图: 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。2、适用环境(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责…