centos 7.x设置守护进程的文件数量限制

在Bash中有个ulimit命令,提供了对Shell及该Shell启动的进程的可用资源控制。主要包括打开文件描述符数量、用户的最大进程数量、coredump文件的大小等。

1. 系统级设置

1.1 CentOS 5/6

在CentOS 5/6等版本中,资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。
当然,/etc/security/limits.d/
中可以配置,系统是先加载limits.conf然后按照英文字母顺序加载limits.d目录下的配置文件,后加载配置覆盖之前的配置。 一个配置示例如下:

soft nofile 100000
hard nofile 100000
soft nproc 100000
hard nproc 100000
soft core 100000
hard core 100000

1.2 CentOS 7/RHEL 7

在CentOS 7/RHEL 7的系统中,使用Systemd替代了之前的SysV,因此/etc/security/limits.conf 文件的配置作用域缩小了一些。

limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。登录用户的限制,与centos 5/6一样,通过/etc/security/limits.conf和
limits.d来配置即可。

2. systemd service的资源限制设置

2.1 全局的配置

配置位置有两个位置:/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用户实例使用的

一般的sevice,使用system.conf中的配置即可。systemd.conf.d/*.conf中配置会覆盖system.conf。

DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000

注意:修改了system.conf后,需要重启系统才会生效

2.2 单个service配置

针对单个Service,也可以设置,以nginx为例。

编辑/usr/lib/systemd/system/nginx.service文件,或者/usr/lib/systemd/system/nginx.service.d/my-limit.conf文件,做如下配置:

[Service]
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000

然后运行如下命令,才能生效。

sudo systemctl daemon-reload
sudo systemctl restart nginx.service
查看一个进程的limit设置:cat /proc/YOUR-PID/limits

例如我的一个nginx service的配置效果:
$ cat /proc/$(cat /var/run/nginx.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 unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 100000 100000 processes
Max open files 100000 100000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 1030606 1030606 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

顺便提一下,CentOS7自带的/etc/security/limits.d/20-nproc.conf,里面默认设置了非root用户的最大进程数为4096,被limit.d目录中的配置覆盖了。

参考文档:

man systemd

man systemd-system.conf

原文地址:https://www.cnblogs.com/lenmom/p/9993146.html

时间: 2024-11-09 00:10:16

centos 7.x设置守护进程的文件数量限制的相关文章

如何编写一个守护进程daemon

大体步骤如下 1.   调用fork()函数创建子进程后,让父进程立即exit(),这样产生的子进程变成孤儿进程,由init进程接管. 2.   调用setsid()函数,使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程.在linux系统中,所有的进程都属于各自的进程组,进程组是一个或多个进程的集合,一个进程组中至少有一个进程成员,否则就消亡了.每个进程组都有一个进程组ID,是由领头进程的进程号决定的,会话则是一个或多个进程组的集合,每个会话都有一个领头进程,会话和进程组

windows下通过bat脚本和计划任务实现设置某一服务的守护进程

通常服务器上跑的服务或者应用程序比较重要,如果无意间被关闭将造成不定程度的影响.通过为比较重要的服务设置守护进程,守护服务的进程.当服务关闭时可以自动开启,方法如下: 第一步:写守护进程的bat脚本  内容如下: 脚本内容中  set_task=RDO.exe意思为检查是否有RDO.exe进程. 要用的话就改成自己的进程名,如果进程宕了就过会自动重启(会在RDO.exe进程安装目录下生成一个start.bat) 其中 start.bat脚本内容中的start 后面的参数与set_svr后面的参数

Python编写守护进程程序

Python编写守护进程程序思路 1. fork子进程,父进程退出通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端和shell都是进程,shell进程是终端进程的子进程,通过ps命令可以很容易的查看到.在这个shell环境下一开始执行的程序都是shell进程的子进程,自然会受到shell进程的影响.在程序里fork子进程后,父进程退出,对了shell进程来说,这个父进程就算执行完了,而产生的子进程会被init进程接管,从而也就脱离了终端的控制. 2-4

th5.1 队列使用守护进程

起因 公司项目使用到了redis队列, 使用队列就会遇到队列被干掉的情况, 所以需要使用守护进程 过程 当项目上线之后, 需要在子项目根目录启动队列 php think queue:listen 但是这种写法, 一旦窗口关闭, 队列就会取消, 所以我就想了一个取消救国的方法, 让它在后台运行 nohup php think queue:listen 2 > &1 & 使用nohup 可以是该命令在后台运行,并把所有输出都被重定向到一个名为nohup.out的文件中 但是这样做还是避免

《APUE》读书笔记第十三章-守护进程

守护进程 守护进程是生存期较长的一种进程,它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNIX系统由很多守护进程,它们执行日常事务活动. 本章主要介绍守护进程的结构,以及如何编写守护进程程序和守护进程如何报告错误情况. 一.守护进程的编程规则 (1)首先要做的是调用umask将文件模式创建屏蔽字设置为0.这是由于继承得来的文件模式创建屏蔽字可能会拒绝设置某些权限. (2)调用fork,然后使父进程退出(exit). (3)调用setsid以创建

守护进程详细解读

守护进程概念 守护进程也称精灵进程,是运行在后台的一种特殊进程.他独立于终端并且周期性执行某种任务或者等待某件事情的发生.守护进程是一种很有用的进程.比如很多的服务器都是以次方是运行在后台,等待客户端连接并处理相关问题的. 系统中守护进程通常以d结尾标识. 创建守护进程关键的一步是调用setsid函数创建一个新的会话,并使之称为控制进程. 注:调用setsid创建守护进程的当前进程不得是进程组的leader,否则返回-1:保证这个条件的方式是:我们在当前进程进行fork生成子进程,父进程直接退出

Linux 进程(二):进程关系及其守护进程

进程关系 进程组 进程组是一个或多个进程的集合.通常,它们是在同一作业中结合起来的,同一进程组中的各进程接收来自同一终端的各种信号,每个进程组有一个唯一的进程组ID.每个进程组有一个组长进程,该组长进程的ID等于进程组ID.从进程组创建开始到最后一个进程离开为止的时间称为进程组的生命周期. #include <unistd.h> pid_t getpgrp(void); 返回值:调用进程的进程组ID int setpgid(pid_t pid, pid_t pgid); 返回值:成功,返回0:

守护进程知识及示例

守护进程(Daemon进程) 与终端无关的进程,运行在后台,生存期较长,系统关闭时终止huo可以通过命令终止或通过ps找到进程用kill杀死,有的以d结尾 终端是人与电脑交互的界面: 要以管理员身份启动:service httpd start 查看命令:ps -ef|grep httpd 关闭:service httpd stop 用命令ps -axj查看常用的守护进程: 从结果可以看出守护进程没有控制终端,其终端名设置为?,终端前台进程组ID设置为-1,init进程ID为1.系统进程依赖于操作

并发编程 之 进程 之 进程的模型: 进程同步的工具 (三) 继 创建进程( 守护进程)

multiProcessing 包中 Process模块: join() 堵塞问题, 可以理解为:  相当于 每个子进程结束时都会给 父进程发一条消息, join() 则是接收,内部有socket的实现 1, 进程之间的数据隔离问题 进程和进程之间的数据是隔离的, 内存空间不能共享,所以要想进行通信, 必须借助其他方法. 且这两个进程都是自愿的. 父子进程之间通过socket 通信. 2, 守护进程: daemon = True 守护进程的属性, 默认是 False 如果 设置成True 就表示