बूट पर शुरू होने वाली सेवा के लिए ulimits कैसे सेट करें?


18

मुझे जरूरत है, mysql के लिए बड़े पृष्ठों का उपयोग करने के लिए, एक अलिमित सेट करने के लिए - मैंने इसे लिमिट में किया है ।conf। हालाँकि, limit.conf (pam_limits.so), init के लिए नहीं पढ़ा जाता है, केवल "वास्तविक" गोले के लिए। मैंने इनसस्क्रिप्ट आरंभ समारोह में "अलिमिट-एल" जोड़कर इसे हल किया। मुझे ऐसा करने के लिए किसी प्रकार के दोहराए जाने की आवश्यकता है, अब यह है कि बक्से को शेफ के साथ प्रबंधित किया जाता है, और हम उस फाइल को नहीं लेना चाहते हैं जो वास्तव में आरपीएम के स्वामित्व में है।


कृपया देखें कि क्या आप उसी बग को मार रहे हैं। serverfault.com/questions/415570/…
मिंटो जोसफ

जवाबों:


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 चरण आपके सिस्टम की सीमाओं को तुरंत बदल सकते हैं, और आपके रिबूट के बाद भी काम कर सकते हैं। आप अपने लिनक्स सिस्टम में अधिकतम "ओपन फाइल" की संख्या को "102400" बदल सकते हैं जैसा आप चाहते हैं। तथा

$ sysctl -p

निर्दिष्ट या /etc/sysctl.conf फ़ाइल से sysctl सेटिंग्स में लोड करने के लिए यदि कोई नहीं दिया गया है।


2
limit.conf को initab द्वारा नहीं पढ़ा जाता है क्योंकि limit.so इसके लिए नहीं पढ़ा जाता है। आप PAM को हैक करने में सक्षम हो सकते हैं, लेकिन मैं यह पता लगा सकता हूं कि यह किस फ़ाइल को पढ़ सकता है।
Xarses

ध्यान दें कि वाइल्डकार्ड उपयोगकर्ता के *लिए काम नहीं करता है root, आपको rootस्पष्ट रूप से निर्दिष्ट करना होगा ...
मैट

@Xarses सही है। boot.conf बूट समय पर शुरू होने वाले कुछ डेमॉन के लिए लागू नहीं होगा। मुझे विश्वास नहीं है कि यह सवाल का जवाब देता है।
अल्केमिस्ट

2

/etc/sysctl.conf को ulimits आइटम सेट करने में सक्षम होना चाहिए। मैं इसे अच्छी तरह से परख नहीं पा रहा हूं लेकिन सर्वेक्षण कहता है कि आपको sysctl.conf में सेट होने के बाद रोकना चाहिए।

मैंने विभिन्न विषयों को पाया है जो यह दिखाते हैं कि यह अभी भी एक समस्या है और मेरी टीम और मैंने इसके बारे में कुछ विकल्पों पर चर्चा की है हमने दो संभावित वर्कआर्डर्स पाए हैं।

विकल्प 1: अधिकांश rhel incricripts स्रोत /etc/init.d/functions, आप वहाँ ulimit सेटिंग्स बदल सकते हैं

विकल्प 2: init का दावा है कि init spawns जो कुछ भी देखता है उससे पहले / etc / initscript खट्टा है: http://linux.die.net/man/5/initscript । दिलचस्प बात यह है कि वे कहते हैं कि जहां लोग ulimit = सेट कर सकते हैं)


1

इस url पर आधारित स्व-निहित नुस्खा स्निपेट:

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

पकाने की विधि स्निपेट:

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

मेरा समाधान बस हमारे महाराज नुस्खा में यह कर रहा था:

# 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

यह ulimit -lसभी इनस्क्रिप्ट के लिए सेट होने का कारण बनता है , जो कुछ वातावरणों में अवांछनीय हो सकता है, लेकिन खान के लिए ठीक है।

एक आदर्श दुनिया में, मुझे RPM शामिल करने के लिए अद्यतन किया जाएगा /etc/sysconfig/mysqld, और उसी ulimit -l कमांड को वहां रखा जाएगा।


0

यह निश्चित नहीं है कि यह कितना विशिष्ट है, लेकिन मैंने /etc/security/limits.d/20-somefile.confउबंटू में उपयोग करके सुरक्षा सीमा वृद्धि को शामिल किया है ।

किसी मौजूदा फ़ाइल को संशोधित करने के बजाय, मेरे पास मेरी रसोई की किताब में एक ERB टेम्पलेट है, एक गुण फ़ाइल में डिफ़ॉल्ट विशेषताएँ सेट करें और फिर "सम्मिलित_लाइन_आईएफ_नो_मॉच" सामान के साथ रूबी ब्लॉकों का उपयोग करने के बारे में चिंता करने की ज़रूरत नहीं है - जो थोड़ा अधिक जटिल लगता है और नुस्खा इस तरह से थोड़ा अधिक पठनीय है:

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

और फिर यह मेरी टेम्पलेट फ़ाइल है:

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

0

आदमी पृष्ठ के अनुसार ulimit को हटा दिया गया है। आपको सेटलिमिट का उपयोग करने की आवश्यकता है। समस्या यह है कि बैश कमांड के बजाय सिस्टम कॉल है।

मुझे पर्यवेक्षक के साथ यह समस्या थी और मुझे यही पता चला। यदि प्रक्रिया में एक कॉन्फिग फाइल नहीं है जो आपको सेटरलिमिट () सिस्टम कॉल करने की अनुमति देता है। इसकी /etc/init.d bash स्क्रिप्ट पर ulimit के साथ इसे सेट करें। वह सेवा स्क्रिप्ट है जो आपकी प्रक्रिया शुरू करती है।

यदि प्रक्रिया में एक विन्यास फाइल है, जैसे पर्यवेक्षक d तो आप उस विन्यास फाइल का उपयोग फाइलों की संख्या निर्धारित करने के लिए कर सकते हैं और इस प्रक्रिया को सीधे सेटलिमिट्स () में कर सकते हैं।

पर्यवेक्षक: 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/


0

रेडहैट रास्ता, जैसा कि लेख 253043 (आवश्यक सदस्यता) में वर्णित है, के लिए उपयुक्त अलमिट बयान जोड़ना है /etc/sysconfig/<service name>। उदाहरण के लिए:

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

(MyServiceName के बजाय अपनी सेवा के लिए मौजूदा फ़ाइल का उपयोग करें।)

RedHat "sysconfig" स्क्रिप्ट का उपयोग किए बिना शुरू होने वाले डेमों के लिए, आपको डेमन स्टार्टअप स्क्रिप्ट में उपयुक्त ulimit लाइनें जोड़ने की आवश्यकता होगी।


-1

/Etc/sysctl.conf फ़ाइल में स्थापित करने का प्रयास करें


ऐसा करने के लिए आवश्यक कॉन्फ़िगरेशन के टुकड़े हैं जो sysctl.conf से संबंधित हैं, और वे जगह में हैं - हमें केवल उन विशालकाय तक पहुँचने की अनुमति देने के लिए ulimits को संशोधित करने की आवश्यकता है।
जियोफूड

-1

मैंने वास्तव में एक निजी शेफ कुकबुक लिखी है, जिसका उपयोग हमारे लिए अलिमेट सेट करने के लिए किया जाता है और यह बहुत अच्छी तरह से काम करता है। Ubuntu के लिए हमने पाया कि यदि आप एक वैश्विक उल्टी सेटिंग चाहते हैं तो निम्नलिखित चाल की आवश्यकता है:

निम्नलिखित को अपने सामान्य सत्र में जोड़ें:

session required        pam_limits.so

और limit.conf में आपके पास निम्नलिखित होने चाहिए:

* soft  nofile  64000
* hard  nofile  65000

root  soft  nofile  64000
root  hard  nofile  65000

मूल भाग महत्वपूर्ण है क्योंकि ऐसा लगता है कि इसके बिना कुछ init स्क्रिप्ट सही ढंग से काम नहीं करेगी। तो हमारे पास एक शेफ कुकबुक है जो निम्नलिखित सेटअप करता है और यह बहुत अच्छा काम करता है।

एक और विकल्प जो हम टॉमकैट के लिए उपयोग करते थे, वह टॉमकैट को तैनात करना था और फिर एक कस्टम के साथ इनिट स्क्रिप्ट को अधिलेखित करना था जिसे हम टॉमकैट के लिए सेट करेंगे और फिर से शुरू करेंगे। यह बहुत अच्छा काम करता है लेकिन पहले थोड़ा अधिक हैकी है।

मुझे उम्मीद है कि यह मदद मिलेगी, और हो सकता है किसी दिन मैं रसोई की किताबों को खोल सकता हूं जो हमारे पास आंतरिक रूप से बहुत ही सरल है, लेकिन आपके जैसे अन्य लोगों के लिए उपयोगी हो सकता है।


यह पोस्टर के मुद्दे को हल नहीं करेगा। उपयोगकर्ता द्वारा एक सत्र (शेल) खोलने पर पाम को केवल लागू किया जाता है। चूंकि इनिट सिस्टम को उपयोगकर्ता सत्रों से स्वतंत्र रूप से शुरू किया गया है, इसलिए पेम लागू नहीं होता है।
पैट्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.