修改linux系统用户最大线程数限制

ulimit 的作用

ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。

参数 描述

ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)和可同时运行的最大进程数(max user processes)无效

-a 列出所有当前资源极限
-c 设置core文件的最大值.单位:blocks
-d 设置一个进程的数据段的最大值.单位:kbytes
-f Shell 创建文件的文件大小的最大值,单位:blocks
-h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
-l 可以锁住的物理内存的最大值
-m 可以使用的常驻内存的最大值,单位:kbytes
-n 每个进程可以同时打开的最大文件数
-p 设置管道的最大值,单位为block,1block=512bytes
-s 指定堆栈的最大值:单位:kbytes
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者
-t 指定每个进程所使用的秒数,单位:seconds
-u 可以运行的最大并发进程数
-v Shell可使用的最大的虚拟内存,单位:kbytes
-x

添加格式

username|@groupname type resource limit

  • username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。
  • type:有soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
  • resource:
    core - 限制内核文件的大小(kb)
    date - 最大数据大小(kb)
    fsize - 最大文件大小(kb)
    memlock - 最大锁定内存地址空间(kb)
    nofile - 打开文件的最大数目
    rss - 最大持久设置大小(kb)
    stack - 最大栈大小(kb)
    cpu - 以分钟为单位的最多CPU 时间
    noproc - 进程的最大数目
    as - 地址空间限制
    maxlogins - 此用户允许登录的最大数目

Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数

ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
    其他建议设置成无限制(unlimited)的一些重要设置是:
    数据段长度:ulimit -d unlimited
    最大内存大小:ulimit -m unlimited
    堆栈大小:ulimit -s unlimited
    CPU 时间:ulimit -t unlimited
    虚拟内存:ulimit -v unlimited

永久修改ulimit,需要修改/etc/security/limits.conf。

# vim /etc/security/limits.conf 

     # 添加如下的行
    * soft noproc 65535
    * hard noproc 65535
    * soft nofile 65535
    * hard nofile 65535

(前面的*星号代表针对所有的用户;noproc 是代表最大进程数;nofile代表最大文件打开数;soft nofile的值不能超过hard nofile的值)

报错信息 > tomcat启动后老是报错:java.lang.OutOfMemoryError: unable to create new native thread,

刚开始以为内存不够就增加tomcat内存: JAVA_OPTS="-server -XX:PermSize=1024M -XX:MaxPermSize=2048m -DentityExpansionLimit=64000" 结果还是报这个错,后来怀疑是权限问题,使用root用户启动tomcat就好了。 经过分析,原来linux用户默认能够创建的最大线程数是1024,所以才会报这个错误。

下面,介绍一下修改linux系统用户最大线程数限制: linux系统对线程数量有个最大限制,当达到系统限制的最大线程数时使用账号密码ssh到系统时是无法登陆的,会报Write failed: Broken pipe,在root用户下切换到该用户会报 su: 无法设置用户ID: 资源暂时不可用 1.# su - xxx(普通用户) su: 无法设置用户ID: 资源暂时不可用

2.# ulimit -u 1024 由此可以看出最大线程数为1024

3.修改最大线程数的配置 centos6.5

[root@localhost ~]# cat /etc/security/limits.d/90-nproc.conf
\\内容如下:
*          soft    nproc     1024
root       soft    nproc     unlimited

centos7

[root@localhost ~]# cat /etc/security/limits.d/20-nproc.conf
\\内容如下:
*          soft    nproc     1024
root       soft    nproc     unlimited

上面可以看除了root用户外的所有用户均限制为1024,因此可以注释此行或者将值改大来解决,这样的修改是立马生效的

你可能感兴趣的:(SRE,linux,java,操作系统,多线程,python)