বুট থেকে শুরু করে কোনও পরিষেবাতে কীভাবে ulimits সেট করবেন?


18

আমার দরকার, মাইএসকিএল-র জন্য বড়-পৃষ্ঠাগুলি ব্যবহার করা, একটি উলামিট সেট করা - আমি এটি সীমাবদ্ধতা কনফনেফ এ করেছি। তবে সীমাবদ্ধতা কনফ (পাম_মিলিটস.সো), আর ডি'এর জন্য পড়েনি, কেবল "বাস্তব" শেলগুলির জন্য। আমি এর আগে ইনসক্রিপ্ট শুরুর কাজটিতে একটি "ইউলিমিট-এল" যুক্ত করে এটি সমাধান করেছি। আমার এটি করার জন্য এক ধরণের পুনরাবৃত্তিযোগ্য উপায়ের প্রয়োজন, এখন বাক্সগুলি শেফের সাথে পরিচালিত হয় এবং আমরা আরপিএমের মালিকানাধীন কোনও ফাইল নিতে চাই না।


আপনি একই বাগটি চাপছেন কিনা তা দয়া করে একবার দেখুন। 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 যদি কিছু না দেওয়া হয়।


2
সীমানা.কনফটি ইনিবটাব দ্বারা পঠিত হয় না কারণ সীমাবদ্ধতা.সু এটির জন্য পঠিত হয় না। আপনি প্যাম হ্যাক করতে সক্ষম হতে পারেন তবে এটি কোন ফাইলটি পড়তে পারে তা আমি বুঝতে পারছি না।
Xarses

নোট করুন যে ওয়াইল্ডকার্ড ব্যবহারকারীর *জন্য কাজ করে না root, আপনাকে rootস্পষ্টভাবে উল্লেখ করতে হবে ...
ম্যাট

@ অক্ষর ঠিক আছে। সীমাবদ্ধতা বুট সময় থেকে শুরু করে কিছু ডেমনগুলির জন্য প্রয়োগ করা হবে না। আমি এই প্রশ্নের উত্তর বিশ্বাস করি না।
অ্যালকেমিস্ট

2

/etc/sysctl.conf উলামিট আইটেম সেট করতে সক্ষম হওয়া উচিত। আমি এটি ভালভাবে পরীক্ষা করতে সক্ষম হয়েছি না তবে জরিপটি বলেছে যে এটি সিস্টেস্টল.কম এ সেট করার পরে আপনার থামানো উচিত।

আমি বিভিন্ন বিষয় খুঁজে পেয়েছি যা এটি এখনও একটি সমস্যা দেখায় এবং আমার দল এবং আমি এর আশেপাশে কয়েকটি বিকল্প নিয়ে আলোচনা করেছি আমরা দুটি সম্ভাব্য কাজের ক্ষেত্র পেয়েছি।

বিকল্প 1: সর্বাধিক রেল ইনসক্রিপ্টস উত্স /etc/init.d/function, আপনি সেখানে ulimit সেটিংস পরিবর্তন করতে পারেন

বিকল্প 2: আরআর দাবি করে যে / etc / initscript প্রত্যেক সময় উত্সাহিত হয় যতক্ষণ না init দেখা যায়: http://linux.die.net/man/5/initscript । আকর্ষণীয়ভাবে তারা যথেষ্ট বলেছে যেখানে লোকেরা নির্ধারণ করতে পারে =)


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সমস্ত initscript এর জন্য সেট হয়ে যায় , যা কিছু পরিবেশে অবাঞ্ছিত হতে পারে তবে এটি আমার পক্ষে ঠিক।

একটি নিখুঁত বিশ্বে, আমি একটি অন্তর্ভুক্ত করার জন্য আরপিএম আপডেট করব /etc/sysconfig/mysqldএবং সেখানে একই উলিমিট-এল কমান্ডটি রেখে দেব ।


0

এটি কতটা ডিস্ট্রো-সুনির্দিষ্ট তা সম্পর্কে নিশ্চিত নয়, তবে আমি /etc/security/limits.d/20-somefile.confউবুন্টু ব্যবহার করে সিকিউরিটির সীমাবদ্ধতা বৃদ্ধিটি অন্তর্ভুক্ত করেছি ।

বিদ্যমান ফাইলটি সংশোধন করার পরিবর্তে আমার আমার কুকবুকটিতে একটি ইআরবি টেমপ্লেট রয়েছে, একটি অ্যাট্রিবিউটস ফাইলে ডিফল্ট বৈশিষ্ট্যগুলি সেট করুন এবং তারপরে "insert_line_if_no_match" স্টাফ দিয়ে রুবি ব্লক ব্যবহার করার বিষয়ে চিন্তা করার দরকার নেই - এটি আরও কিছুটা জটিল এবং মনে হয় রেসিপিটি এর মতো আরও কিছুটা পাঠযোগ্য:

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 বাশ স্ক্রিপ্টে ওলিমিটের সাথে সেট করুন। এটি সেই পরিষেবা স্ক্রিপ্ট যা আপনার প্রক্রিয়া শুরু করে।

যদি প্রক্রিয়াটির একটি কনফিগার ফাইল থাকে যেমন সুপারভাইজার ডি থাকে তবে আপনি ফাইলের সংখ্যা নির্ধারণ করতে সেই কনফিগারেশন ফাইলটি ব্যবহার করতে পারেন এবং প্রক্রিয়াটি কলটি সরাসরি সেট্রিমিট () এ করতে পারেন make

সুপারভাইজার: http://supervisord.org/configration.html#supervisord-section-settings

টমকাটি: http://www.jayway.com/2012/02/11/how-to-really-fix-too-many-open-files-problem-for-tomcat-in-ubuntu/


0

253043 নিবন্ধে বর্ণিত রেডহ্যাট উপায়টি (সাবস্ক্রিপশন প্রয়োজনীয়) হ'ল যথাযথ উলামিত বিবৃতি যুক্ত করা /etc/sysconfig/<service name>। উদাহরণ স্বরূপ:

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

(মাই সার্ভিসনামের পরিবর্তে আপনার পরিষেবার জন্য বিদ্যমান ফাইলটি ব্যবহার করুন Use)

ডেমনগুলির জন্য যা রেডহ্যাট "সিসকনফিগ" স্ক্রিপ্টটি ব্যবহার না করে শুরু হয়, আপনার ডিমন স্টার্টআপ স্ক্রিপ্টে উপযুক্ত উলিমিট লাইন যুক্ত করতে হবে।


-1

/Etc/sysctl.conf ফাইলে সেটি সেট করার চেষ্টা করুন


এটি করার জন্য সিস্টেমে থাকা কনফিগারেশনের কিছু টুকরো রয়েছে যা সেগুলিতে রয়েছে এবং সেগুলি স্থানটিতে রয়েছে - এই বিশাল স্থানগুলিকে অ্যাক্সেস করার জন্য আমাদের কেবলমাত্র ইউলিমিটগুলি সংশোধন করতে হবে।
জয়ফডুম

-1

আমি আসলে একটি প্রাইভেট শেফ কুকবুক লিখেছিলাম যা আমাদের জন্য ওলিমিট সেট করতে ব্যবহৃত হয় এবং এটি বেশ ভালভাবে কাজ করে। উবুন্টুর জন্য আমরা খুঁজে পেয়েছি যে আপনি যদি বিশ্বব্যাপী উলামিট সেটিংস চান তবে নিম্নলিখিত কৌশলটি প্রয়োজনীয়:

আপনার সাধারণ সেশনে নিম্নলিখিতগুলি যুক্ত করুন:

session required        pam_limits.so

এবং সীমাবদ্ধতার সাথে আপনার অবশ্যই নিম্নলিখিতগুলি থাকতে হবে:

* soft  nofile  64000
* hard  nofile  65000

root  soft  nofile  64000
root  hard  nofile  65000

মূল অংশটি গুরুত্বপূর্ণ কারণ এটি মনে হচ্ছে যে কিছু init স্ক্রিপ্ট সঠিকভাবে কাজ করবে না। সুতরাং আমাদের কাছে একটি শেফ কুকবুক রয়েছে যা নিম্নলিখিতটি সেটআপ করে এবং এটি দুর্দান্ত কাজ করে।

টমকেটের জন্য আমরা ব্যবহার করলাম আরেকটি বিকল্পটি হ'ল টমক্যাট স্থাপন করা এবং তারপরে একটি কাস্টম দিয়ে আরআই স্ক্রিপ্টটি ওভাররাইট করা যা আমরা উলামিট সেট করব এবং টমক্যাটটি পুনরায় চালু করব। এটি দুর্দান্ত কাজ করে তবে প্রথমে কিছুটা বেশি হ্যাকি।

আমি আশা করি এই সহায়তা, এবং সম্ভবত কোনও দিন আমি অভ্যন্তরীণভাবে আমাদের কাছে থাকা কুকবুকটি চমত্কার মৃত সহজ হওয়ার পরে খুলতে পারি তবে এটি আপনার মতো অন্যদের জন্য সহায়ক হতে পারে।


এটি পোস্টারের ইস্যুটি সমাধান করবে না। প্যাম কেবল তখনই আহ্বান করা হয় যখন কোনও ব্যবহারকারী কোনও সেশন (শেল) খোলেন। যেহেতু init সিস্টেমটি ব্যবহারকারী সেশনগুলির থেকে স্বাধীনভাবে শুরু করা হয়েছিল, পাম প্রয়োগ হয় না।
প্যাট্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.