https://www.cnblogs.com/IMxY/p/8941022.html

limits

关于Centos 7 / RHEL 7 中的limits要了解以下几点:

  1. CentOS 7 / RHEL 7的系统中,使用Systemd替代了之前系统版本中的SysV。
  2. Systemd 中的 /etc/security/limits.conf 文件的配置作用域缩小了,只适用于通过PAM认证登录用户的资源限制,对Systemd的service的资源限制不生效。
  3. 登录用户的限制,通过 /etc/security/limits.conf 和 /etc/security/limits.d/*.conf 来配置。
  4. 系统全局的配置,在文件 /etc/systemd/system.conf 和/etc/systemd/system.conf.d/*.conf 来设定。
  5. 用户全局的配置,在文件 /etc/systemd/user.conf 和/etc/systemd/user.conf.d/*.conf 来设定。
  6. *.conf.d/*.conf 文件会覆盖  *.conf ,一般的sevice,使用system.conf中的配置即可。

例:编辑 limits.conf 配置文件在文件尾部添加以下内容

  vim /etc/security/limits.conf

* - nofile 1024000
* - nproc 1024000

  等于

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 1024000
* hard nproc 1024000

两段配置参数为什么相等,在下面《添加格式》中有详细的参数说明。

参数生效:

  1. working下执行 source /etc/profile
  2. 退出当前shell重新登录
  3. 临时生效可用ulimit -n number

查看当前:

  1. 进程:cat /proc/<process_pid>/limits
  2. lsof -p $process_pid 每个文件描述符的具体属性
  3. lsof -p $process_pid | wc -l  当前进程file descriptor table中FD的总量
  4. 用户:ulimit -n -u

    ulimit(选项):

      -a:显示目前资源限制的设定;
      -c <core文件上限>:设定core文件的最大值,单位为区块;
      -d <数据节区大小>:程序数据节区的最大值,单位为KB;
      -f <文件大小>:shell所能建立的最大文件,单位为区块;
      -H:设定资源的硬性限制,也就是管理员所设下的限制;
      -m <内存大小>:指定可使用内存的上限,单位为KB;
      -n <文件数目>:指定同一时间最多可开启的文件数;
      -p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
      -s <堆叠大小>:指定堆叠的上限,单位为KB;
      -S:设定资源的弹性限制;
      -t <CPU时间>:指定CPU使用时间的上限,单位为秒;
      -u <程序数目>:用户最多可开启的程序数目;
      -v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。

ulimits文件中的添加格式:

[username | @groupname]  type  resource [ limit | unlimited ]

  [username | @groupname]:

   username:设置需要被限制的用户名,

   @groupname:组名前面加@和用户名区别。

   也可以用通配符*来做所有用户的限制。

  type:有 soft,hard 和 -,
    soft :指的是当前系统生效的设置值。
    hard:表明系统中所能设定的最大值。
    -      :表明同时设置了 soft 和 hard 的值。
    注意:soft 的限制不能比hard 限制高。

  resource:
    core - 限制内核文件的大小(kb)
    date - 最大数据大小(kb)
    fsize - 最大文件大小(kb)
    memlock - 最大锁定内存地址空间(kb)
    nofile - 打开文件的最大数目
    rss - 最大持久设置大小(kb)
    stack - 最大栈大小(kb)
    cpu - 以分钟为单位的最多 CPU 时间
    noproc - 进程的最大数目
    as - 地址空间限制
    maxlogins - 此用户允许登录的最大数目

  [  limit | unlimited ]:

    limit   :限制所用的数字,具体可根据服务器的硬件配置和服务所需自定义。
    unlimited:无限制

/etc/systemd/system.conf

#  This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details. [Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#CrashShell=no
#ShowStatus=yes
#CrashChVT=1
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=1 2
#JoinControllers=cpu,cpuacct net_cls,net_prio
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
#CapabilityBoundingSet=
#SystemCallArchitectures=
#TimerSlackNSec=
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultRestartSec=100ms
#DefaultStartLimitInterval=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=no
#DefaultTasksAccounting=no
#DefaultTasksMax=
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=

默认 system.conf  文件中给很多可限制的参数

文件和进程的参数如下:

DefaultLimitNOFILE=1024000
DefaultLimitNPROC=1024000

参数生效:

systemctl daemon-reload
systemctl restart service_name.service

File Descriptors的设置

/proc/sys/fs/file-max决定了当前内核可以打开的最大的文件句柄数

使用shell计算

grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'

设置:

  临时生效

sysctl -w fs.file-max=100000 

  永久生效

vim /etc/sysctl.conf + fs.file-max = 100000

  查看

cat /proc/sys/fs/file-max

or

sysctl fs.file-max

/proc/sys/fs/file-nr中的值由三部分组成,分别为:

  • 已经分配的文件句柄数
  • 已经分配单没有使用的文件句柄数
  • 最大文件句柄数

第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件句柄无一浪费的都已经被使用了
查找文件句柄问题的时候,还有一个很实用的程序lsof,可以很方便看到某个进程开了那些句柄,也可以看到某个文件/目录被什么进程占用了

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
  • file-max是内核级别的,所有的进程总和不能超过这个数
  • ulimit是进程级别的

Linux systemd limits的更多相关文章

  1. Linux systemd 打开调试终端、添加开机自运行程序

    /************************************************************************* * Linux systemd 打开调试终端.添加 ...

  2. Linux systemd资源控制初探

    Linux systemd资源控制初探 本文记录一次cgroup子目录丢失问题,并简单探索了Linux systemd的资源控制机制. 问题现象 我们希望通过systemd拉起服务并通过cgroup限 ...

  3. linux systemd 从简单的例子入门

    linux systemd 从简单的例子入门 网上很多相关链接,一上来就给一大堆命令和讲解,让人头都大. 我们希望有一个service(服务),让它在开机启动的时候就执行. 用 root 登陆以后: ...

  4. [转帖]Linux systemd 常用命令

    Linux systemd 常用命令 https://www.cnblogs.com/tsdxdx/p/7288490.html systemctl hostnamectl timedatectl l ...

  5. [转帖][Linux]systemd和sysV

    [Linux]systemd和sysV   转自:https://www.cnblogs.com/EasonJim/p/7168216.html 在Debian8中systemd和sysVinit同时 ...

  6. 源码解读Linux的limits.conf文件

    目录 目录 1 1. 前言 1 2. PAM 2 3. pam_limits 2 4. limits.conf的由来 3 5. 模块入口函数 4 6. 解析limits.conf 6 7. 生效lim ...

  7. Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

    RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

  8. linux systemd详解

    CentOS 7 使用systemd替换了SysV.Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务. s ...

  9. [Linux]systemd和sysV

    转自:https://www.cnblogs.com/EasonJim/p/7168216.html 在Debian8中systemd和sysVinit同时存在,NTP就是在/etc/init.d/n ...

随机推荐

  1. rabbitmq使用方法(二)

    Work Queues In the first tutorial we wrote programs to send and receive messages from a named queue. ...

  2. 喵哈哈村的魔法考试 Round #20 (Div.2) 题解

    题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...

  3. iOS离屏渲染之优化分析

    在进行iOS的应用开发过程中,有时候会出现卡顿的问题,虽然iOS设备的性能越来越高,但是卡顿的问题还是有可能会出现,而离屏渲染是造成卡顿的原因之一.因此,本文主要分析一下离屏渲染产生的原因及避免的方法 ...

  4. 普通用户使用docker命令免sudo权限的问题

    方法很多,只写一种 操作步骤: 使用有sudo权限的帐号登录系统. 创建docker分组,并将相应的用户添加到这个分组里面. sudo usermod -aG docker your_username ...

  5. mysql 字符串分割 和 动态执行拼接sql

    本人以前主要用的是MSSQL,最近项目在使用MYSQL,自己是一个 典型的小白.今天就记录一下 一个mysql存储过程,里面需要分割字符串和 动态执行sql语句. 关于字符串 分割我开始使用 LOCA ...

  6. 关于VC预定义常量_WIN32,WIN32,_WIN64(转)

    VC2012 下写 Windows 程序时,有时需要判断编译环境.在之前的文章<判断程序是否运行在 Windows x64 系统下.>里说过如何在运行期间判断系统环境,但在编译时如何判断? ...

  7. Reg 命令修改注册表

    首先要说明:编辑注册表不当可能会严重损坏您的系统.在更改注册表之前,应备份计算机上任何有价值的数据 只有在别无选择的情况下,才直接编辑注册表.注册表编辑器会忽略标准的安全措施,从而使得这些设置会降低性 ...

  8. Swift 静态派发和动态派发

    前言 方法是 Swift 中的一个重要概念,方法允许你把需要复用的代码封装进方法中,这样当你调用方法时,实际上你的想法是执行方法中的那些代码,方法的出现极大的提高了方法的复用性. Swift 工程的环 ...

  9. 一起SQL引发OOM的解决思路与过程(转载)

    在TOMCAT WEB程序的运行过程中,突然触发了内存溢出错误,检查Tomcat的localhost日志,找到如下信息: java.lang.OutOfMemoryError: Java heap s ...

  10. 如何查看Apache的连接数和当前连接数

    查看Apache的连接数和当前的连接数以及IP访问次数,下面有个不错的示例,大家可以参考下,希望对大家解决问题有所帮助 查看了连接数和当前的连接数 复制代码 代码如下: netstat -ant | ...