Linux中最大进程数和最大文件数

摘要:
前言Linux系统中可以设置关于资源的使用限制,比如:进程数量,文件句柄数,连接数等等。下面就简单的介绍下配置用户进程数和文件打开数。一.ulimit命令Providescontrolovertheresourcesavailabletotheshellandtoprocessesstartedbyit,onsystemsthatallowsuchcontrol.Linux的man文档中是这样描述ulimit的:提供了当前shell控制系统资源的能力。从这里可以分析出ulimit的特点:可控系统资源:cpu、memory、process、file等等控制的作用域在当前shell会话中ulimit的语法:ulimit[-HSTabcdefilmnpqrstuvx[limit]]分为参数和值两部分,参数用于表示特定的资源类型,值表示在对特定的资源进行限制的量度。
前言

Linux系统中可以设置关于资源的使用限制,比如:进程数量,文件句柄数,连接数等等。
在日常的工作中应该遇到过:

-bash: fork: retry: Resource temporarily unavailable

或者

too many open files

这些类似的操作错误,前者是由于当前用户的进程数超出限制,后者由于当前用户的文件打开数超出限制。

下面就简单的介绍下配置用户进程数和文件打开数。

一.ulimit命令

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

Linux的man文档中是这样描述ulimit的:提供了当前shell控制系统资源的能力。从这里可以分析出ulimit的特点:

  • 可控系统资源:cpu、memory、process、file等等
  • 控制的 作用域在当前shell会话中

ulimit的语法:

ulimit [-HSTabcdefilmnpqrstuvx [limit]]

分为参数和值两部分,参数用于表示特定的资源类型,值表示在对特定的资源进行限制的量度。

命令参数描述例子
-H设置硬资源限制,一旦设置不能增加ulimit –Hs 64;限制硬资源,线程栈大小为 64K
-S设置软资源限制,设置后可以增加,但是不能超过硬资源设置ulimit –Sn 32;限制软资源,32 个文件描述符
-a显示当前所有的 limit 信息ulimit – a;显示当前所有的 limit 信息
-c最大的 core 文件的大小, 以 blocks 为单位ulimit –c unlimited; 对生成的 core 文件的大小不进行限制
-d进程最大的数据段的大小,以 Kbytes 为单位ulimit -d unlimited;对进程的数据段大小不进行限制
-f进程可以创建文件的最大值,以 blocks 为单位ulimit –f 2048;限制进程可以创建的最大文件大小为 2048 blocks
-l最大可加锁内存大小,以 Kbytes 为单位ulimit –l 32;限制最大可加锁内存大小为 32 Kbytes
-m最大内存大小,以 Kbytes 为单位ulimit – m unlimited;对最大内存不进行限制
-n可以打开最大文件描述符的数量ulimit –n 128;限制最大可以使用 128 个文件描述符
-p管道缓冲区的大小,以 Kbytes 为单位ulimit –p 512;限制管道缓冲区的大小为 512 Kbytes
-s线程栈大小,以 Kbytes 为单位ulimit – s 512;限制线程栈的大小为 512 Kbytes
-t最大的 CPU 占用时间,以秒为单位ulimit – t unlimited;对最大的 CPU 占用时间不进行限制
-u用户最大可用的进程数 ulimit – u 64限制用户最多可以使用 64 个进程
-v进程最大可用的虚拟内存,以 Kbytes 为单位ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes

根据以上表格所列,如果需要设置当前用户的最大进程数和文件打开数只要如下设置即可:

  • ulimit -u 8192 设置当前用户的最大进程数为8192,只在当前shell中生效
  • ulimit -n 8192 设置当前用户的最大文件打开数8192,只在当前shell中生效

同时可以通过参数-a查看当前用户的所有限制情况:

[post@PostOS ~]$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127510
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可以通过max user processes和open files 看出当前post用户的最大进程数和最大打开文件数分别为32768和8192。

二.设置配置文件

前面介绍了ulimit的方式修改系统资源的限制,但是有局限性:ulimit只对当前shell会话生效。如果重新打开一个shell,配置又重新变成之前的限制了。如果需要永久生效需要修改文件让其配置持久化。

配置文件主要分为:

  • 将命令写至profile和bashrc中,相当于在登陆时自动动态修改限制
  • 在/etc/security/limits.conf中添加记录(需重启生效,并且在/etc/pam.d/中的seesion有使用到limit模块)

第一种方式很好理解,就是每次shell用户登录时,加载当前的用户的profile执行ulimit命令,以达到修改资源限制。
下面主要介绍下:如何修改/etc/security/limits.conf。

#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#           for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open file descriptors
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file
* soft nofile 32768
* hard nofile 65536
#use for oracle
postgres soft nproc 2047
postgres hard nproc 16384
postgres soft nofile 2048
postgres hard nofile 65536
postgres soft stack 10240

从文件的注释说明中可以看出该文件的配置含义,配置主要分为四个部分:

  • domain部分:用来表示用户名或者组名。@后接用户名或者组名表示用户名或者组名;*表示所有用户
  • type部分:表示资源层面,有两种值soft和hard。soft表示在软件层面,hard表示在硬件层面
  • item部分:表示可以限制的资源类型。core限制核心的文件大小;locks表示用户可以持有的最大文件锁数量;nproc表示最大的进程数;nofile表示最大的打开文件句柄数
  • value部分:限制的资源数量的值

如上面的配置: #@student hard nproc 20,表示student用户在硬件上最大的进程数只有20,* soft nofile 32768表示软件上所有用户的最大文件打开数是32768。

只修改了这个文件还无法完成配置,还需要修改 /etc/security/limits.d/90-nproc.conf配置文件,可以先查看下这个文件的内容:

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     8192
root       soft    nproc     unlimited

从注释中可以看出,是针对用户进程的默认限制。从配置中可以看出root用户不做进程数量的限制,其他用户的最大进程数为8192。

关于Linux中为何既有/etc/security/limit.conf又还配置一个limits.d/90-nproc.conf,这个问题由于个人能力有限,无法回答。读者感兴趣可以自行研究,不吝赐教。

参考

ulimit限制之nproc问题

免责声明:文章转载自《Linux中最大进程数和最大文件数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tomcate环境搭建用TTS实现文本转语音下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux运维、架构之路-分布式存储Ceph

一、Ceph介绍        Ceph是一个Linux PB级分布式文件系统,能够在维护POSIX兼容性的同时加入了复制和容错功能。Ceph号称高可用的分布式存储系统,通过多个MON节点(通常为3个)维护集群的状态及元数据信息,而真正存储数据的OSD节点通过向MON节点汇报状态,并通过CRUSH算法将数据副本布局到相应OSD的所在磁盘上,完成数据的持久化...

Linux中rz和sz命令用法详解

https://blog.csdn.net/magaiou/article/details/80322060 rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具。优点就是不用再开一个sftp工具登录上去上传下载文件。sz:将选定的文件发送(send)到本地机器rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Li...

[C++]Linux之图形界面编程库[curses库]之入门教程

0. 环境 x86 / 64bit Linux Ubuntu 16.04 1. 安装 //方法一 sudo apt-get install libncurses5-dev 【 ubuntu 16.04:亲测有效】 //方法二 sudo apt-get install ncurses-dev //方法三【手动,ubuntu 16.04 测试:ncur...

Linux系统声卡问题

问题:Linux系统中有声卡设备,但是听不到声音 一、声卡驱动没有安装   1、通过插拔声卡查出声卡驱动   2、在相应的kernel中编译内核 修改保存.config文件,然后进行编译 make -j 10 make modules make modules_install reboot重启机器后可以“lsmod”查看驱动 3、将2号声卡改为默认声卡:...

linux批量操作(一)

一、常用命令 1、关闭所有java进程命令:   ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9 2、批量文本操作   替换字符串:sed -i 's/原字符串/新字符串/g' /home/1.txt   删除字符串:sed -i '/字符串/d' file   字符...

命令服务器linux中tftp服务器设置及测试,图解

本文纯属个人见解,是对后面学习的总结,如有描述不正确的地方还请高手指正~ PC机系统:win7 虚拟机linux系统:fedora9 开发板:mini2440 虚拟机联网方法:桥接 在谈到将宿主机的文件下载到目标机的日志里,当利用网络将宿主机的文件下载到开发板上时,就是利用的tftp服务器。 一:tftp的观点 TFTP(Trivial File Tran...