`
喜欢蓝色的我
  • 浏览: 367074 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

查看liunx服务器线程数

 
阅读更多

查看最大线程:

命令: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 设置一个较小的栈大小

 

分享到:
评论

相关推荐

    linux多线程编程.pdf

    Linux多线程编程是操作系统中并发程序设计的一个重要领域,它允许开发者在同一程序中创建多个线程,以实现并行执行,从而提高程序的执行效率和响应能力。Linux下的多线程编程通常基于POSIX线程(pthread)库来实现,...

    Linux多线程服务端编程:使用muduo+C网络库

    Linux多线程服务端编程:使用muduo+C网络库.pdf Linux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:...

    Linux多线程服务端编程,高清无水印!~

    Linux多线程服务端编程,高清无水印!~

    linux多线程服务器编程

    这是在公司同事那里看到的一本书,写的是linux多线程服务器编程

    Linux下基于多线程的服务器程序设计.pdf

    "Linux下的多线程服务器程序设计" Linux操作系统是当前最流行的开源操作系统之一,它广泛应用于服务器领域。设计一个高性能的服务器程序是非常重要的,然而传统的服务器工作方式存在三个显著的缺点:fork开销大、...

    Linux系统下的多线程编程入门.pdf

    调试多线程程序通常较复杂,gdb等调试器提供了线程查看和控制功能,帮助开发者定位问题。 总结,Linux系统的多线程编程为开发者提供了强大的并发能力,但也带来了挑战。理解和掌握线程创建、同步、通信和问题处理,...

    Linux多线程服务端编程

    Linux多线程服务端编程是陈硕大神的一本linux服务端开发实战书籍。

    Linux多线程服务端编程 使用muduo C++网络库_陈硕

    Linux多线程服务端编程 使用muduo C++网络库_陈硕

    嵌入式软件开发技术:第5章 嵌入式Linux多线程编程.ppt

    嵌入式Linux多线程编程 嵌入式Linux多线程编程是嵌入式系统开发中的一种重要技术,能够提高系统的效率和响应速度。本章节将详细介绍嵌入式Linux多线程编程的基本概念、线程的创建、同步和互斥、线程属性、多线程...

    Linux下多线程轻量级HTTP服务器

    在Linux操作系统中,开发一款多线程轻量级HTTP服务器是一项技术挑战,它涉及到网络编程、多线程处理以及对HTTP协议的理解。本项目“Linux下多线程轻量级HTTP服务器”旨在实现一个基本的HTTP服务器,能够响应客户端的...

    《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]

    《Linux多线程服务端编程:使用muduo C++网络库》这本书是陈硕的作品,专注于讲解如何在Linux环境中构建高效、稳定的多线程服务器程序。书中主要围绕muduo网络库进行深入探讨,该库是专为C++开发者设计的,用于简化...

    Linux多线程高并发服务器

    例如,在多线程服务器中,可能用信号量来限制同时处理的连接数。 6. **性能优化**:为了提高高并发服务器的性能,通常会进行内存优化(如使用内存池减少内存碎片)、减少上下文切换(如使用线程局部存储)、负载...

    C++实现的Linux多线程聊天室

    在聊天室的应用场景中,通常会有一个服务器线程负责监听客户端的连接请求,当有新的连接请求时,会创建一个新的线程来处理这个客户端的通信。这样可以保证服务器对每个客户端的响应是独立的,不会因为处理某个客户端...

    基于Linux的预线程化并发Web服务器设计.pdf

    基于 Linux 的预线程化并发 Web 服务器设计 本文旨在设计一个基于 Linux 的预线程化并发 Web 服务器,以解决传统 Web 服务器在资源消耗和利用率方面存在的问题。该服务器采用预线程化技术,结合信号量机制和生产者-...

    linux多线程服务器端编程 epub

    本书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服 务程序的主流常规技术, 重点讲解一种适应性较强的多线程服务器的编 程模型, 即one loop per thread。

Global site tag (gtag.js) - Google Analytics