Como configurar ulimits para um serviço a partir do boot?

17

Eu preciso, para o mysql usar páginas grandes, para configurar um ulimit - eu fiz isso no limits.conf. No entanto, o limits.conf (pam_limits.so), não é lido no init, apenas para shells "reais". Eu resolvi isso antes adicionando um "ulimit -l" à função inicial do initscript. Eu preciso de algum tipo de maneira repetível para fazer isso, agora que as caixas são gerenciadas com o chef, e nós não queremos assumir o controle de um arquivo que realmente pertence ao RPM.

    
por jayofdoom 29.03.2012 / 15:49

8 respostas

7

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

As 4 etapas podem alterar os limites do sistema imediatamente e ainda podem funcionar após a reinicialização. Você pode alterar o número "102400" para o número máximo de arquivos abertos no seu sistema Linux, como você deseja. e

$ sysctl -p

para carregar nas configurações sysctl do arquivo especificado ou /etc/sysctl.conf, se não houver nenhuma.

    
por 09.04.2012 / 13:09
2

/etc/sysctl.conf deve ser capaz de definir os itens ulimits. Eu não fui capaz de testar isso bem, mas a pesquisa diz que você deve ser capaz de parar depois que ele for definido em sysctl.conf.

Encontrei vários tópicos que mostram que ainda é um problema, e minha equipe e eu discutimos algumas opções em torno disso encontramos duas possíveis soluções alternativas.

Opção 1: A maioria dos rhiz initscripts fonte /etc/init.d/functions, você pode alterar as configurações ulimit lá

Opção 2: O init alega que o / etc / initscript é originado toda vez que o init gera o que quer que seja visto: link . Curiosamente, eles dizem que é onde as pessoas podem definir ulimit =)

    
por 17.07.2012 / 06:18
1

Snippet de receita independente com base neste URL:

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

Snippet de receita:

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
    
por 13.11.2013 / 23:21
0

Minha solução foi simplesmente fazer isso em nossa receita 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

Isso faz com que o ulimit -l seja configurado para todos os scripts do inits, o que pode ser indesejável em alguns ambientes, mas é bom para o meu.

Em um mundo perfeito, eu atualizaria o RPM para incluir um /etc/sysconfig/mysqld e colocar o mesmo comando ulimit -l lá.

    
por 30.03.2012 / 17:16
0

Não tenho certeza de como essa distribuição é específica, mas acabei de incorporar um aumento no limite de segurança usando /etc/security/limits.d/20-somefile.conf no Ubuntu.

Em vez de modificar um arquivo existente, tenho um modelo ERB no meu livro de receitas, defino os atributos padrão em um arquivo de atributos e não tenho que me preocupar em usar blocos ruby com coisas "insert_line_if_no_match" - isso parece um pouco mais intrincada e a receita é um pouco mais legível assim:

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

e este é o meu arquivo de modelo:

fs.filemax = <%= node[:mycookbook][:system_fs_filemax] %>
    
por 09.10.2014 / 17:07
0

de acordo com a página man man ulimit é obsoleto. Você precisa usar setrlimit. O problema é que é uma chamada do sistema em vez de um comando bash.

Eu tive esse problema com o supervisor e foi isso que descobri. Se o processo não tiver um arquivo de configuração que permita fazer uma chamada para a chamada de sistema setrlimit (). Defina-o com ulimit em seu script /etc/init.d bash. Esse é o script de serviço que inicia seu processo.

Se o processo tiver um arquivo de configuração, como supervisor d, você pode usar esse arquivo de configuração para definir o número de arquivos e fazer com que o processo faça a chamada diretamente para setrlimits ().

Supervisor: link

TomcaT: link

    
por 11.09.2015 / 02:43
-1

Tente configurar isso no arquivo /etc/sysctl.conf

    
por 29.03.2012 / 16:01
-1

Na verdade, eu escrevi um livro de receitas do chef privado que é usado para definir ulimit para nós e funciona muito bem. Para o Ubuntu nós encontramos o seguinte truque é necessário se você quiser uma configuração ulimit global:

Adicione o seguinte à sua sessão comum:

session required        pam_limits.so

e no limit.conf você deve ter o seguinte:

* soft  nofile  64000
* hard  nofile  65000

root  soft  nofile  64000
root  hard  nofile  65000

A parte raiz é importante, pois parece que, sem isso, algum script de inicialização não funcionará corretamente. Então, temos um livro de receitas do chef que define o seguinte e funciona muito bem.

Outra opção que usamos para o Tomcat foi implantar o Tomcat e, em seguida, substituir o script de inicialização por um personalizado para o qual definiríamos o ulimit e reiniciar o tomcat. Isso funciona muito bem, mas é um pouco mais hacky que o primeiro.

Espero que isso ajude, e talvez um dia eu possa abrir o livro de receitas que temos internamente, já que é simples, mas pode ser útil para outras pessoas como você.

    
por 29.03.2012 / 19:16