精华内容
下载资源
问答
  • Java服务器线程查看和线程优化

    万次阅读 2017-07-18 10:48:58
    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

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





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

    图:京东自研UMP监控分析

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

    图:IBM Thread and Monitor Dump Analyzer for Java

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

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

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

    1
    2
    3
    -Xms4096m
    -Xmx4096m
    -XX:MaxPermSize=1024m

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

    图:JVM的默认栈大小

    可以通过如下命令打印输出默认值的大小,命令:

    1
    jinfo -flag ThreadStackSize

    例如:

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

    展开全文
  • 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...

    1.查看服务器系统允许的最大线程数
    ulimit -a
    在这里插入图片描述
    2. 修改配置文件
    vi /etc/security/limits.d/90-nproc.conf
    可以修改允许最大的线程数
    3.查看当前系统比较好资源的线程
    top -H
    在这里插入图片描述
    4.ps -ef|grep tomcat (查看tomcat进程)如tomcat pid进程号为 5750

    ps -Lf |wc -l -f 为全格式形式 wc为管道命令 word count 统计 -l 为统计行数
    在这里插入图片描述

    5.查询当前整个系统已用的线程或进程数
    pstree -p|wc -l
    在这里插入图片描述
    3,4为排查当前系统某个进程下的线程数,进而和5比较是否超出了当前系统允许的最大线程数,防止系统开辟不出新的线程,进而web应用抛出了can not create a native thread 的异常
    6.top -p pid 动态查看某个进程的资源消耗情况
    在这里插入图片描述

    展开全文
  • 每个线程都有一个线程栈空间通过-Xss设置,查了一下我们服务器的关于jvm内存的配置 -Xms4096m -Xmx4096m -XX:MaxPermSize=1024m 只有这三个,并没有-Xss 和-XX:ThreadStackSize的配置,因此是走的默认值。几种JVM的...

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

    -Xms4096m

    -Xmx4096m

    -XX:MaxPermSize=1024m

    只有这三个,并没有-Xss 和-XX:ThreadStackSize的配置,因此是走的默认值。几种JVM的默认栈大小:
    在这里插入图片描述

    -Xss 是指设定每个线程的堆栈大小
    -XX:ThreadStackSize 设置线程数大小,会反向设置-Xss大小

    可以通过如下命令打印输出默认值的大小,命令: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有最高值,超过之后不再改变,而且3264位也不一样
    
    /proc/sys/kernel/thread-max 系统可以生成最大线程数量
    
    max_user_process(ulimit -u)centos系统上才有,没有具体研究
    
    /proc/sys/vm/max_map_count 增大,数量增多
    
    
    

    参考:
    《一台java服务器可以跑多少个线程?》
    《JVM调优总结 -Xms -Xmx -Xmn -Xss(转)》

    展开全文
  • 那么一个web服务器(Tomcat)中一个请求过来,就会创建一个线程来处理,理论上不是只能最多处理2000并发请求了?而nginx好像可以处理更大并发(上万个)。这是怎么实现的(不是每个请求生成一个线程?)?另外一个...
  • 查看liunx服务器线程

    千次阅读 2013-09-25 16:07:21
    查看最大线程: 命令:cat /proc/sys/kernel/threads-max  ulimit User limits - limit the use of system-wide resources.Syntax ulimit [-acdfHlmnpsStuv] [limit]Options -S Change and report the soft ...

    查看最大线程:

    命令:cat /proc/sys/kernel/threads-max

     ulimit


    User limits - limit the use of system-wide resources.

    Syntax
          ulimit [-acdfHlmnpsStuv] [limit]

    Options

       -S   Change and report the soft limit associated with a resource. 
       -H   Change and report the hard limit associated with a resource. 

       -a   All current limits are reported. 
       -c   The maximum size of core files created. 
       -d   The maximum size of a process's data segment. 
       -f   The maximum size of files created by the shell(default option) 
       -l   The maximum size that may be locked into memory. 
       -m   The maximum resident set size. 
       -n   The maximum number of open file descriptors. 
       -p   The pipe buffer size. 
       -s   The maximum stack size. 
       -t   The maximum amount of cpu time in seconds. 
       -u   The maximum number of processes available to a single user. 
       -v   The maximum amount of virtual memory available to the process. 

    ulimit provides control over the resources available to the shell and to processes started by it, on systems that allow such control.

    If limit is given, it is the new value of the specified resource. Otherwise, the current value of the soft limit for the specified resource is printed, unless the `-H' option is supplied.

    When setting new limits, if neither `-H' nor `-S' is supplied, both the hard and soft limits are set.

    Values are in 1024-byte increments, except for `-t', which is in seconds, `-p', which is in units of 512-byte blocks, and `-n' and `-u', which are unscaled values.

    The return status is zero unless an invalid option is supplied, a non-numeric argument other than unlimited is supplied as a limit, or an error occurs while setting a new limit.

    ulimit is a bash built in command.

    Ulimit命令
    设置限制     可以把命令加到profile文件里,也可以在/etc/security/limits.conf文件中定义
    限制。
    命令参数
    -a      显示所有限制
    -c      core文件大小的上限
    -d      进程数据段大小的上限
    -f      shell所能创建的文件大小的上限
    -m     驻留内存大小的上限
    -s      堆栈大小的上限
    -t      每秒可占用的CPU时间上限
    -p     管道大小
    -n     打开文件数的上限
    -u     进程数的上限
    -v     虚拟内存的上限
    除可用Ulimit命令设置外,也可以在/etc/security/limits.conf文件中定义限制。
    domino    type    item    value
    domino是以符号@开头的用户名或组名,*表示所有用户,type设置为hard or soft。item指
    定想限制的资源。如cpu,core nproc or maxlogins。value是相应的限制值。

    linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX

    这个限制可以在 /usr/include/bits/local_lim.h 中查看

    对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源

    这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M

    可以写一段简单的代码验证最多可以创建多少个线程

    1. int main()  
    2. {  
    3.     int i = 0;  
    4.     pthread_t thread;  
    5.  
    6.     while (1) {  
    7.              if (pthread_create(&thread, NULL, foo, NULL) != 0)  
    8.         return;  
    9.             i ++;  
    10.         printf("i = %d\n", i);  
    11.     }  


    试验显示,在 linuxthreads 上最多可以创建 381 个线程,之后就会返回 EAGAIN

    在 nptl 上最多可以创建 382 个线程,之后就会返回 ENOMEM

    这个值和理论完全相符,因为 32 位 linux 下的进程用户空间是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,但是实际上代码段和数据段等还要占用一些空间,这个值应该向下取整到 383,再减去主线程,得到 382。

    那为什么 linuxthreads 上还要少一个线程呢?这可太对了,因为 linuxthreads 还需要一个管理线程

    为了突破内存的限制,可以有两种方法

    1) 用 ulimit -s 1024 减小默认的栈大小
    2) 调用 pthread_create 的时候用 pthread_attr_getstacksize 设置一个较小的栈大小

     

    展开全文
  • c语言多线程并发服务器

    千次阅读 2019-08-15 16:38:30
    文章目录c语言多线程并发服务器服务端客户端 c语言多线程并发服务器 服务端 #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h...
  • linux 网络编程之服务器线程限制

    千次阅读 2016-07-26 20:20:25
    实验基础:服务器和客户端,服务器为每个客户端连接开辟线程,验证服务器线程最大支持数目 实验环境:ubuntu 12.04 实验结果: 1、一切系统默认设置的情况下,最多接收了381个链接,也即开启了381个线程。 实验...
  • 线程服务器

    千次阅读 2010-07-22 10:30:00
    3 典型的多线程服务器线程模型 3 One loop per thread 4 线程池 4 归纳 5 4 进程间通信与线程间通信 5 5 进程间通信 6 6 线程间同步 7 互斥器 (mutex) 7 跑题:非递归的 ...
  • 问题一: 如此高的数据量, 一台4核的cpu服务器,通常最大开启多少个线程用于http发送? 问题二: 按上面的数据,可以开启多线程发送请求,那么一台机器每秒可以处理多少条记录? 问题三: 部署多少台服务器,可以...
  • 远程服务器线程拷贝

    千次阅读 2015-01-16 18:09:59
    开发环境位于远程Linux服务器,且服务器是跨地域的(隔着好几个省啦,是不是很高大上!),每次编译完成要下载版本都是一个痛苦而漫长的过程,下载速度一般在100-200KB/s,有时甚至只是几十KB,极大的影响了工作效率...
  • 下表显示了针对各种 CPU 与SQL Server版本的组合自动配置的最大工作线程数。 CPU 数 32 位计算机 64 位计算机 <= 4 个处理器 256 512 8 个处理器 288 576 16 个处理器 352 704 ...
  • 线程服务器模型

    千次阅读 2013-04-10 16:20:19
    本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与...文中的“多线程服务器”是指运行在 Linux 操作系统上的独占式网络应用程序。硬件平台为 Intel x64 系列的多
  • 查找线程最大的java程序4. 导出问题程序的线程日志5. 找到问题代码6. 解决方案 问题介绍: 测试服务器突然无法连接,ssh登录不上。只有重启才能解决。重启一天后,又连接不上了。 于是有了下面的排查过程,最终...
  • 线程池最大线程

    千次阅读 2012-03-26 11:41:28
    .net4.0,32位机器最大线程数,每核1023个  .net4.0,64位机器最大线程数,每核32768个  .net3.0,最大线程数,每核250个 ...在服务器端环境,比如iis下的asp.net最小线程数会更大可能超过50
  • 线程在随着cpu发展应用的是越来越多,游戏场景因为其在服务器所占的数据量与逻辑复杂度的原因必须依赖于它。为什么场景要采用多线程?场景的线程是怎样的?场景的线程又是如何创建的?场景的线程又是怎样管理的?...
  • java的线程开启,默认... 另外我想知道的是,在linux服务器上,linux默认给每个线程的内存是10M,那java在linux上开启线程到底是拿到1M还是10M的内存?不管是哪种方式, 一台4G的服务器,最多又能开多少个java线程呢?
  • 一般的多线程TCP服务器,是连接一个客户端,创建一个子线程,把它放到这个子线程中运行,这样能提高效率,但在大量客户端的时候线程频繁调度也会浪费性能,所以这里提出一种新的多线程方式,可设置最大线程数,一个...
  • 通过服务器中转消息,实现多客户端之间的对话。客户端输入格式为:接受消息的客户端编号+空格+要发出的消息。客户端输入end下线。...1.服务端服务端为连接上的每一个客户端,提供一个接受线程,监听接受消息,
  •  使用线程池的时候,有时候需要考虑服务器最大线程数目和程序最快执行所有业务逻辑的取舍。 并非逻辑线程越多也好,而且新的逻辑线程必须会在线程池的等待队列中等待 ,直到线程池中工作的线程执行完毕, 才会有...
  • linux服务器查看进程、线程数量

    万次阅读 2019-10-23 09:07:22
    linux服务器查看进程、线程数量 查看进程总数 ps -ef | wc -l 查看某个服务的进程数 eg:http服务: ps -ef | grep httpd | wc -l 查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u 查看...
  • 线程服务器的常用编程模型

    万次阅读 多人点赞 2010-02-12 17:07:00
    线程服务器的常用编程模型 陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice2009 Feb 12 建议阅读本文 PDF 版下载: http://files.cppblog.com/Solstice/multithreaded_server.pdf 本文主要讲我个人在多...
  • Reactor 模式的 JAVA NIO 多线程服务器

    千次阅读 2012-08-30 00:19:45
    JAVA NIO 多线程服务器 1.2版 Reactor 模式的 JAVA NIO 多线程服务器 从JDK 1.4开始,Java的标准库中就包含了NIO,即所谓的“New IO”。其中最重要的功能就是提供了“非阻塞”的IO,当然包括了Socket。...
  • JVM最大线程

    千次阅读 2019-08-27 14:23:27
    JVM最大创建线程数量由JVM堆内存大小、线程的Stack内存大小、系统最大可创建线程数(Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响。具体如下: ...
  • 网络socket编程实现并发服务器——多线程编程

    万次阅读 多人点赞 2019-04-05 00:20:19
    线程编程
  • 一台java服务器可以跑多少个线程

    千次阅读 2018-12-13 11:35:46
    一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。   打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下:   共计1661个线程,和...
  • tomcat是目前较为常用的Web容器,那么怎么配置tomcat才能使得自己的服务效率更高,今天我主要解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections)。 maxThreads...
  • 每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请求,tomcat默认为200; 2)accepCount(最大等待数) 当调用Web服务的HTTP请求数达到...
  • WSAEventSelect多线程服务器实现示例

    千次阅读 2010-10-12 13:58:00
    从CSDN的一个xd那里看到这个代码,觉得对WSAEventSelect模型的多线程实现做的非常好,代码行文风格和代码质量都是非常不错。我做了些小的改动学习之用。如果你也感兴趣不妨一起留言讨论讨论。
  • LINUX最大线程数及最大进程数

    万次阅读 2019-01-28 11:07:39
    查系统支持的最大线程数,一般会很大,相当于理论值 该命令在不同的机器上 值不一样。 在centos 服务器上面 : 513845 在ubuntu16.04 pc机上面 : 62667 两者机器配置 CPU 和内存 都不一样 cat /proc/sys/kernel/pid_...
  • 《Mqtt开发笔记:Mqtt服务器搭建》 《项目实战:Qt并发服务器通讯,受同一时刻最大线程数限制(笔者本本同一时刻600多)》 《Qt实用技巧:80显示超大显示拼接(十台服务器,每台八路摄像头)方案和Demo》 Demo测试...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 315,169
精华内容 126,067
关键字:

服务器线程最大