关于limits生效的四个案例

简介: 进程大量too many open file 的报错,修改/etc/security/limits.conf未生效

第一个问题
limits.conf的限制在/proc/pid/limits中未生效

# cat /proc/3606/limits
Limit                     Soft Limit           Hard Limit           Units
Max processes             31202                31202                processes
Max open files            1024                 4096                 files

在Centos7 & ubuntu 系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。
/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf与/etc/security/limits.d下的文件设置即可。

对于systemd service的资源设置,则需修改全局配置,
全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,
同时也会加载两个对应目录中的所有.conf文件/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf
system.conf是系统实例使用的,user.conf是用户实例使用的。

vim /etc/systemd/system.conf
DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535

修改并重启即可

# cat /proc/3613/limits
Limit                     Soft Limit           Hard Limit           Units
Max processes             65535                65535                processes
Max open files            100000               100000               files

第二个问题
在服务里面设置LimitNOFILE=infinity为什么不是无穷大?
在服务里面设置LimitNOFILE=infinity 后,通过查看pid的limit发现openfile是65536 ,而不是无穷大
查看服务配置

[root@iZwz98aynkjcxvtra0f375Z ~]# cat /etc/systemd/system/multi-user.target.wants/docker.service |grep -vi "^#"|grep -vi "^$"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd://
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target

查看配置效果

# cat /proc/11019/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             31202                31202                processes
Max open files            65536                65536                files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       31202                31202                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

这个是systemd的bug,低于240的版本需要手动设置才可以生效
LimitNOFILE=102400
https://github.com/systemd/systemd/issues/6559

第三个问题
为什么openfile不能设置为unlimited

[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n
65535
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n unlimited
-bash: ulimit: open files: cannot modify limit: Operation not permitted

原因是 centos7里 openfile不能大于nr_open

[root@iZwz98aynkjcxvtra0f375Z ~]# cat /proc/sys/fs/nr_open
1048576
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n 1048577
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n 1048576
[root@iZwz98aynkjcxvtra0f375Z ~]# ulimit -n
1048576

关于file-max nr_open file_nr的解释 可参考
https://www.kernel.org/doc/Documentation/sysctl/fs.txt

第四个问题
使用supervisor管理进程(测试环境ubuntu 1604)启动进程后,maxfile是1024
需要修改配置文件

#cat  /etc/supervisor/supervisord.conf
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

下面这两行
minfds=655350                  ; min. avail startup file descriptors; default 1024
minprocs=65535                 ; min. avail process descriptors;default 200

# cat /proc/2423/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             65535                65535                processes 
Max open files            655350               655350               files          ------------修改成功
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       61946                61946                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us    

外部文档
https://www.cnblogs.com/zengkefu/p/5635153.html
https://blog.csdn.net/google0802/article/details/52304776
http://blog.cloud.360.cn/post/tuning-your-system-for-high-concurrency.html
https://blog.csdn.net/qq_38165374/article/details/104881340

目录
相关文章
|
网络协议
udhcpc 参数使用说明
当没有网络的时候,板子一直发送dhcp请求,导致程序不往下执行,解决的办法是把它切换到后台运行,可是如何切换到后台呢,有办法,它自带参数可以实现该功能。如下:   udhcpc -b -i eth0 -p /var/run/udhcpc.pid -R解释一下,-b就是切换到后台指令,-i是指定使用哪个网络接口,双网卡的时候一定要使用它来指定eth0  or  eth1。
3076 0
|
4月前
|
弹性计算 人工智能 编解码
阿里云38元和9.9元、199元轻量应用服务器解析:抢购资格、适用场景与使用等常见问题解答
2026年阿里云轻量应用服务器抢购活动推出38元/年(2核2G)和9.9元/月/199元/年(2核4G)两款高性价比配置,均配备200M峰值带宽及预置应用镜像,适合网站搭建、开发测试及AI应用部署等场景。活动限实名认证新用户参与,每个用户仅可购买一台,需在每日10:00和15:00抢购。峰值带宽为共享资源,适合低负载场景,高负载场景建议选择ECS固定带宽方案。
|
数据采集 Web App开发 存储
用Python的Requests+BeautifulSoup爬取微博热搜榜及话题内容
用Python的Requests+BeautifulSoup爬取微博热搜榜及话题内容
如何做一个供应商自动询报价系统?
本文介绍了一个自动化询报价系统的搭建过程,旨在解决传统采购询价与供应商报价中的信息分散、效率低下和人工比价易出错等问题。系统涵盖需求收集、自动询价、供应商在线报价、智能比价及核价确认五大模块,实现采购流程标准化、数据集中化和操作自动化,提升采购效率与供应商协作质量。
|
Web App开发 存储
常见抓包工具配置抓取HTTPS
常见抓包工具配置抓取HTTPS
2445 1
|
机器学习/深度学习 算法 算法框架/工具
为什么使用C++进行机器学习开发
C++作为一种高性能语言,在某些性能要求极高或资源受限的场景下也具有非常重要的地位。C++的高效性和对底层硬件的控制能力,使其在大规模机器学习系统中发挥重要作用,尤其是当需要处理大数据或实时响应的系统时。
554 3
|
存储 人工智能 JSON
Evolving Agents:开源Agent革命!智能体动态进化框架上线,复杂任务一键协同搞定
Evolving Agents 是一个开源的AI Agent管理与进化框架,支持智能代理之间的通信与协作,能够根据语义理解需求动态进化,适用于文档处理、医疗保健、金融分析等多个领域。
875 26
Evolving Agents:开源Agent革命!智能体动态进化框架上线,复杂任务一键协同搞定
|
存储 人工智能 物联网
人人都是设计师,挑战0代码打造专属氛围感风格海报!
无需编程和设计基础,借助阿里云PAI ArtLab,轻松实现任意风格的海报设计。通过在线服务PAI-EAS和对象存储OSS,用户可以快速部署ComfyUI环境,上传线稿后一键生成企业风格海报。提供详细的操作步骤和多种风格示例,如岩石废土风、节日圣诞风和假日海洋风,帮助你轻松上手,快速出图。
802 15
|
Java DataX Docker
arm 64 环境利用 docker 编译 datax 工具
arm 64 环境利用 docker 编译 datax 工具
996 0

热门文章

最新文章