ulimit的说明

ulimit工具是性能调优的简单工具而且也是Linux内置的一个功能,它的目的是用于控制由Shell运行的进程所能使用的系统最大资源。其实在生产环境中部署Linux后通常都会用这个工具去调整一些参数来交付使用,当然这个过程往往都是自动完成的,工具使用很简单,但是它涉及的知识还是比较多的。

ulimit -a    查看所有限制,如果不加-H参数则默认显示软限制。

这里显示的是系统默认设置,我没有做任何调整。

ulimit用于限制shell启动进程所用的资源,内核文件大小、进程数据块大小、shell进程创建的文件大小、内存锁住大小、最大可用内存大小、最大可用虚拟内存大小、最大文件描述符大小、CPU时间、分配堆栈大小、单个用户的最大线程数量。它支持硬限制和软限制。

上面提到【限制shell】启动进程,其实这也就表明了它的作用范围,它不是用来限制系统的,仅仅是用来限制当前登录shell的用户所启动的进程的。临时调整参数的话仅对当前shell有效,关闭则失效,同时不影响其他shell;当然也可以永久生效这需要修改登录时shell读取的文件。

下面说一下参数含义:

参数 含义
-H 设置硬限制, ulimit -Hn 1024  表示硬限制,限制最大文件描述符为1024。硬限制是绝对不能超过这个值。
-S 设置软限制,ulimit -Sn 1024   表示软限制,限制最大文件描述符为1024,软限制不能大于硬限制,在不超过硬限制的前提下,可以超过软限制使用一段时间。超过该时间就自动清除。
-a 限制当前所有的限制信息,默认为软限制。
-c 最大的core文件大小,以blocks为单位。块大小取决于你系统分区使用的块为多大。
-d 进程占用的最大数据段大小,以bytes为单位
-f 进程可以创建的单个文件为多大,以blocks为单位。ulimit -f 100 限制进程最大可以创建100块大小的文件。
-i 可以被挂起或者阻塞的最大信号数量
-l 最大可加锁内存大小,以bytes为单位。这个值对普通用户生效,对管理员不起作用。不过有一个知识需要了解,就是为什么要对内存加锁?抛开虚拟地址空间不说,总之进程和数据都会在物理内存中,只要进程和数据当前都是活动的。不过我们也知道,内存管理有换进换出机制,采用最近最少原则,这些数据暂时性的交换到SWAP分区中,也就是虚拟内存中,而在需要的时候在交换进物理内存。内存加锁就是将数据锁定在物理内存中,避免换进换出。这样可以提高效率,对某些应用需要这样设置,比如数据库、或者对安全性要求高的,但大部分不需要。所以这个参数就是设定进程最大可以锁定多少内存。
-m 进程可用的最大内存数量,以bytes为单位。很多系统设置无效。
-n 进程可以打开的最大文件描述符数量,也就是一个进程可以最多打开多少个文件。
-p 管道缓冲区大小,以bytes为单位。
-q 限制程序使用POSIX消息队列的最大值
-r 限制程序的实时优先级范围,只针对普通用户有效。
-s 线程栈大小,以bytes为单位
-t 进程最多可以占用CPU多久,以秒为单位
-u 用户最大可运行的进程数,只针对普通用户有效。
-v 进程最多可用多少虚拟内存,以bytes为单位

如何使用:

临时使用,仅在当前shell中生效,退出失效,且不影响其他shell

ulimit -参数 值

永久针对某一用户生效

  1. 在某一用户的家目录中.bashrc文件中

  2. 修改/etc/security/limits.conf文件,不过推荐在/etc/security/limit.d下建立一个.conf的文件在这里写。这样便于管理。在limits.conf文件中有书写格式,参照该格式写就可以。通过第二种方式不但可以对用户还可以针对某一用户组的用户来设置。

作用范围:

上面已经提到过作用范围,这里再次强调一下ulimit的作用范围不是限制系统的,而是限制当前登录shell的用户以及他所启动的进程的。

比如同一个用户,登录了2个shell,在第一个shell中设置了ulimit -n 10,而另外一个保持默认,那么最大文件描述符为10这个限制仅对该用户登录的第一个shell生效。

举例说明:

-f 限制可以创建的最大文件大小

我这里设置了最大为100个blocks,而我要创建的大小为4.9MB,当创建的时候被拒绝。

-m 最大内存使用限制(经测试无效)

无论你是ls还是cat去查看一个4.9M的文件都没有阻拦

其他说明:

比如有些时候你会收到最大文件数量不足的提示,你通过ulimit -n只能查看当前shell的登录用户最大打开多少文件,但是无法得知到底使用了多少,其实系统这个提示是针对所有用户和进程的,你需要另外的方法查看。

现在这个命令是查看当前系统可以打开多少文件描述符,以及目前使用了多少。

cat /proc/sys/fs/file-nr

1728:当前使用了多少   0:回收了多少   186726:当前系统总共可以打开多少

cat /proc/sys/fs/file-max

查看系统最大可以打开多少文件描述符,这个值和上面的最后一个值相等。

file-max显然比ulimit -n的值多,这就是它们的区别,file-max表示当前系统可以打开的最大文件数量,它包括所有用户和所有进程,而ulimit -n只是显示当前用户或者说是进程级别可以打开的数量。它们是在不同层次。如果你要修改系统级别的资源限制,就要修改/etc/sysctl.conf文件。

比如fs.file-max=65536  把这个写入到这个文件,那么系统的最大文件描述符数量就是65535了。最后使用sysctl -p使其生效。

时间: 2024-12-24 03:59:03

ulimit的说明的相关文章

linux 设置ulimit

如何设置普通用户的ulimit值1.vim /etc/profile增加 ulimit -n 10240source /etc/profile 重新启动就不需要运行这个命令了.2.修改/etc/security/limits.conf增加*      hard     nofile     10240   \\限制打开文件数102403.测试,新建普通用户,切换到普通用户使用ulit -a 查看是否修改成功 ulimit -a 用来显示当前的各种用户进程限制.Linux对于每个用户,系统限制其最

ulimit -----修改linux的软硬件限制文件

修改linux的软硬件限制文件/etc/security/limits.conf. 在文件尾部添加如下代码: * soft nofile 65535 * hard nofile 65535 保存并推出. 命令说明: domino type item value      domino是以符号@开头的用户名或组名,*表示所有用户,type设置为hard or soft.item指定想限制的资源.如cpu,core nofile nproc or maxlogins.value是相应的限制值. 保存

RHEL6 某业务用户ulimit -a命令找不到

最终确定是shell环境问题,临时改为/bin/bash即可查看. 1.问题现象 # su - jingyu $ id uid=503(jingyu) gid=507(jingyu) groups=507(jingyu) $ ulimit -a ulimit: Command not found. 2.临时切换为/bin/bash即可查看 $ echo $SHELL /bin/csh $ bash $ ulimit -a core file size (blocks, -c) 0 data se

linux下关于ulimit

这里讨论的是redhat.linux是有文件句柄限制的,默认是1024,作为一台生产服务器,在linux下面部署应用的时候,很容易达到这个数量的限制,然后报错 error: too many open files ,所以应当把这个值改大一些,在高负载情况下要设置为更高,但最高只能为65535.有人说这里默认的1024是系统的限制,也有人说是用户的限制,其实这个是用户的限制,严格的说这是当前用户准备要运行的程序的限制. 使用ulimit -a可以查看当前系统的所有限制值,使用ulimit -n可以

ulimit登陆服务器报错

闲来无事登陆服务器发下登陆提示有报错 报错提示:Last login: Fri May 23 01:37:04 2014 from 101.71.249.170-bash: ulimit: open files: cannot modify limit: Operation not permitted 看提示是没有权限的意思 查看登陆需要加载的文件/etc/profile 有发现ulimit -n 65535ulimit -u 10240 服务器是禁止root登陆的.用户一般用户登陆肯定是会提示

ulimit 句柄数修改

ubuntu 16.04 ulimit 最近,网站一到高峰期,CPU就会飙升到100%,但内存,IO,网络等一切正常,有可能是ulimit的问题,马上查看文件句柄数限制 ulimit -n 得到的结果是:1024,这个值对生产中的服务显得偏小. 网上给出的解决方案,大部分是直接输入 ulimit -SHn 65535 # 65535可自己根据应用调整 此法缺点很明显,一旦退出登陆,设置就失效了. 到一个正确的做法 1.打开/etc/security/limits.conf,追加: * soft

linux的ulimit各种限制之深入分析

一般可以通过ulimit命令或编辑/etc/security/limits.conf重新加载的方式使之生效 通过ulimit比较直接,但只在当前的session有效,limits.conf中可以根据用户和限制项使用户在下次登录中生效. 对于limits.conf的设定是通过pam_limits.so的加载生效的,比如/etc/pam.d/sshd,这样通过ssh登录时会加载limit.又或者在/etc/pam.d/login加载生效. 下面将对各种限制进行分析 core file size   

ulimit 为何不生效

首先声明一下环境 所用用户及其操作都是通过远程登录,也就是通过 sshd 这个程序 最近生产服务器的Java程序总是报 Too  many open files 发现启动程序的用户 weblogic  ulimit 设置并没有生效,执行 ulimit -n  看到的还是 1024. 但是系统的配置文件 设置的是 10240,自己的配置文件  .bash_profile 下设置的也是 10240 于是试着重新执行 source  ./.bash_profile 竟然报错!! [[email pro

[转载] 深入理解 docker ulimit

深入理解docker ulimit 2015年7月23日 10:00 阅读 12778 [编者的话]Docker大规模应用后,如果你没踩过坑,说出去肯定没人信.昨天就遇到一个ulimit的经典问题:业务Container内ulimit值太小,导致启动失败.ulimit问题,老生常谈,但是在不同的场景与环境,表现出来的灵异,往往需要一些深入的分析才能找到本因.本次问题就与os版本,docker版本及配置方法息息相关,我们来回顾一下. 一  问题: 1,背景: 微博平台业务经过去年三节Docker化

-bash: ulimit: max user processes: cannot modify limit: Operation not permitted

安装oracle时候在创建oracle用户后,切换oracle用户时,报如下错 [[email protected] ~]# su - oracle-bash: ulimit: max user processes: cannot modify limit: Operation not permitted 经查看结果是 忘记修改/etc/security/limits.conf 关于/etc/security/limits.conf解释及应用,看我转载如下文章 limits.conf的格式如下: