• limit 命令详解

    • 语法

    • **参数**:

    • 参数详解

  • 小结下 limit 配置过程中容易跳的坑

说来惭愧,我被ulimit摔了一跤...

自接触 linux 后,大家所受的教育就是 ulimit是最便捷的内核优化途径,事实也确实如此。

这次摔跤也是基础知识遗忘,所以特地总结下。「反正每次写文档都忍不住吐槽国内博客技术文档,大家相互抄,最后错的都能变成对的...」。文末有高并发业务,32c64g硬件配置的ulimit 配置推荐

从下图开始,如果如下几个问题都能正确回答,就可以关闭文章了:

  1. ulimit -a 设置的 open files 为什么是 65535, 这个数字从何而来,有何依据
  2. 为什么 open files 显示的是 65535, 而 lsof -u www | wc -l 显示的却有 3145600,但仍然能 su - www成功,不应该超过 65535后,就应该提示  resource limit 错误吗?

ulimit问题截图.png

其实如上两个问题都是很基础的问题。

先说 65535 从何而来。从我能追溯到的文章来看,比较合理的解释是,在真实 32 位操作系统还存在时, 2^16-165535, 即系统预留16位给自己使用,最多提供16位给用户程序。在32位系统中,select()函数甚至做了硬上限规定。当然,这仅限于32位系统,现今64位系统不存在65535上限问题。即可大于该数值

一些对句柄数有严重依赖的新秀开源软件,也在官网文档中明确声明 max open files 数值,以 swoole为例,建议配置为20w +, 远超 65535 。

至于,为什么现今互联网所有文档中依然沿用 65535 ,大概率是“抄袭” 遗留的问题。so...

第二个问题,为什么已经最大文件句柄数已经超限,但还能su - www。这里要复习下 ulimit 的知识了。

limit 命令详解

语法

ulimit [-aHS][-c ][-d ][-f ][-m ][-n ][-p ][-s ][-t ][-u ][-v ]

参数

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

参数详解

core file size           (blocks, -c) 0data seg size            (kbytes, -d) unlimited  # 一个进程的数据段的最大值scheduling priority              (-e) 0file size                (blocks, -f) unlimited  # Shell创建文件的最大体积, 1block = 512bytespending signals                  (-i) 1031426    # 最多允许多少个待处理的信号max locked memory        (kbytes, -l) 64         # 每个进程可以锁住的物理内存的最大值max memory size          (kbytes, -m) unlimited  # 每个进程可以使用的常驻内存的最大值open files                       (-n) 65535      # 每个进程可以同时打开的最大文件数, 不能是unlimitedpipe size             (512 bytes, -p) 8          # 管道的最大值, 1block = 512bytesPOSIX message queues      (bytes, -q) 819200     # POSIX的消息队列的最大值real-time priority               (-r) 0stack size               (kbytes, -s) 10240      # 单个进程能够使用的最大栈大小cpu time                (seconds, -t) unlimited  # 单个进程的最大CPU时间, 也就是可使用CPU的秒数, 到硬极限时, 这个进程就会立即自杀; 到软极限时, 每秒发送一次限制超时信号SIGXCPUmax user processes               (-u) 131072     # 单个用户可同时运行的最大进程数, 不能是unlimitedvirtual memory           (kbytes, -v) unlimited  # 每个进程可使用的最大虚拟内存file locks                       (-x) unlimited  # 每个进程能锁住的最大文件个数

open files 设置的65556`  是进程可打开的最大文件句柄数,即用户可打开的最大文件句柄数是:

(max user processes) * (max open files)

so...

图中虽然 www 用户打开了 3145600 个文件句柄数, 但如果

  1. 没有超过系统最大句柄数限制, 即 (max user processes) * (max open files)
  2. 没有超过 max user processes 限制;
  3. 没有超过单进程最大句柄数设置,即65535

则,应用均可正常运行。

那如何统计用户已打开的文件句柄数及用户已打开的进程数呢?

  • 统计www用户打开的进程数

    # lsof -u www | awk '{print $2}' | uniq -c | wc -l
  • 统计www用户打开的占用的所有文件句柄数

# lsof -u www | wc -l

小结下 limit 配置过程中容易跳的坑

  • 两个生效方式:永久生效和临时生效

永久生效:配置文件 /etc/sysctl.conf/etc/security/*.conf , sysctl -p 永久生效

临时生效:ulimit -SHn 65535

  • 配置优先级
  1. ulimit 命令 > /etc/security/*.conf > /etc/sysctl.conf

敲黑板

尤其是 /etc/security/*.conf 的优先级高于 /etc/sysctl.conf... 这里非常容易误导

  1. 应用内置的ulimit 设置 > 运行用户的系统 ulimit 设置

以如图mongodb启动脚本为例,如果在启动脚本中专门设置了 ulimit ,则以ulimit 为准。

02-mongodb启动脚本.png

类似的配置如 nginxworker_rlimit_nofile 配置。

  • 失效背景
  1. Centos 6 和7 配置 ulimit 区别

Centos 7 systemd 接管系统后,削弱了对 /etc/sysctl.conf的权限。关注  /etc/security/limits.conf/etc/security/limit.d/*.conf 的配置。基本不会出差。

  1. Daemon 进程 ulimit 失效

敲黑板

ulimit 生效针对的是运行在当前执行 Ulimit 命令的bash shell。即,以 daemon 运行的进程启动时,bash shell的环境变量对其无效。

# man ulimit...ulimit [-HSTabcdefilmnpqrstuvx [limit]]              Provides control over the resources available to the shell and to processes started  by  it,  on  systems  that  allow  such  control.
  • 查看系统和进程的ulimit 设置
# cat /proc/sys/fs/file-max  # 查看系统 max files 设置# cat /proc/$fpid/limits   # 查看进程 limit 配置

最后提供一个高并发业务ulimit 的配置模板:

  1. 配置/etc/sysctl.conf

    设置 fs.file-max = 6553560  即 650w, 从我们现有的业务来看,32c64g的服务器,配置了1200 php-fpm和 1000线程 swoole。系统总的句柄消耗达到了 320w+

  2. 配置/etc/security/limits.conf

    * soft nofile 65535* hard nofile 65535* soft noproc 65535* hard noproc 65535root soft nofile 65535root hard nofile 65535root soft noproc 65535root hard noproc 65535
  3. 一定要配置/etc/security/limits.d/90-nproc.conf

*          soft    nproc     65535root       soft    nproc     65535

~ over

ulimit限制 新系统_说来惭愧,我被ulimit摔了一跤...相关推荐

  1. ulimit限制 新系统_系统限制ulimit学习

    ulimit命令 ulimit用于控制系统内执行资源的限制,如coredump文件大小.文件的最大值.能打开的最大文件数等. 执行ulimit -a可以看到当前的资源限制情况. [root@local ...

  2. ulimit限制 新系统_遇到一个很奇怪的问题,ulimit设置问题

    我加了,发现变成12288了 /public/home/li/.bash_profile: 第 19 行:ulimit: stack size: 无法修改 limit 值: 不允许的操作 core f ...

  3. ulimit限制 新系统_graylog日志分析系统上手教程

    日志分析系统可以实时收集.分析.监控日志并报警,当然也可以非实时的分析日志.splunk是功能强大且用起来最省心的,但是要收费,免费版有每天500M的限制,超过500M的日志就没法处理了.ELK系统是 ...

  4. ulimit限制 新系统_Linux查看及修改系统的资源限制命令ulimit

    在Linux,查看系统对资源使用的显示可以使用命令ulimit,其中参数-a会列出所有的资源使用限制.[demo@server ~]$ ulimit -a core file size (blocks ...

  5. ios 静态方法是否能被重写_小米新系统亮相,比苹果iOS更干净,21款手机支持升级...

    12月28日,小米正式发布MIUI12的升级版--MIUI12.5.虽然只是一个"半版本",但所展现出的功能,所耗费的工量,都不亚于一次大版本的升级.在12月28日,MIUI12. ...

  6. 苹果挂端口方法_苹果新系统遭吐槽!SSH 默认规则被破坏,程序员无法登录 Web 服务器......

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub!转自量子位苹果电脑最新的 10.15.4 系统,你更新了吗?如果你不幸升级,而且 ...

  7. 华为手机asph啥机型_华为正式宣布!19款机型开启新系统内测,你的手机榜首有名吗?...

    很多人换新手机时,除了考虑价格.配置.外观之外,还有一个重要的因素,这个因素也是决定着各大手机厂商用户的留存率,它就是手机系统.说到手机系统,相信大家脑海里面第一时间都会冒出来苹果的iOS系统,就算很 ...

  8. 雨林木风系统md5值_微软停止Windows系列新系统开发,珍惜你的Win10吧。。。

    最近微软闹了个大新闻,他们亲手撕掉了养了几十年的儿子 Windows. 这么说有些夸张了,微软是不可能放弃 Windows 的. 准确的说...是 撤销了 Windows 部门. 很长一段时间, Wi ...

  9. 新款苹果手机_苹果宣布新系统 性能依旧“压制quot;安卓

    点击上方"蓝字"关注我们了解更多精彩 苹果宣布新系统-- 性能依旧"压制"安卓 对于关注WWDC 2020大会的朋友们一定都不陌生,苹果会在这届大会上发布自己一 ...

最新文章

  1. LeetCode简单题之数组序号转换
  2. 手机怎么打开f12_手机App调试(Android)
  3. 链表之CIRCLEQ
  4. SAP C4C里没有选择Port binding的url Mashup行为分析
  5. java getxxx_java的invoke与getMethod方法用法
  6. HDU 6579 Operation (前缀线性基模板题)
  7. python教材知乎_python大学里用哪本教材比较好?
  8. IOS开发-TableView表视图LV2
  9. 31. Minimize compilation dependencies between files
  10. [Iphone开发]如何在GDB中查看变量的值
  11. Unity3D最全性能优化参考手册(渲染、代码、UI)
  12. Pr 入门教程如何倾斜移位效果?
  13. linux查看udp丢包数量,Linux下UDP丢包问题分析思路
  14. 计算机主机名称在哪里,Mac修改主机名和计算机名
  15. 【整理】关于Android图形系统的一些事实真相
  16. 004 数字调制ASK,OOK,FSK,PSK,QAM,CPFSK
  17. dubbo 报错 com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:408)
  18. CF1095A Repeating Cipher
  19. 教你如何实现网页自由!
  20. excel两个表格内容合并

热门文章

  1. wxWidgets:wxCloseEvent类用法
  2. boost::unique_copy相关的测试程序
  3. boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例
  4. boost::hana::flatten用法的测试程序
  5. boost::hana::greater_equal用法的测试程序
  6. boost::hana::remove用法的测试程序
  7. boost::graph模块实现分布式压缩稀疏行图类型的测试
  8. boost::planar_canonical_ordering用法的测试程序
  9. boost::geometry::math::equals用法的测试程序
  10. Boost:BOOST_VERIFY_MSG扩展的用法测试程序