Comment augmenter le nombre maximum de descripteurs de fichiers pour les démons opérant sur Debian Jessie?

Je joue avec

pgBouncer

Comme système de piscine système pour PostgreSQL. Mon système - 12-nucléaire avec 64 GB RAM et interface réseau 1 Gbit / avec courir Debian 8.1. Maintenant, je veux élever la limite des prises ouvertes, disons, à 10.000 Clients simultanés. Lorsque vous effectuez des tests de base de données

pgbench

Les blocs utilitaires près de 950 clients simultanés qui semblent atteindre une limite de 1024 Ouvrez les stockages de fichiers, car c'était dans le bon vieux temps. j'ai vérifié

fs.file-max

Le paramètre du noyau I.

pgbench

Restreindre les ressources de l'utilisateur exécutant:

# sysctl fs.file-max
fs.file-max = 6598264
# su - postgres
$ ulimit -Sn
65536
$ fgrep files /proc/self/limits
Max open files 65536 65536 files
$

Cependant, les limites de

proc

Montrer que la limite molle pour le nombre maximum de fichiers ouverts pour

pgBouncer

(Fonctionne comme utilisateur

postgres

) Ce n'est plus 1024 Ouvrir des fichiers:

$ ps -e | fgrep pgbouncer
9840 ? 00:00:00 pgbouncer
$ fgrep files /proc/9840/limits
Limit Soft Limit Hard Limit Units
Max open files 1024 4096 files
$

J'ai essayé d'élever la limite en insérant

ulimit -S -n 5000

dans

/etc/default/pgbouncer

(Lire par script de lancement / STOP B.

/etc/init.d

), Mais cela n'a pas fonctionné. Puis j'ai essayé

nofile

Installation B.

/etc/security/limits.conf

et s'est assuré que cela est inclus dans PAM, Mais en vain.

Alors, où est exactement

start-stop-daemon

rétrograder

nofile

La limite pour les processus du démon? Je suis tombé sur ça
http://bugs.debian.org/cgi-bin ... 02079
pour Debian, Mais il semble que le patch n'a jamais été appliqué.

Au fait: il y a

fs.file-max

Remplacer vraiment l'ancien système

nofiles

(Faites attention au pluriel) La variable du noyau, comment est-ce proposée dans de nombreux articles de blogs concernant le cadre? Me fait penser que c'est dans

fs

Section des paramètres. Dans mon système IRIX on l'appelle

rlimit_no_files_max

dans la section des ressources, qu'il ait beaucoup plus de sens pour moi que de le mettre dans

fs

section..

Qu'est-ce que je fais ici mal? Où est la meilleure façon de changer ce paramètre pour les démons dans Debian 8.1?

Merci d'avance,

Stephen
Invité:

Dominique

Confirmation de:

vous pouvez utiliser "ulimit" dans la section "start" Script d'initialisation pgbouncer:

/etc/init.d/pgbouncer:

    [... snip ...]
case "$1" in
start)
# Check if we are still disabled in /etc/default/pgbouncer
[ "${START:-}" = "0" ] && exit 0
log_daemon_msg "Starting PgBouncer" $NAME
test -d $PIDDIR || install -d -o postgres -g postgres -m 2775 $PIDDIR

### set whatever limits you want ###
ulimit -n 20000

$SSD --start --chuid $RUNASUSER --oknodo -- $OPTS 2> /dev/null
log_end_msg $?
;;
[... snip ...]

Après avoir ajouté cette chaîne, les effets doivent se produire après le redémarrage:

Faites-le, sinon vous allez gribouiller sur vous:

# systemctl daemon-reload

Puis:

# /etc/init.d/pgbouncer restart

Rafraîchir:

Ma réponse initiale qui a montré ce que vous pouvez ajouter «ulimit» Dans le scénario d'initialisation, cela fonctionne dans Debian 8. Bien que Deb8 C'est une distribution systemd, Il semble que lors de l'installation par défaut pgbouncer Le script d'initialisation est toujours utilisé.

Pour Centos7, qui est entièrement géré pgbouncer par systemd, Vous voulez utiliser le fichier systemd.service.

Tout d'abord, il semble qu'il y a une erreur dans le fichier utilitaire par défaut pour pgbouncer sur Centos7, où tu as besoin de «Type = forked» Était «Type = simple».

Dans le fichier pgbouncer.service Vous pouvez également ajouter «LimitNOFILE = ##» Dans la section [Service] ... Donc

/etc/systemd/system/pgbouncer.service

## good practice to include the default service file as it may change with future updates
.include /lib/systemd/system/pgbouncer.service

## change the Type= per this bug
## [url=http://www.postgresql.org/message-id/554A7105.1050002@gmx.net]http://www.postgresql.org/mess ... x.net[/url]
Type=simple

## Add a service section and set the max number of open files
[Service]
LimitNOFILE=12345

Il est possible de vérifier que le nombre maximal de fichiers ouverts est un goulot d'étranglement. Vous pouvez vérifier vos journaux pour les messages d'erreur "Trop de fichiers ouverts". Dans chaque cas, lorsque j'ai dépassé le nombre maximal de fichiers ouverts autorisés, le processus s'est plaint. ...

/var/log/postgresql/pgbouncer.log

ERROR S: login failed: FATAL: could not open relation mapping file (...): Too many open files in system
ERROR S: login failed: FATAL: could not open file (...): Too many open files in system
ERROR S: login failed: FATAL: pipe() failed: Too many open files in system
WARNING sbuf_connect failed: Too many open files in system

/var/log/postgresql/postgresql-9.4-main.log

LOG:  out of file descriptors: Too many open files in system; release and retry
PANIC: could not open file (...): Too many open files in system
LOG: server process (...) was terminated by signal 6: Aborted
DETAIL: Failed process was running: END;
LOG: terminating any other active server processes

Nous n'avons pas besoin de s'inquiéter de l'abordable FD pour pgbench, parce que s'ils ne suffisent pas pgbench Ne commence pas:

$ ulimit -S -n 100
$ pgbench -h 192.168.122.69 -p 6432 -U postgres -d booktown -c 200 -t 10000
You need at least 202 open files but you are only allowed to use 100.
Use limit/ulimit to increase the limit before using pgbench.

Dominique

Confirmation de:

Vous pouvez ajouter

ulimit -n 20000

déposer.

/etc/default/pgbouncer

Augmenter la limite douce.

echo "ulimit -n 20000" >> /etc/default/pgbouncer
systemctl restart pgbouncer

Ceci est applicable pour debian-10 (buster) et PgBouncer 1.12.0

Pour répondre aux questions, connectez-vous ou registre