Önyüklemeden başlayarak bir hizmet için ulimits nasıl ayarlanır?


18

MySQL'in büyük sayfaları kullanması için, bir ulimit ayarlamak için ihtiyacım var - bunu points.conf içinde yaptım. Ancak, limit.conf (pam_limits.so), init için değil, sadece "gerçek" mermiler için okunmaz. Önce initscript start fonksiyonuna bir "ulimit -l" ekleyerek bunu çözdüm. Kutuları şefle yönetildiğine göre, bunu yapmak için bir tür tekrarlanabilir yola ihtiyacım var ve aslında RPM'ye ait bir dosyayı devralmak istemiyoruz.


Lütfen aynı hatayı vurup vurmadığınızı görmek için bir göz atın. serverfault.com/questions/415570/…
Minto Joseph

Yanıtlar:


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

4 adım sisteminizin sınırlarını hemen değiştirebilir ve yeniden başlatmanızdan sonra da çalışmaya devam edebilir. "102400" sayısını, linux sisteminizdeki maksimum açık dosya sayısına istediğiniz gibi değiştirebilirsiniz. ve

$ sysctl -p

Belirtilen dosyadan sysctl ayarlarına veya belirtilmemişse /etc/sysctl.conf dosyasına yüklenir.


2
limit.conf inittab tarafından okunmaz, çünkü limit.so okunmaz. PAM'ı hackleyebilirsiniz, ancak hangi dosyayı okuyabileceğini anlayamıyorum.
Temmuz'da Xarses

Joker karakter kullanıcı *için çalışmaz root, rootaçıkça belirtmeniz gerekir ...
Matt

@Xarses haklı. limit.conf, önyükleme sırasında başlayan bazı arka plan programlarına uygulanmaz. Bunun soruyu cevapladığına inanmıyorum.
Simyacı

2

/etc/sysctl.conf ulimits öğelerini ayarlayabilmelidir. Bunu iyi test edemedim ama anket sysctl.conf içinde ayarlandıktan sonra durabileceğinizi söylüyor.

Yine de hala bir sorun olduğunu gösteren çeşitli konular buldum ve ekibim ve bununla ilgili bazı seçenekleri tartıştık, iki potansiyel çözüm bulduk.

Seçenek 1: Çoğu rhel initscripts kaynağı /etc/init.d/functions, ulimit ayarlarını buradan değiştirebilirsiniz.

Seçenek 2: init, / etc / initscript'in her ne olursa olsun init ortaya çıkmadan önce kaynaklandığını iddia eder: http://linux.die.net/man/5/initscript . İlginçtir ki insanlar nerede ulimit =)


1

Bu URL'yi temel alan bağımsız reçete snippet'i:

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

Reçete Parçacığı:

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

0

Benim çözümüm bunu şef tarifimizde yapmaktı:

# 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

Bu ulimit -l, bazı ortamlarda istenmeyen, ancak benim için iyi olan tüm başlıklar için ayarlanmasına neden olur .

Mükemmel bir dünyada, RPM'yi a içerecek şekilde günceller /etc/sysconfig/mysqldve aynı ulimit -l komutunu oraya koyarım.


0

Bunun ne kadar dağınık olduğuna emin değilim, ancak /etc/security/limits.d/20-somefile.confUbuntu'da kullanarak bir güvenlik limiti artışı ekledim.

Varolan bir dosyayı değiştirmek zorunda kalmadan, yemek kitabımda bir ERB şablonu var, bir öznitelik dosyasında varsayılan öznitelikler ayarladım ve sonra "insert_line_if_no_match" şeyler içeren yakut blokları kullanma konusunda endişelenmenize gerek yok - bu biraz daha karmaşık ve tarif biraz daha okunabilir:

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

ve sonra bu benim şablon dosyam:

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

0

man sayfasına göre ulimit kullanımdan kaldırıldı. Setrlimit kullanmanız gerekir. Sorun, bash komutu yerine sistem çağrısı olmasıdır.

Süpervizör ile bu sorunu yaşadım ve bunu öğrendim. İşlem, setrlimit () sistem çağrısına çağrı yapmanızı sağlayan bir yapılandırma dosyasına sahip değilse. /Etc/init.d bash betiğinde ulimit ile ayarlayın. İşleminizi başlatan hizmet betiği budur.

İşlemin süpervizör d gibi bir yapılandırma dosyası varsa, dosya sayısını ayarlamak ve işlemin doğrudan setrlimits () öğesine çağrılmasını sağlamak için bu yapılandırma dosyasını kullanabilirsiniz.

Danışman: http://supervisord.org/configuration.html#supervisord-bölümü- ayarlar

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


0

RedHat yolu, 253043 maddesinde (abonelik gereklidir) açıklandığı gibi, uygun ulimit ifadeleri eklemektir /etc/sysconfig/<service name>. Örneğin:

# echo "ulimit -SHn 10240   # nfile" >> /etc/sysconfig/myServiceName

(Hizmetiniz için myServiceName yerine mevcut dosyayı kullanın.)

RedHat "sysconfig" komut dosyasını kullanmadan başlayan arka plan programları için, daemon başlangıç ​​komut dosyasına uygun ulimit satırlarını eklemeniz gerekir.


-1

Bunu /etc/sysctl.conf dosyasında ayarlamayı deneyin


Bunu yapmak için gereken sysctl.conf dosyasına ait yapılandırma parçaları vardır ve bunlar yerinde - bu büyük sayfalara erişilmesine izin vermek için sadece ulimitleri değiştirmemiz gerekiyor.
Mayıs

-1

Aslında bizim için ulimit ayarlamak için kullanılan özel bir şef yemek kitabı yazdım ve oldukça iyi çalışıyor. Ubuntu için, küresel bir ulimit ayarı istiyorsanız aşağıdaki hilenin gerekli olduğunu gördük:

Ortak oturumunuza aşağıdakileri ekleyin:

session required        pam_limits.so

ve limit.conf içinde aşağıdakilere sahip olmalısınız:

* soft  nofile  64000
* hard  nofile  65000

root  soft  nofile  64000
root  hard  nofile  65000

Kök kısmı, bazı init betiğinin düzgün çalışmayacağı gibi göründüğü için önemlidir. Bu yüzden aşağıdakileri ayarlayan bir şef yemek kitabımız var ve harika çalışıyor.

Tomcat için kullandığımız başka bir seçenek de Tomcat'i dağıtmak ve ardından init betiğini ulimit'i ayarlayacağımız ve tomcat'i yeniden başlatacağımız bir özel ile yazmaktı. Bu harika çalışıyor ama ilkinden biraz daha hacky.

Umarım bu yardım, ve belki bir gün oldukça ölü basit beri biz dahili yemek kitabı açık kaynak olabilir ama sizin gibi başkalarına yardımcı olabilir.


Bu posterin sorununu çözmeyecek. Pam, yalnızca bir kullanıcı bir oturum (kabuk) açtığında çağrılır. Başlangıç ​​sistemi kullanıcı oturumlarından bağımsız olarak başlatıldığından pam uygulanmaz.
Patrick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.