কোন কমান্ড খোলা ফাইল সীমা নিয়ন্ত্রণ করে?


19

কোন কমান্ড / কনফিগারেশন ফাইল ওএস এক্সের ওপেন ফাইল সীমা নিয়ন্ত্রণ করে? ওএস এক্স 10.5 / 10.6 / 10.7 এর জন্য আলাদা কমান্ড রয়েছে? অপশন আমি নীচে অন্বেষণ হয় ulimit, sysctlএবংlaunchctl

"প্রচুর খোলার ফাইল" সম্ভবত চিতাবাঘের একটি সাধারণ ত্রুটি, ওএস এক্সের সম্ভবত অন্যান্য সংস্করণ:

উন্মুক্ত ফাইল সীমাবদ্ধতা দেখার অনেকগুলি (সম্পর্কিত?) উপায় রয়েছে:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

উপরের কয়েকটি পোস্টে দাবি করা হয়েছে যে নিম্নলিখিত আদেশগুলি দিয়ে এগুলি সংশোধন করা যেতে পারে:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

তবে উপরের কমান্ডগুলির মধ্যে কেবল sysctlকমান্ডেরই স্পষ্টতই প্রভাব রয়েছে (যেমন ulimit -nএবং launchctl limitউপরের কমান্ডগুলি প্রবেশ করার পরে কোনও পরিবর্তন দেখাবে না, যখন sysctl -aঅনুরোধকৃত পরিবর্তনগুলি প্রদর্শন করে)।

ওএসের জন্য এই পরামিতিগুলি পরিবর্তন করতে সংশ্লিষ্ট অবস্থানগুলি হ'ল:

/etc/sysctl.conf
/etc/launchd.conf

আমি একটি উত্তরও আবিষ্কার করেছি যা ulimitকেবলমাত্র বর্তমান শেলকে নিয়ন্ত্রণ করে reads

আমি কীভাবে ম্যাকোজে সর্বাধিক ফাইল / সর্বাধিক খোলার ফাইল সীমা উপরের দিকে সামঞ্জস্য করতে পারি ?

উত্তর:


9

এর সহজ উত্তরটি হ'ল এখানে একাধিক সীমাবদ্ধতা ছিল এবং কোনও নির্দিষ্ট ক্ষেত্রে আপনি পৌঁছানোর সর্বনিম্ন সীমাটি আপনার ত্রুটি তৈরি করবে। এখন 10.12 এ মিশ্রণেও launchctl limit maxfilesরয়েছে। বাস্তবায়নের বিষয়ে বিশদগুলির জন্য, এই দুর্দান্ত উত্তরটি অনুগ্রহ পাচ্ছে এবং আমি যেটি দিতে পারি তার চেয়ে বেশি ভোটের যোগ্য।

অন্যান্য প্রাসঙ্গিক থ্রেডগুলি হ'ল:

ulimitস্তর খোলা ফাইলগুলির সাথে কার্নেল বন্যা থেকে এক দরিদ্র শেল স্ক্রিপ্ট প্রতিরোধ কম সেট করা হয়।

kern.maxfilesperprocসর্বোচ্চ ফাইলের মধ্যে একটা ছোটো ঘর সেখানে রেখে তাই গণনা যে এক প্রক্রিয়া সবচেয়ে কিন্তু সব না কার্নেল থেকে খোলা ফাইল হ্যান্ডলার স্থান ব্যবহার করতে পারেন।

সাধারণ পরিস্থিতিতে, kern.maxfilesএটি চূড়ান্ত সীমাবদ্ধ ফ্যাক্টর।

সিয়েরায় - সীমা 256 টি ওপেন ফাইল এবং সীমাহীন সর্বাধিক, সুতরাং আমি খুঁজে পেয়েছি যে নরম সীমাবদ্ধতার জন্য 3 থেকে 4 হাজার ফাইল সেট করা আমাদের প্রায় সমস্ত হার্ডওয়্যারের জন্য কাজ করে এবং যখন পলাতক প্রক্রিয়াটি খুব বেশি খোলে তখন সিস্টেমকে প্রতিক্রিয়াশীল রাখে নথি পত্র. আমরা আমাদের ডেভলপমেন্ট সার্ভারগুলিকে 256 সীমাতে রাখতে চাই যাতে আমরা উত্পাদন / পর্যায়ক্রমে পরীক্ষার ক্ষেত্রে ফাঁস এবং সমস্যাযুক্ত সফ্টওয়্যার ধরতে পারি না কেন উত্পাদন সম্পর্কে এটি অনুসন্ধান করার চেয়ে।

আমি 10 কে ফাইলের অনুরাগী নই - সম্ভবত এপিএফএস এবং এনভিএম স্টোরেজ সহ আমরা সেই দিনটি দেখতে পাব যখন তা অভাবনীয় নয়, তবে আপনার ফাইলের সীমাবদ্ধতার জন্য কয়েকশ বা নিম্ন সহস্রের সাথে থাকার চেষ্টা করব। বিশেষত আপনার ম্যাকের যদি প্রক্রিয়াটির স্বল্পতা থাকে তবে এতগুলি প্রক্রিয়া এতগুলি ফাইল খোলা থাকলে সমস্যা হতে পারে।


9

দেখে মনে হচ্ছে ওএস এক্স এর প্রতিটি সংস্করণের জন্য ওপেন ফাইলের সীমা পরিবর্তন করার জন্য সম্পূর্ণ আলাদা পদ্ধতি রয়েছে

ওএস এক্স সিয়েরার জন্য (10.12.X) আপনার প্রয়োজন:

1. ইন Library/LaunchDaemonsনামে একটি ফাইল তৈরি limit.maxfiles.plistকরুন এবং নিম্নলিখিত (দুটি সংখ্যার (যা নরম ও কঠোর সীমা আছে নির্দ্ধিধায় বদলান যথাক্রমে) আটকান:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

২. আপনার নতুন ফাইলের মালিক পরিবর্তন করুন:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. এই নতুন সেটিংস লোড করুন:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

৪. অবশেষে, সীমাটি সঠিক কিনা তা পরীক্ষা করুন:

launchctl limit maxfiles

দ্বিতীয় মানটি 'আনলিমিটেড'-এ সেট করে ম্যাক্সফাইলগুলি সীমাহীনভাবে সেট করতে আমার অসুবিধা হয়। কোন চিন্তা?
ব্যবহারকারী200857

7

নিম্নলিখিতগুলিকে সর্বাধিক সাধারণ সমস্যাগুলি সমাধান করা উচিত (এবং তাদের শ্রেণিবিন্যাসের ভিত্তিতে তালিকাভুক্ত করা হয়েছে):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

নোট:

  1. এই পরিবর্তনগুলি কার্যকর করতে আপনাকে পুনরায় চালু করতে হবে।
  2. আফাইক আপনি ওএস এক্স এর অধীনে 'সীমাহীন' সীমাটি আর সেট করতে পারবেন না
  3. লঞ্চাক্টেল ম্যাক্সফিলগুলি সিসেক্টল ম্যাক্সফিল দ্বারা আবদ্ধ থাকে এবং সেগুলি অতিক্রম করতে পারে না
  4. sysctl লঞ্চাক্টেল ম্যাক্সফাইল থেকে kern.maxfilesperproc উত্তরাধিকার সূত্রে মনে হয়
  5. ulimit ডিফল্টরূপে লঞ্চক্টেল থেকে এটি 'ওপেন ফাইলগুলি' মান উত্তরাধিকার সূত্রে মনে হয়
  6. আপনি / ইত্যাদি / প্রোফাইলে বা ~ /। প্রোফাইলের মধ্যে একটি কাস্টম ulimit সেট করতে পারেন; যদিও এটির প্রয়োজন নেই আমি একটি উদাহরণ সরবরাহ করেছি
  7. এগুলির মানগুলির ডিফল্টর সাথে তুলনা করার সময় খুব বেশি সংখ্যক মান নির্ধারণের ক্ষেত্রে সতর্কতা অবলম্বন করুন - বৈশিষ্ট্যগুলি স্থিতিশীলতা / সুরক্ষা উপস্থিত রয়েছে। আমি এই উদাহরণগুলি নিয়েছি যেগুলি আমি বিশ্বাস করি যুক্তিযুক্ত, অন্যান্য ওয়েবসাইটে লিখিত।

0

সহজ কথায়:

  • ulimitকমান্ড প্রদান করে "সম্পদ শেল এবং প্রসেস এটা তৈরি করে উপলব্ধ নিয়ন্ত্রণ" (দেখুন: help ulimitএবং man bash)। শেলকে দেওয়া সংস্থানগুলি সিস্টেম সংস্থান সীমা দ্বারা সীমাবদ্ধ।

  • launchctlবর্তমান প্রক্রিয়া দ্বারা নিয়ন্ত্রণ সর্বাধিক সিস্টেম রিসোর্স খরচ (দেখুন: man setrlimitএবং man launchctl)। সর্বাধিক মানগুলি কার্নেলের সীমাবদ্ধতার দ্বারা সীমাবদ্ধ।

  • sysctlনিয়ন্ত্রণ সীমা (: দেখুন kernel man sysctlএবং বাসদ এর টিউনিং কার্নেল সীমা )।

সীমা বৃদ্ধি করতে, আপনি সমস্যার উপর নির্ভর করে প্রতিটি কমান্ড ব্যবহার করতে পারেন।

আরও দেখুন: `আরম্ভের সীমা` এবং` উলিমিতের মধ্যে কী সম্পর্ক?


অনেক বেশি খোলার ফাইলের সমস্যার জন্য, এটি নির্ভর করে কোনটি নরম বা শক্ত সীমাটি পৌঁছেছে তার উপর নির্ভর করে (এটি স্থানীয় শেল স্ক্রিপ্ট, বিশ্বব্যাপী স্ক্রিপ্ট root, একটি অ্যাপ্লিকেশন, বা একই সাথে সমস্ত প্রক্রিয়া চালিত হোক )। এটি সমস্ত সীমা (শেল, লঞ্চ এবং কার্নেলের সীমা) বাড়ানোর পক্ষে মূল্যবান ।

অবিচ্ছিন্নভাবে সীমাবদ্ধতা বাড়ানোর জন্য দেখুন: ম্যাকের উপর কীভাবে সর্বাধিক সিস্টেম রিসোর্স খরচ ক্রমাগত নিয়ন্ত্রণ করা যায়?

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