J'ai besoin, pour que mysql utilise de grandes pages, de définir un ulimit - je l'ai fait dans limits.conf. Cependant, limits.conf (pam_limits.so), n'est pas lu pour init, seulement pour les "vrais" shells. J'ai résolu ce problème auparavant en ajoutant un "ulimit -l" à la fonction de démarrage initscript. J'ai besoin d'une sorte de méthode reproductible pour le faire, maintenant que les boîtes sont gérées avec chef, et nous ne voulons pas reprendre un fichier qui appartient réellement au RPM.
18
Réponses:
Les 4 étapes peuvent changer les limites de votre système immédiatement et peuvent toujours fonctionner après votre redémarrage. Vous pouvez changer le nombre "102400" en nombre de fichiers ouverts max dans votre système Linux comme vous le souhaitez. et
à charger dans les paramètres sysctl à partir du fichier spécifié ou /etc/sysctl.conf si aucun n'est fourni.
la source
*
ne fonctionne pas pour l'root
utilisateur, vous devrez spécifierroot
explicitement .../etc/sysctl.conf devrait pouvoir définir les éléments ulimits. Je n'ai pas été en mesure de tester cela correctement, mais l'enquête indique que vous devriez pouvoir vous arrêter une fois qu'il est défini dans sysctl.conf.
J'ai trouvé divers sujets qui montrent que c'est toujours un problème et mon équipe et moi avons discuté de certaines options autour de cela, nous avons trouvé deux solutions de contournement potentielles.
Option 1: La plupart des sources de rhel initscripts /etc/init.d/functions, vous pouvez y modifier les paramètres ulimit
Option 2: init affirme que / etc / initscript provient à chaque fois avant que init n'apparaisse, voir: http://linux.die.net/man/5/initscript . Assez intéressant, ils disent que c'est là que les gens peuvent définir ulimit =)
la source
Extrait de recette autonome basé sur cette URL:
Extrait de recette:
la source
Ma solution consistait simplement à faire cela dans notre recette de chef:
Cela provoque la
ulimit -l
mise en place de tous les scripts d'initialisation, ce qui peut être indésirable dans certains environnements, mais convient au mien.Dans un monde parfait, j'obtiendrais le RPM mis à jour pour inclure a
/etc/sysconfig/mysqld
, et y mettrais la même commande ulimit -l.la source
Je ne sais pas à quel point c'est spécifique à la distribution, mais je viens d'intégrer une augmentation de la limite de sécurité en utilisant
/etc/security/limits.d/20-somefile.conf
dans Ubuntu.Plutôt que d'avoir à modifier un fichier existant, j'ai un modèle ERB dans mon livre de recettes, définissez les attributs par défaut dans un fichier d'attributs et n'avez pas à vous soucier de l'utilisation de blocs rubis avec des éléments "insert_line_if_no_match" - cela semble un peu plus complexe et la recette est un peu plus lisible comme ceci:
et voici mon fichier modèle:
la source
selon la page de manuel ulimit est obsolète. Vous devez utiliser setrlimit. Le problème est qu'il s'agit d'un appel système au lieu d'une commande bash.
J'ai eu ce problème avec le superviseur et c'est ce que j'ai découvert. Si le processus n'a pas de fichier de configuration qui vous permet d'appeler l'appel système setrlimit (). Définissez-le avec ulimit sur son script bash /etc/init.d. C'est le script de service qui démarre votre processus.
Si le processus a un fichier de configuration, comme le superviseur d, vous pouvez utiliser ce fichier de configuration pour définir le nombre de fichiers et demander au processus d'appeler directement setrlimits ().
Superviseur: http://supervisord.org/configuration.html#supervisord-section-settings
TomcaT: http://www.jayway.com/2012/02/11/how-to-really-fix-the-too-many-open-files-problem-for-tomcat-in-ubuntu/
la source
La méthode RedHat, comme décrit dans l' article 253043 (abonnement requis), consiste à ajouter des instructions ulimit appropriées à
/etc/sysconfig/<service name>
. Par exemple:(Utilisez le fichier existant pour votre service au lieu de myServiceName.)
Pour les démons qui démarrent sans utiliser le script RedHat "sysconfig", vous devez ajouter les lignes ulimit appropriées au script de démarrage du démon.
la source
Essayez de le configurer dans le fichier /etc/sysctl.conf
la source
J'ai en fait écrit un livre de cuisine de chef privé qui est utilisé pour définir ulimit pour nous et cela fonctionne assez bien. Pour ubuntu, nous avons constaté que l'astuce suivante est requise si vous souhaitez un paramètre ulimit global:
Ajoutez les éléments suivants à votre session commune:
et dans limit.conf, vous devez disposer des éléments suivants:
La partie racine est importante car il semble sans que certains scripts d'initialisation ne fonctionneront pas correctement. Nous avons donc un livre de cuisine de chef qui configure les éléments suivants et cela fonctionne très bien.
Une autre option que nous avions l'habitude d'utiliser pour Tomcat était de déployer Tomcat, puis d'écraser le script init avec une coutume pour laquelle nous définirions ulimit et redémarrer tomcat. Cela fonctionne très bien mais est un peu plus hacky que le premier.
J'espère que cette aide, et peut-être un jour je pourrai ouvrir le livre de cuisine que nous avons en interne, car c'est assez simple mais pourrait être utile à d'autres comme vous.
la source