如何在Debian 7上增加carbon-cache nofile限制?

时间:2016-01-04 23:21:59

标签: debian file-descriptor graphite ulimit

我在Debian 7服务器上运行Graphite 0.9.12。

最近我在碳缓存的日志中发现了错误,说“打开文件太多了”#34;根据carbon-cache的网站,我需要增加碳缓存的nofile限制。 http://graphite.readthedocs.org/en/latest/carbon-daemons.html

所以我增加了系统范围和每个进程的限制:

cat /proc/sys/fs/file-max
5000000

在/etc/security/limits.conf中

* hard nofile 1000000
* soft nofile 1000000
root soft nofile 1000000
root hard nofile 1000000
www-data soft nofile 1000000
www-data hard nofile 1000000

使用ulimit命令,我可以确认root / me / www-data的文件限制已经增加。

我多次重启碳缓存。但是,碳缓存的每进程文件限制不会增加,仍为1024:4096

Max open files            1024                 4096                 files

我使用/etc/init.d/carbon-cache启动脚本重新启动碳缓存,sudo service carbon-cache restart(或停止然后启动)

脚本是:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          carbon-cache
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: initscript for runit-managed carbon-cache service
### END INIT INFO

# Author: Opscode, Inc. <cookbooks@opscode.com>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="runit-managed carbon-cache"
NAME=carbon-cache
RUNIT=/usr/bin/sv
SCRIPTNAME=/etc/init.d/$NAME

# Exit if runit is not installed
[ -x $RUNIT ] || exit 0

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions


case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
        $RUNIT start $NAME
        [ "$VERBOSE" != no ] && log_end_msg $?
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        $RUNIT stop $NAME
        [ "$VERBOSE" != no ] && log_end_msg $?
        ;;
  status)
        $RUNIT status $NAME && exit 0 || exit $?
        ;;
  reload)
        [ "$VERBOSE" != no ] && log_daemon_msg "Reloading $DESC" "$NAME"
        $RUNIT reload $NAME
        [ "$VERBOSE" != no ] && log_end_msg $?
        ;;
  force-reload) ................ SO ON

有谁知道如何让碳缓存应用我的新nofile限制?我应该修改启动脚本还是做其他事情?

=============================================== ================

更新

我发现另一个文件可能与我的系统有关。 /etc/sv/carbon-cache/run

最初,内容显示为:

#!/bin/sh
exec 2>&1
exec chpst -u www-data -l /opt/graphite/storage/carbon-cache.lock -- /opt/graphite/bin/carbon-cache.py --pid /opt/graphite/storage/carbon-cache-a.pid --debug start

我将文件编辑为:

#!/bin/sh
ulimit -n 999999
exec 2>&1
exec chpst -o 999999 -u www-data -l /opt/graphite/storage/carbon-cache.lock -- /opt/graphite/bin/carbon-cache.py --pid /opt/graphite/storage/carbon-cache-a.pid --debug start

现在在/ proc / pid / limits中,软限制和硬限制均为999999.

1 个答案:

答案 0 :(得分:0)

  

使用ulimit命令,您可以更改软限制   当前shell环境,以及以root身份运行时的硬限制。

init.d中的脚本以新的shell env(session)开头,必须再次应用ulimit。您可以在/etc/init.d/carbon-cache语句之前添加case,例如:

ulimit -n 999999

这将为每个开始/重新启动/重新加载/等等的当前(init.d start)会话新限制设置。限制从父进程继承到其子进程,因此碳缓存也会受到影响。

修改

  1. 使用ulimit -H

  2. 设置硬限制
  3. 是主管吗?如果是,请在/etc/supervisor/supervisord.conf部分的[supervisord]中添加minfs

  4. minfds=10000