apache2ctl: 87: ulimit: limite de définition d'erreur (opération non autorisée)

12

Le serveur fonctionne bien - ou du moins il semble - mais il y a toujours l'erreur suivante:

apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)

Cela se produit avec Apache 2.2.22-9 sur Debian Wheezy.

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: limite de réglage d'erreur (opération non autorisée)
Syntaxe OK

# service apache2 reload

[....] Rechargement de la configuration du serveur Web: apache2 / usr / sbin / apache2ctl: 87: ulimit: limite de réglage d'erreur (opération non autorisée)
. D'accord

# service apache2 restart

[....] Redémarrage du serveur Web: apache2 / usr / sbin / apache2ctl: 87: ulimit: limite de réglage d'erreur (opération non autorisée)
... en attente / usr / sbin / apache2ctl: 87: ulimit: limite de réglage d'erreur (opération non autorisé)
. D'accord

# service apache2 status

Apache2 est en cours d'exécution (pid 32045).

Pascal Polleunus
la source
1
Jetez un œil à ce que vous avez dans /etc/security/limits.conf et /etc/security/limits.d. Il semble que vous ayez APACHE_ULIMIT_MAX_FILES (voir dans / usr / sbin / apache2ctl) variable définie à quelque chose de plus grand que la limite dans ces fichiers.
HUB

Réponses:

16

Cela pourrait aider: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors
Mukesh Chapagain
la source
Merci, j'ai déjà vu ça mais ça n'aide pas. Utiliser sudo ou non ne change rien, j'ai la même erreur.
Pascal Polleunus
1
A travaillé pour moi! Totalement oublié sudo.
ThomasReggi
2
+1 la magie fait sudotoujours l'affaire
vélo
pire encore, j'ai une configuration de docker où cela apparaît, fonctionne sur mon ordinateur personnel, mais pas sur le serveur .. dans le conteneur sans différence entre eux ... n'a aucun sens pour moi
super
Idem ici super-héros. De plus, le redémarrage ne fonctionne pas avec ou sans sudo pour moi. Je dois utiliser stop puis start sans sudo pour le faire fonctionner.
Shardj
5

Le problème vient de / usr / sbin / apache2ctl (sur Debian). Vérifiez-le:

~$ grep ULIMIT /usr/sbin/apache2ctl
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
    $ULIMIT_MAX_FILES

Ici, il définit le nombre de fichiers ouverts autorisés à 8192. Ou essayez et échouez, dans votre cas.

Donc, pour éviter d'obtenir une erreur lorsque apache2ctl fait cela, ajustez les paramètres de votre système dans le fichier /etc/security/limits.conf en ajoutant ces deux lignes:

*               soft    nofile          8192
*               hard    nofile          8192

Je ne l'ai pas augmenté à plus que nécessaire (8192) car je ne sais pas ce que cela aura d'autre. Cependant, cela supprime l'avertissement.

Je ne sais pas si vous devrez redémarrer votre système après cela, car il y a un élément dynamique dans les ulimits que je ne connais pas. Cependant, vous pouvez tester assez facilement pour connaître votre nombre de fichiers ulimit actuel:

ulimit -n

Vous voudrez peut-être lire où je l'ai trouvé: stackoverflow - définition ulimit

Adam
la source
Comment pourrais-je faire l'inverse et réduire la limite d'Apache?
eri0o
Voyant que le script que j'ai publié dans la réponse est directement sorti du script apache2ctl qui est installé par apache, alors vous devrez aller dans ce fichier de script et le changer, en supposant que vous avez le droit d'accès et en supposant que vous êtes prêt à répéter l'action à chaque mise à niveau d'Apache.
Adam
2

1.Vérifiez et modifiez la valeur d' ulimit sur votre machine hôte. Ajoutez les valeurs dans le fichier / etc / profile puis faites-le prendre effet.

ulimit -u 10240
ulimit -n 8192     #This configuration is what we most needed
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

source /etc/profile

ou tu peux:

sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

2.Redémarrez le service docker et effectuez la configuration pour qu'elle soit efficace.

sudo service docker restart

3.Tester l'ulimite dans le récipient.

ulimit -n

Ceci est mon résultat de test!

Conseils: Vous pouvez peut-être également essayer la commande ci-dessous (condition préalable: ulimit dans la machine hôte doit être plus grand que 8192), mais je suis en échec .

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash
user3772170
la source
$ ulimit -n 8192me donne-bash: ulimit: open files: cannot modify limit: Operation not permitted
Shardj