Question Comment définir ulimits pour un service commençant au démarrage?


Pour que mysql utilise de grandes pages, il me faut un ulimit - je l’ai déjà fait dans limits.conf. Cependant, limits.conf (pam_limits.so), n'est pas lu pour init, seulement pour de "vrais" shells. J'ai déjà résolu ce problème en ajoutant un "ulimit -l" à la fonction de démarrage d'initscript. J'ai besoin d'un moyen répétable de le faire, maintenant que les boîtes sont gérées par le chef et que nous ne voulons pas prendre en charge un fichier qui appartient en réalité à RPM.


17
2018-03-29 13:49


origine


S'il vous plaît jeter un oeil pour voir si vous frappez le même bogue. serverfault.com/questions/415570/… - Minto Joseph


Réponses:


$ echo "* hard nofile 102400" >> /etc/security/limits.conf
$ echo "* soft nofile 102400" >> /etc/security/limits.conf
$ sysctl -w fs.file-max=102400
$ sysctl -p

Les 4 étapes peuvent modifier immédiatement les limites de votre système et continuer à fonctionner après votre redémarrage. Vous pouvez changer le nombre "102400" en nombre maximum de fichiers ouverts dans votre système linux comme vous le souhaitez. et

$ sysctl -p

pour charger dans les paramètres sysctl à partir du fichier spécifié ou du fichier /etc/sysctl.conf si aucun n'est donné.


7
2018-04-09 11:09



limits.conf n'est pas lu par inittab car limit.so n'est pas lu pour cela. Vous pourriez peut-être pirater PAM mais je ne peux pas savoir quel fichier il pourrait lire. - Xarses
Notez que le joker * ne fonctionne pas pour root utilisateur, vous devrez spécifier root explicitement ... - Matt
@Xarses a raison. Le fichier limit.conf ne sera pas appliqué à certains démons commençant au démarrage. Je ne crois pas que cela réponde à la question. - Alchemist


/etc/sysctl.conf devrait pouvoir définir les éléments ulimits. Je n'ai pas pu tester cela correctement, mais selon un sondage, vous devriez pouvoir vous arrêter une fois que cela 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 plusieurs options à ce sujet. Nous avons trouvé deux solutions de contournement possibles.

Option 1: La plupart des sources d’incripts rhel /etc/init.d/functions, vous pouvez modifier les paramètres ulimit à cet emplacement.

Option 2: init affirme que / etc / initscript est recherché à chaque fois avant qu'il ne se reproduise, voir: http://linux.die.net/man/5/initscript. Curieusement, ils disent que c’est là où les gens peuvent placer ulimit =)


2
2017-07-17 04:18





Extrait de recette autonome basé sur cette URL:

http://pro.benjaminste.in/post/318453669/increase-the-number-of-file-descriptors-on-centos-

Extrait de recette:

ruby_block "edit /etc/sysctl.conf" do
  _file = "/etc/sysctl.conf"
  _comment = "# TWEAK BY CHEF"
  _content = "fs.file-max = 512000"
  block do
    file = Chef::Util::FileEdit.new(_file)
    file.insert_line_if_no_match(/#{Regexp.escape(_comment)}/, "#{_comment}\n#{_content}")
    file.write_file
  end
  not_if "cat #{_file} | grep '#{_comment}'"
  notifies :run, "execute[sysctl -p]", :immediately
end

execute "sysctl -p" do
  command "sysctl -p"
  returns 255 # which would normally signify error, but doesn't on sysctl on CentOS
  action :nothing
end

ruby_block "edit /etc/security/limits.conf" do
  _file = "/etc/security/limits.conf"
  _comment = "# TWEAK BY CHEF"
  _content = "* - nofile 65535"
  block do
    file = Chef::Util::FileEdit.new(_file)
    file.insert_line_if_no_match(/#{Regexp.escape(_comment)}/, "#{_comment}\n#{_content}")
    file.write_file
  end
  not_if "cat #{_file} | grep '#{_comment}'"
end

1
2017-11-13 22:21





Ma solution consistait simplement à faire cela dans notre recette de chef:

# Ensure ulimits are properly set for the initscript
bash "Set Ulimits" do
    user "root"
    code <<-EOH
    echo -e "n#Setting ulimits. Performed by chef recipe MYSQLULIMIT\nulimit -l" >> /etc/sysconfig/init
    EOH
    not_if "grep MYSQLULIMIT /etc/sysconfig/init"
end

Cela provoque la ulimit -l se préparer pour tous les scripts d’initialisation, ce qui peut être indésirable dans certains environnements, mais convient pour le mien.

Dans un monde parfait, je mettrais le RPM à jour pour inclure un /etc/sysconfig/mysqldet mettez la même commande ulimit -l à cet endroit.


0
2018-03-30 15:16





Pas sûr de la spécificité de cette distribution, mais je viens d’incorporer une augmentation de la limite de sécurité en utilisant /etc/security/limits.d/20-somefile.conf dans Ubuntu.

Plutôt que de devoir modifier un fichier existant, j'ai un modèle ERB dans mon livre de recettes, définir les attributs par défaut dans un fichier d'attributs, sans avoir à vous soucier de l'utilisation de blocs ruby ​​avec des éléments "insert_line_if_no_match" - cela semble un peu plus complexe et complexe. la recette est un peu plus lisible comme ceci:

execute "activate_sysctl" do
  user "root"
  command "sysctl -p /etc/sysctl.d/10-filemax.conf"
  action :nothing
end

template "/etc/sysctl.d/10-filemax.conf" do
  source "system/filemax.conf"
  action :create
  notifies :run, "execute[activate_sysctl]", :immediately
end

et puis ceci est mon fichier de modèle:

fs.filemax = <%= node[:mycookbook][:system_fs_filemax] %>

0
2017-10-09 15:07





selon man page 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 ne dispose pas d'un fichier de configuration vous permettant d'appeler l'appel système setrlimit (). Définissez-le avec ulimit sur son script /etc/init.d bash. C'est le script de service qui lance votre processus.

Si le processus a un fichier de configuration, tel que supervisor d, vous pouvez utiliser ce fichier de configuration pour définir le nombre de fichiers et faire en sorte que le processus appelle directement setrlimits ().

Superviseur: http://supervisord.org/configuration.html#supervisord-section-settings

Matou: http://www.jayway.com/2012/02/11/how-to-really-fix-the-too-many-open-files-problem-for-tomcat-in-ubuntu/


0
2017-09-11 00:43





Essayez de le configurer dans le fichier /etc/sysctl.conf


-1
2018-03-29 14:01



Il existe des éléments de configuration requis pour cela, qui appartiennent à sysctl.conf, et ceux-ci sont en place - nous avons juste besoin de modifier ulimits pour permettre l'accès à ces gigantesques pages. - jayofdoom


En fait, j'ai écrit un livre de recettes de chef privé qui sert à définir ulimit pour nous et cela fonctionne plutôt bien. Pour Ubuntu, nous avons constaté que le truc suivant est requis si vous voulez un paramètre global ulimit:

Ajoutez les éléments suivants à votre session commune:

session required        pam_limits.so

et dans limit.conf, vous devez avoir les éléments suivants:

* soft  nofile  64000
* hard  nofile  65000

root  soft  nofile  64000
root  hard  nofile  65000

La partie racine est importante car il semble que certains scripts d’initialisation ne fonctionneront pas correctement. Nous avons donc un livre de recettes de chef qui contient les éléments suivants et qui fonctionne très bien.

Une autre option que nous utilisions auparavant pour Tomcat consistait à déployer Tomcat, puis à remplacer le script init par une commande personnalisée qui définissait ulimit et redémarrait 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 opensource le livre de recettes que nous avons en interne, car c'est assez simple, mais pourrait être utile à d'autres comme vous.


-1
2018-03-29 17:16



Cela ne résoudra pas le problème de l'affiche. Pam n'est appelée que lorsqu'un utilisateur ouvre une session (shell). Puisque le système init est démarré indépendamment des sessions utilisateur, pam ne s'applique pas. - Patrick