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
1.
2.
3.
4.
上面可以看除了root用户外的所有用户均限制为1024,因此可以注释此行或者将值改大来解决,这样的修改是立马生效的
©著作权归作者所有:来自51CTO博客作者qianghong000的原创作品,请联系作者获取转载授权,否则将追究法律责任
修改linux系统用户最大线程数限制
https://blog.51cto.com/qiangsh/2132763