nproc、nofile 对于systemctl 服务设置不生效

背景

在一次mq集群运维过程中,broker不能正常启动,报错(Too many open files)

排查过程

看到这个错误首先想到的解决方法是修改系统文件最大连接数的限制,但是通过命令查看当前系统连接数已经为比较大的值(655350)。接着判断是不是配置没有生效,或者是当前进程的配置获取的并不是系统的全局配置,结合想到启动broker是通过linux server进行启动(systemctl),为了验证当前进程的文件连接现在,在broker启动脚本中,加入命令uname -a。在通过启动服务时,输出为
控制台

这样确定是配置没有生效。

解决方法

  1. 修改broker服务的LimitNOFILE配置

vim /usr/lib/systemd/system/broker.service

[Service]
LimitNOFILE=100000
  1. 重启broker服务,解决问题
systemctl restart broker

扩展

nproc、nofile的含义

  1. nproc: 单个用户可用的最大进程数量
  2. nofile: 可打开的文件描述符的最大数

如果超过限制值,出现的错误描述

nproc

Cannot create GC thread. Out of system resources  
java.lang.OutOfMemoryError: unable to create new native thread

nofile

Too many open files

配置并生效

  1. 修改系统配置 (需要重启)

vim /etc/security/limits.conf


# * 代表全部用户

*              soft    nofile  65536
*              hard    nofile  65536
baseuser        hard    nproc   65536
baseuser        soft    nproc   65536
  1. 控制台修改(不需要重启)
ulimit -u 655350
  1. 对于通过系统服务启动的程序(通过systemctl启动,修改配置后需求重启服务)

如果不进行设置,默认配置为1024,改配置不受 系统配置影响,因此会出现系统配置限制调大,但是通过服务启动的进程,依然报错

对特定服务进行控制
vim /usr/lib/systemd/system/xxx.service

[Service]
LimitNOFILE=655350
LimitNPROC=655350

配置查看命令

  1. 进程实时打开文件数
  lsof -p {PID} |wc -l
  1. 进程最大可打开文件数
  cat /proc/{PID}/limits
  1. 系统可打开文件数限制
cat /proc/sys/fs/file-max
  1. 查看当前限制配置
ulimit -u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值