首页 > 其他分享 >supervisord 中的 open files 数量限制

supervisord 中的 open files 数量限制

时间:2023-04-08 14:36:57浏览次数:43  
标签:files supervisord limits Max unlimited nofile Limit open

Linux 中的 nofile 设置

Linux 系统通过 rlimit 来对一个进程可以使用的计算机资源进行限制,其中 nofile 表示单个进程可以打开的文件句柄数,默认值为 1024。 我们知道,Linux 系统下一切都是文件,这不仅包括了常规的文件,还包括 socket, pipe 等等,对于一些较大的应用,如数据库,Web 服务器等,1024 这个限制肯定是不够的。所以一般在初始化新服务器时都要进行修改,例如修改 /etc/security/limits.conf,把所有用户的 nofile 限制设置为 65535,其中,* 不能用于 root 用户,root 用户必须显式地使用 root 定义。

root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

查看当前 Shell 的 nofile 限制,可以使用

> ulimit -n
65535

查看某一个进程的 nofile 限制,可以使用

> cat /proc/$PID/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             15076                15076                processes
Max open files            65500                65500                files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15076                15076                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

刚刚接触的时候,会比较疑惑“Soft Limit” 和 ”Hard Limit” 是什么区别?其实这是一个非常巧妙的设计,我们在实际工作中,对不同进程的资源限制往往是不一样的,需要能够灵活地配置。“Soft Limit”就是这样的作用,用户可以自由地增加或减小 ”Soft Limit”的值,让自己的进程有不同的资源限制。而“Hard Limit”则代表了这个用户能设置的资源限制的最大值。当然这里的用户指的是非 root 用户。

supervisord 中的 nofile 坑

supervisord 是一个常用的进程管理工具,不仅可以简化进程的启动操作,还可以在进程意外退出时自动重启。但是这里有一个坑是,默认情况下,我们会发现 supervisord 启动的进程,并不会使用 /etc/security/limits.conf 中配置的 nofile 数值,而是会默认设置为 1024。

检查 supervisord 的配置文件 /etc/supervisor.conf 中,会发现一个 minfds 的参数设置了 nofile 限制,默认为 1024。难道是 supervisord 的配置限制了 nofile ?

[supervisord]

minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

这里需要注意的另一个点是这里的 minprocs 参数,minprocs 对应的是 rlimit 中的 nproc, nproc 代表一个进程最多可以创建的线程数。这里设置成了 200,但是我们查看 supervisord 进程的 limits 时,Max processes 却不是 200。说明这个配置其实并没有生效。

还好,我们可以查看 supervisord 的源码,访问:https://github.com/Supervisor/supervisor/blob/master/supervisor/options.py#L1466,

            soft, hard = resource.getrlimit(res)

            if (soft < min_limit) and (soft != -1): # -1 means unlimited
                if (hard < min_limit) and (hard != -1):
                    # setrlimit should increase the hard limit if we are
                    # root, if not then setrlimit raises and we print usage
                    hard = min_limit

                try:
                    resource.setrlimit(res, (min_limit, hard))
                    self.parse_infos.append('Increased %(name)s limit to '
                                '%(min_limit)s' % locals())
                except (resource.error, ValueError):
                    self.usage(msg % locals())

这里可以看出,只有当前 limit 小于配置文件中的值时才会调用 setrlimit。这说明系统中配置的 rlimit 并没有生效。

其实 /etc/security/limits.conf 文件的开头已经写得很明白了。

> head /etc/security/limits.conf
# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
#

/etc/security/limits.conf 中的配置对 systemd 启动的进程是无效的。我们的 supervisord 是通过 systemd 启动的,在没有设置的情况下,使用的是系统默认的 nofile 限制数据,Soft Limit 为 1024,Hard Limit 为 4096。

systemd 中的 nofile,要通过 LimitNOFILE 参数设置,例如编辑 /usr/lib/systemd/system/supervisord.service 将LimitNOFILE设置为 10000。

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target

[Service]
Type=forking
LimitNOFILE=10000
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf

[Install]
WantedBy=multi-user.target

保存文件后,需要调用 systemctl daemon-reload 刷新服务配置。

# 查看默认的 LimitNOFILE
> systemctl show -p DefaultLimitNOFILE
4096
# 查看某一个 Service 的 LimitNOFILE
> systemctl show supervisord -p LimitNOFILE
10000

标签:files,supervisord,limits,Max,unlimited,nofile,Limit,open
From: https://www.cnblogs.com/gongxianjin/p/17298503.html

相关文章

  • 09、OpenFoam中的PISO,SIMPLE和PIMPLE算法
    隐式:PISO半隐式:SIMPLE组合式:PIMPLE(PISO+SIMPLE)PISO算法PISO算法是一种常用于求解不可压缩流体流动问题的数值方法,它在OpenFOAM中被广泛应用。PISO算法的全称为PressureImplicitwithSplittingofOperators,即利用算子分裂的方法进行隐式求解压力和速度。PISO算法主要分为......
  • openstack高可用(pike版本)-架构
    1、API服务包括*-api,neutron-server,glance-registry,nova-novncproxy,keystone,httpd等。由HAProxy提供负载均衡,将请求按照一定的算法转到某个节点上的API服务。由Pacemaker提供VIP。2、内部组件包括*-scheduler,nova-conductor,nova-cert等。它们都是无状态的,因此可以......
  • OpenBSD 安装器引进引导式磁盘加密功能
    导读全盘加密在当今的计算环境中非常重要,但仍有一些操作系统没有提供在安装时设置加密磁盘的简单且流线型的方式。Linux 发行版OpenBSD就是其中之一。不过根据OpenBSD代码仓库近期的合并记录,他们即将在安装程序中添加引导式磁盘加密(GuidedDiskEncryption)选项。......
  • Azure OpenAI入门(二):了解提示工程
    1 基础环境配置1. 测试先决条件:l Python3.7.1 或更高版本l 安装openai客户端和python-dotenv、langchainpipinstallopenaipython-dotenvlangchain2. 导入库和配置AzureOpenai相关凭据#初始化链接importopenaiimportosimportIPythonfromlangchain.llmsimportO......
  • OpenCV获取相机旋转矩阵和平移矩阵
    想要求解旋转矩阵和平移矩阵,先要了解相机内参矩阵和畸变矩阵如何获取,不了解的可以先移步https://www.cnblogs.com/nobodyx/p/17297074.html先上代码#include<iostream>#include<vector>#include<glob.h>#include<opencv2/opencv.hpp>intmain(){//使用glob库......
  • openGauss安装问题及解决
    openGauss安装问题及解决安装成功示意图openGauss安装成功结果DataStudio工具安装连接成功结果安装过程中的问题及解决openEuler版本不适配开始的时候用的是openEuler22.03版本,安装过程中明显感觉各种源文件以及目录分布都不同,抱着试一试的心态继续安装。先是出现了下......
  • python opencv line
    pythonopencvline importcv2#Loadanimageimg=cv2.imread("image1.jpg")#Drawaredlinefrom(0,0)to(100,100)withathicknessof5pixelscv2.line(img,(0,0),(100,100),(0,0,255),5)#Displaytheimagecv2.imshow("Im......
  • windows使用openssh
    1openssh安装openSSH下载路径(Windowsx64版本)win10自带了openssh工具,可在设置-->应用-->管理可选功能-->添加功能内查看1.解压到需要部署的服务器的C:\ProgramFiles下。别问为什么,官方就这么说的2.使用管理员模式的cmd到C:\ProgramFiles\OpenSSH-Win64路径下安装sshd......
  • Win10配置OpenSSH服务
    1.设置—>应用—>可选功能,安装OpenSSH服务2.开启服务以管理员身份运行WindowsPowershell,开启ssh服务PSC:\Windows\system32>netstartsshdWin+R,输入services.msc,打开Win10服务设置,启动类型改为自动3.更改服务端ssh端口将C:\Windows\System32\OpenSSH中sshd_conf......
  • OpenCV获取相机的内参矩阵和畸变矩阵
    实验室任务要截止了,赶紧来上传一下学习成果,终极目的是获取视频每帧的旋转矩阵和平移矩阵,但没办法一口吃个胖子,所以先写一下相机内参矩阵和畸变矩阵的求解办法先上代码#include<opencv2/opencv.hpp>#include<iostream>#include<vector>usingnamespacecv;usingnamespace......