加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Ulimit文件描述符限制未应用于特定进程

发布时间:2020-12-13 18:34:44 所属栏目:Linux 来源:网络整理
导读:我最近检查了我们的一个redis进程到使用的ulimits: cat / proc / redis-pid / limits 并且惊讶地发现它处于低默认值: Limit Soft Limit Hard Limit Max open files 4016 4016 我很惊讶,因为我们配置了以下内容: # /etc/sysctl.conf fs.file-max = 100000
我最近检查了我们的一个redis进程到使用的ulimits:

cat / proc /< redis-pid> / limits

并且惊讶地发现它处于低默认值:

Limit                     Soft Limit           Hard Limit           
Max open files            4016                 4016

我很惊讶,因为我们配置了以下内容:

# /etc/sysctl.conf 
fs.file-max = 100000

.

# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000

.

# /etc/ssh/sshd_config
UsePAM yes

.

# /etc/pam.d/sshd
session required pam_limits.so

任何人都可以告诉我为什么增加的ulimit没有应用于正在运行的redis进程?

redis进程以用户’redis’运行,服务器已经重新启动,因为限制增加了.我们在Debian Squeeze上.

解决方法

在Linux中,可以根据需求类型在不同位置设置资源限制.

> /etc/security/limits.conf文件.
> /etc/sysctl.conf文件.
> ulimit命令

/etc/security/limits.conf是pam_limits的一部分,因此在登录会话期间pam_limits模块会读取此文件中设置的限制.登录会话可以是ssh或通过终端.并且pam_limits不会影响here中提到的守护进程.

/etc/sysctl.conf是一个系统范围的全局配置,我们不能在这里设置用户特定的配置.它设置了所有用户/进程可以使用的最大资源量.

ulimit命令用于设置shell的限制.因此,当在shell上使用ulimit设置限制时,由于子进程继承父进程属性的规则,从shell生成的进程也会获得该值.

因此,对于您的情况,由于redis是作为init的一部分启动的,因此上述任何一项都不会直接帮助您.执行此操作的正确方法是,必须使用ulimit命令在init脚本本身中设置新值.如下面的脚本,

ulimit -n 100000
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS.

已经有一个bug filed in wishlist为start-stop-daemon添加ulimit功能
.

如果有任何限制,请检查redis配置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读