• linux中ulimit作用


    转自:http://www.cnblogs.com/kongzhongqijing/p/5784293.html

    一、作用

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

    ulimit主要是用来限制进程对资源的使用情况的,它支持各种类型的限制,常用的有:
    
    内核文件的大小限制
    
    进程数据块的大小限制
    
    Shell进程创建文件大小限制
    
    可加锁内存大小限制
    
    常驻内存集的大小限制
    
    打开文件句柄数限制
    
    分配堆栈的最大大小限制
    
    CPU占用时间限制用户最大可用的进程数限制
    
    Shell进程所能使用的最大虚拟内存限制

    二、用法

    ulimit使用的基本格式为:ulimit [options] [limit]

    具体的options参数含义如下表所示:

    选项 含义
    
    -a 显示当前系统所有的limit资源信息。 
    
    -H 设置硬资源限制,一旦设置不能增加。
    
    -S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。
    
    -c 最大的core文件的大小,以 blocks 为单位。
    
    -f 进程可以创建文件的最大值,以blocks 为单位.
    
    -d 进程最大的数据段的大小,以Kbytes 为单位。
    
    -m 最大内存大小,以Kbytes为单位。
    
    -n 可以打开的最大文件描述符的数量。
    
    -s 线程栈大小,以Kbytes为单位。
    
    -p 管道缓冲区的大小,以Kbytes 为单位。
    
    -u 用户最大可用的进程数。
    
    -v 进程最大可用的虚拟内存,以Kbytes 为单位。
    
    -t 最大CPU占用时间,以秒为单位。
    
    -l 最大可加锁内存大小,以Kbytes 为单位。

    在使用ulimit时,有以下几种使用方法:

    (1)在用户环境变量中加入

    如果用户使用的是bash,那么就可以在用户目录的环境变量文件.bashrc或者.bash_profile中加入“ulimit -u 128”来限制用户最多可以使用128个进程。

    (2)在应用程序的启动脚本中加入

    如果应用程序是tomcat,那么就可以在tomcat的启动脚本startup.sh脚本中加入“ulimit -n 65535”来限制用户最多可以使用65535个文件描述符。

    (3)直接在shell命令终端执行ulimit命令

    这种方法的资源限制仅仅在执行命令的终端生效,退出或者关闭终端后,设置失效,并且这个设置不影响其它shell终端。

    有时候为了方便起见,也可以将用户资源的限制统一由一个文件来配置,这个文件就是/etc/security/limits.conf,该文件不但能对指定用户的资源进行限制,还能对指定组的资源进行限制。该文件的使用规则如下:

     <domain> <type> <item> <value> 

    其中:

    domain表示用户或者组的名字,还可以使用 * 作为通配符,表示任何用户或用户组。

    Type 表示限制的类型,可以有两个值,soft 和 hard,分别表示软、硬资源限制。

    item 表示需要限定的资源名称,常用的有nofile、cpu、stack等。分别表示最大打开句柄数、占用的cpu时间、最大的堆栈大小。

    value 表示限制各种资源的具体数值。

    除了limits.conf文件之外,还有一个/etc/security/limits.d目录,可以将资源限制创建一个文件放到这个目录中,默认系统会首先去读取这个目录下的所有文件,然后才去读取limits.conf文件。所有资源限制设置完成后,退出shell终端,再次登录shell终端后,ulimit设置即可自动生效。

    注意:各种配置的生效方式。

    ulimit -a 用来显示当前的各种用户进程限制。
    某linux用户的最大进程数设为10000个:ulimit -u 10000


    对于需要做许多 socket 连接并使它们处于打开状态的Java 应用程序而言,最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024。

    ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024

    其他建议设置成无限制(unlimited)的一些重要设置是:
    数据段长度:ulimit -d unlimited
    最大内存大小:ulimit -m unlimited
    堆栈大小:ulimit -s unlimited
    CPU 时间:ulimit -t unlimited
    虚拟内存:ulimit -v unlimited

        暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
        永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件中, 即特定于 shell 的用户资源文件,如:
    1)、解除 Linux 系统的最大进程数和最大文件打开数限制:
            vi /etc/security/limits.conf
            # 添加如下的行
            * soft noproc 11000
            * hard noproc 11000
            * soft nofile 4100
            * hard nofile 4100
          说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数
    2)、让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制:
            a、vi /etc/ssh/sshd_config
                把 UserLogin 的值改为 yes,并把 # 注释去掉
            b、重启 sshd 服务:
                  /etc/init.d/sshd restart
    3)、修改所有 linux 用户的环境变量文件:
        vi /etc/profile
        ulimit -u 10000
        ulimit -n 4096
        ulimit -d unlimited
        ulimit -m unlimited
        ulimit -s unlimited
        ulimit -t unlimited
        ulimit -v unlimited
     保存后运行#source /etc/profile 使其生效

    公司服务器需要调整 ulimit的stack size 参数调整为unlimited 无限,使用ulimit -s unlimited时只能在当时的shell见效,重开一个shell就失效了。。于是得在/etc/profile 的最后面添加ulimit -s unlimited 就可以了,source /etc/profile使修改文件生效。


    如果碰到类似的错误提示ulimit: max user processes: cannot modify limit: 不允许的操作 ulimit: open files: cannot modify limit: 不允许的操作
    为啥root用户是可以的?普通用户又会遇到这样的问题?
    看一下/etc/security/limits.conf大概就会明白。
    linux对用户有默认的ulimit限制,而这个文件可以配置用户的硬配置和软配置,硬配置是个上限。超出上限的修改就会出“不允许的操作”这样的错误。
    在limits.conf加上
    *        soft    noproc 10240
    *        hard    noproc 10240
    *        soft    nofile 10240
    *        hard    nofile 10240
    就是限制了任意用户的最大线程数和文件数为10240。

    如何设置普通用户的ulimit值
    1、vim /etc/profile
    增加 ulimit -n 10240
    source /etc/profile 重新启动就不需要运行这个命令了。
    2、修改/etc/security/limits.conf
    增加
    *      hard     nofile     10240   
    \限制打开文件数10240
    3、测试,新建普通用户,切换到普通用户使用ulit -a 查看是否修改成功。
  • 相关阅读:
    Spring在Web中使用的基本思路
    Spring整合Hibernate
    cuda cudaprintf使用
    《算法竞赛入门经典》第四章 函数和递归
    《算法竞赛入门经典》第三章 3.4
    《算法竞赛入门经典》第三章 3.3
    《算法竞赛入门经典》第三章 3.2
    《算法竞赛入门经典》第三章 3.1
    《算法竞赛入门经典》第二章 2.3
    《算法竞赛入门经典》第二章 2.4
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/6364814.html
Copyright © 2020-2023  润新知