知识点查缺补漏贴03:单机最大进程数,线程数和Socket连接数

前言:

  参加Unix/Linux相关高级研发职位时,是否经常会被文档,单机允许最大进程数、线程数和Socket连接数,而你却感到束手无措呢?本文给你一个最为详细的答案。

一、最大进程数

  运行Linux ulimit -a指令,我们可以看到:max user processes =1024 运行结构如下图所示:


[root@localhost ~]# ulimit

unlimited

[root@localhost ~]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 1830

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

<strong>open files                      (-n) 1024</strong>

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

<strong>stack size              (kbytes, -s) 10240</strong>

cpu time               (seconds, -t) unlimited

<strong>max user processes              (-u) 1024</strong>

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

 二、最大线程数

[zhangzl@localhost ~]$ cat /proc/sys/kernel/threads-max

3660

 看到最大线程数的限制了吗?3660

三、最大Socket连接数

关于最大Socket连接数,因为一个Socket连接需要占用一个文件句柄,所以支持打开的连接数就是文件数句柄数:open files (-n) 1024

四、一个进程允许启动的最大线程数

  Linux环境,一个进程分配的虚拟内存空间是4G,可用2G,每个线程Stack空间为10M,2048/10  = 200,所以一般的单进程能开通的线程数也就可以确定了。约为200个。

五、ulimit命令详解

参  数:
-a  显示目前资源限制的设定。
-c <core文件上限>  设定core文件的最大值,单位为区块。
-d <数据节区大小>  程序数据节区的最大值,单位为KB。
-f <文件大小>  shell所能建立的最大文件,单位为区块。
-H  设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小>  指定可使用内存的上限,单位为KB。
-n <文件数目>  指定同一时间最多可开启的文件数。
-p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。
-s <堆叠大小>  指定堆叠的上限,单位为KB。
-S  设定资源的弹性限制。
-t <CPU时间>  指定CPU使用时间的上限,单位为秒。
-u <程序数目>  用户最多可开启的程序数目。
-v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

时间: 2025-01-11 22:42:37

知识点查缺补漏贴03:单机最大进程数,线程数和Socket连接数的相关文章

知识点查缺补漏贴01-进程间通讯之mmap文件共享

引文: 个人名言:"同一条河里淹死两次的人,是傻子,淹死三次及三次以上的人是超人".经历过上次悲催的面试,决定沉下心来,好好的补充一下基础知识点.本文是这一系列第一篇:进程间通讯之mmap. 一.概念:什么是mmap? 通过共享存储实现进程间通讯是一个主要的进程间通讯的方式.它包括磁盘文件的共享和内存的共享,以前总是关注内存的共享,而忽略了磁盘文件的共享,也就是这里要讲的mmap.mmap地址映射是Linux系统提供的一种功能强大的系统调用,最典型的应用是用于显卡内存的映射.同样,对于

知识点查缺补漏贴02:Linux环境fork()函数详解

引言 先来看一段代码吧, #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { pid_t pid = fork(); if(pid < 0){ fprintf(stderr,"error!"); }else if(0 == pid){ fprintf(st

ruby查缺补漏

<Programming Ruby中文版>前3部分我并不准备细看,毕竟我接触ruby也有一段时间了,只准备快速地掠过一遍,查缺补漏:重点放在第3部分的核心内容上,至于第四部分的参考手册更多作为工具书了.仅在此记录下一些值的注意的东西. 1.全局变量$_,默认当gets方法返回输入的行时,同时保存在全局变量$_,并且正则表达式如果作为条件语句(if或者while)时默认是跟这个全局变量进行匹配,而print参数为空时也是打印这个全局变量.这是早期ruby向perl语言学习的结果.可以看看这个例子

C++查缺补漏,赶紧的

c++中 switch支持的数据类型为实型 (麻烦朋友们给我解释一下什么是实型) 支持的有int long unsigned short enum类型,不支持的是:float double string 回答下面的问题: Void GetMemory(char **p, int num){ *p = (char *)malloc(num); } void Test(void){ char *str = NULL; GetMemory(&str, 100); strcpy(str, "he

C++查缺补漏4,赶紧的

请说出const与#define 相比,有何优点? 答案:1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误.       2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试. 在8086 汇编下,逻辑地址和物理地址是怎样转换的?(Intel)答案:通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访

C++查缺补漏2,赶紧的

先来看一段代码把:  #include <iostream> #include <typeinfo> using namespace std; void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6"); } int _tmain(int argc, _TCHAR* argv[]) { foo(); unsi

C++查缺补漏3,赶紧的

如何判断一段程序是由C 编译程序还是由C++编译程序编译的?  答案:  #ifdef __cplusplus cout<<"c++"; #else cout<<"c"; #endif 如何打印出当前源文件的文件名以及源文件的当前行号?  答案:  cout << __FILE__ ;  cout<<__LINE__ ;  __FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定

查错补漏 在XP SP2系统中疯狂BT_WindowsXP

经常使用BT软件下载的朋友也许会发现一个奇怪的现象:将系统升级到Windows XP SP2后,在以前系统中下载如飞的BT,却经常出现连接不上的情况.即便连接上,下载/上传速度也大不如前. 开始我还以为是BT软件出了问题,可是在我几乎把市面上所有的BT软件都尝试了后,情况仍然没有得到改善.我又把瑞星防火墙卸载了,还是不行.于是干脆把系统又恢复到SP1(我在升级到SP2的时候保留了SP1的GHOST备份),结果BT又"活"过来了.于是我断定问题一定出在SP2上. 一个偶然的机会,我在&q

进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结

进程和程序: 进程:是个动态的概念,指的是一个静态的程序对某个数据集的一次运行活动,而程序是静态的概念,是由代码和数据组成的程序块而已. 进程5大特点:动态性,并发性,独立运行性,异步性,和结构化的特性. 在多道程序环境下,程序不能独立运行,操作系统所有的特征都是基于进程而体现的,只有进程可以在系统中运行,程序运行必须有进程才行.进程是操作系统里资源分配的基本单位,也是独立运行的基本单位,具有动态的特点,暂时出现的特点,而且一个进程产生之后,可以再次生成多个进程出来.也可以多个进程并发执行,也可