LIMITS命令操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LIMITS命令操作相关的知识,希望对你有一定的参考价值。

参考技术A limit 界限,范围,限定. 极限限制
极限  在高等数学中,极限是一个重要的概念。   极限可分为数列极限和函数极限,分别定义如下。   数列极限:   设为数列,A为定数。若对任给的正数ε,总存在正整数N,使得当n>N时,有   |An - A|<ε,   则称数列收敛于A,定数A称为数列的极限,并记作   lim An = A,或 An->A(n->∞),   读作“当n趋于无穷大时,An的极限等于A或An趋于A”。   函数极限:   设f为定义在[a,+∞)上的函数,A为定数。若对任给的ε>0,存在正数M(>=a),使得当x>M时有:   |f(x)-A|<ε,   则称函数f当x趋于+∞时以A为极限,记作   lim f(x) = A 或 f(x)->A(x->+∞)   mysql中limit的用法详解   在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。   SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset   LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。   mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15   为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:   mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.   如果只给定一个参数,它表示返回最大的记录行数目:   mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行   换句话说,LIMIT n 等价于 LIMIT 0,n。
参考技术B http://wenku.baidu.com/view/61541028915f804d2b16c192.html 这里面有! 希望对你有帮助!

使用ulimit 命令/etc/security/limits.confproc 调整系统参数

 

Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量

系统总限制是在这里,/proc/sys/fs/file-max.可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.
/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量

linux 中数据的含义 /proc/sys/fs/file-nr

[root@localhost logs]# cat /proc/sys/fs/file-nr
2112                                           0                             2100000

已分配文件句柄的数目     已使用文件句柄的数目      文件句柄的最大数目    

在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题
在使用linux做为关键应用的过程中,特别是大压力负载的时候,经常会遇到一些诸如“too many open files”,“系统默认最大线程数是多少?如何调整?”等问题。此时,我们就必须使用ulimit或proc去调整系统的某些参数。

查找文件句柄问题的时候,还有一个很实用的程序lsof.可以很方便看到某个进程开了那些句柄.也可以看到某个文件/目录被什么进程占用了.
lsof -n |awk ‘{print $2}‘|sort|uniq -c |sort -nr|more

修改完重新登录就可以见到, 如Centos,使用 ulimit -a 查看确认

  • ulimit 命令

1.只对当前tty(终端有效),若要每次都生效的话,可以把ulimit参数放到对应用户的.bash_profile里面;
2.ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软;
3.默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.生效;
+ 命令参数
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制

+ 设置    
    - 针对所有用户的设置,在/etc/security/limits.conf文件,其是可以对系统用户、组进行cpu、文件数等限制的,通过它可以针对某个用户或全部进行限制。但不能超越系统的限制;

        (*表示所有用户、soft表示可以超出,但只是警告;hard表示绝对不能超出,unlimited用于表示不限制)
    
    - 如果想对所有用户设置,也可以放在/etc/profile文件里面,下面是该文件里面的默认参数:   
    ulimit -S -c 0 > /dev/null 2>&1
  • /proc 目录

    • /proc 目录包括很多系统当前状态的参数

      /proc/meminfo
      /proc/cpuinfo
      /proc/sys/fs/file-max #系统总限制
      /proc/sys/fs/file-nr #整个系统目前使用的文件句柄数量

    • proc目录中的值可以进行动态的设置,若希望永久生效,可以修改/etc/sysctl.conf文件,并使用下面的命令确认: #sysctl -p

  • /etc/security/limit.conf

注意:要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so
+ 描述
limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。 limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置。
+ 工作原理
limits.conf是 pam_limits.so的 配置文件,然后/etc/pam.d/下的应用程序调用pam_***.so模块。譬如说,当用户 访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目 录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的PAM模块进行处理

    example:限制admin用户登录到sshd的服务不能超 过2个  
        在/etc/pam.d/sshd中添加:session required pam_limits.so  
        echo "session required pam_limits.so" >> /etc/pam.d/sshd  
        在/etc/security/limits.conf中添加:admin - maxlogins 2  
        注意:     
        查看应用程序能否被PAM支持,用ldd
        同理limits.conf要使用就必须保证/etc/pam.d/login 中有下面:session    required   pam_limits.so

+ 文件格式  username|@groupname   type  resource  limit
    1. username|@groupname  
    设置需要被限制的用户名,组名前面加@和用户名区别。也可用通配符*来做所有用户的限制
    2. type  soft、hard、-    
    soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了soft 和hard的值
    3. resource: 表示要限制的资源
    
        * core - 限制内核文件的大小
        core file : 当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像,系统默认core文件的大小为0,所以没有被创建。可以用ulimit命令查看和修改core文件的大小。 
        #ulimit -c 0  #ulimit -c 1000 #ulimit -c unlimited  
        注意:如果想让修改永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf 
        * date - 最大数据大小
        * fsize - 最大文件大小
        * memlock - 最大锁定内存地址空间
        * nofile - 打开文件的最大数目  
        对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用ulimit -n,或者通过设置nofile参数,为用户把文件描述符的数量设置得比默认值高一些
        * rss - 最大持久设置大小
        * stack - 最大栈大小
        * cpu - 以分钟为单位的最多 CPU 时间 
        * noproc - 进程的最大数目 
        * as - 地址空间限制
        * maxlogins - 此用户允许登录的最大数目
    
    4. 设置
        * 暂时生效,ulimit 命令
        * 永久生效,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件之一(例如 ~/.profile),即特定于 shell 的用户资源文件;或者通过编辑 /etc/security/limits.conf
 

以上是关于LIMITS命令操作的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB3.6 一键化自动部署方案

使用ulimit 命令/etc/security/limits.confproc 调整系统参数

redhat6.5安装oracle 11g

Mac OSX下修改 ulimit 参数

linux 主机上出现输入正确的账号和密码,无法登陆,如何操作

修改ulimit参数如何理解生效