ওএস এক্স (10.5) এ ডিফল্ট উলিমিটগুলি কোথায় নির্দিষ্ট করা হয়েছে?


26

nofileওএস এক্স ব্যবহারকারী অ্যাকাউন্টগুলির জন্য ডিফল্ট সীমাটি আজকাল প্রায় 256 ফাইল বর্ণনাকারী বলে মনে হচ্ছে। আমি এমন কিছু সফ্টওয়্যার পরীক্ষা করার চেষ্টা করছি যা একবারে খোলার চেয়ে অনেক বেশি সংযোগের প্রয়োজন।

প্যাম সীমাগুলির মডিউলটি চালাচ্ছে এমন একটি সাধারণ ডিবিয়ান বাক্সে, আমি /etc/security/limits.confব্যবহারকারীর জন্য উচ্চতর সীমা নির্ধারণ করতে সম্পাদনা করব যা সফ্টওয়্যারটি চালাচ্ছে, তবে ওএস এক্স-এ এই সীমাটি কোথায় সেট করা যায় তা আমি সন্তুষ্ট

এর জন্য কোথাও জিইউআই আছে? এর জন্য কোথাও কোনও কনফিগারেশন ফাইল রয়েছে? ওএস এক্স-এ ডিফল্ট ইউলিমিটগুলি পরিবর্তন করার সবচেয়ে সহজ উপায় কী?


Mac OS X এর লায়ন জন্য, দেখুন superuser.com/questions/396102/ulimit-does-not-obey-me
ডেভিড জে

উত্তর:


27

চিতাবাঘের অধীনে প্রাথমিক প্রক্রিয়াটি হয় launchd। প্রতিটি প্রক্রিয়াটির ডিফল্ট উলিমিটগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় launchd। রেফারেন্সের জন্য ডিফল্ট (সংকলিত) সীমাগুলি

$ sudo launchctl limit
    cpu         unlimited      unlimited      
    filesize    unlimited      unlimited      
    data        6291456        unlimited      
    stack       8388608        67104768       
    core        0              unlimited      
    rss         unlimited      unlimited      
    memlock     unlimited      unlimited      
    maxproc     266            532            
    maxfiles    256            unlimited

এই সীমাবদ্ধতাগুলির কোনও পরিবর্তন করতে, একটি লাইন যুক্ত করুন (আপনাকে প্রথমে ফাইলটি তৈরি করতে হতে পারে) /etc/launchd.conf, আর্গুমেন্টগুলি launchctlকমান্ডের সাথে পাস করার মতো । উদাহরণ স্বরূপ

echo "limit maxfiles 1024 unlimited" | sudo tee -a /etc/launchd.conf

তবে launchdইতিমধ্যে আপনার লগইন শেলটি শুরু করেছে, সুতরাং এই পরিবর্তনগুলি কার্যকর করার সহজ উপায় হ'ল আমাদের মেশিনটি পুনরায় চালু করা। (/Etc/launchd.conf এ সংযুক্ত করতে >> ব্যবহার করুন))


2
আপনি কি এর জন্য অফিসিয়াল ডকুমেন্টেশনে একটি লিঙ্ক যুক্ত করতে পারেন?
গ্লিফ

7
ড্যুড, যদি এই হয় যে কোন জায়গায় নথিভুক্ত, এই পৃষ্ঠাটিতে প্রয়োজন হবে না
ডেভ চেনি

1
স্নো লেপার্ডে কাজ করছে বলে মনে হচ্ছে না।
ইসমাইল

1
এর থেকে আলাদা কীভাবে কোন ধারণা sysctl.maxfiles? (সম্পর্কিত প্রশ্ন: আপেল.স্ট্যাকএক্সচেঞ্জ / প্রশ্ন / 7৩33১৫ / too
many

2
ছোট সংশোধন: আপনি echoসুডোর অধীনে চলছেন তবে আপনার অনিবদ্ধ শেলটি ফাইলটিতে যুক্ত করার চেষ্টা করছেন, যা করার অনুমতি নেই। echo "limit maxfiles 1024 unlimited" | sudo tee -a /etc/launchd.confপরিবর্তে চেষ্টা করুন।
ভিনিতে

4
sudo echo "limit maxfiles 1024 unlimited" >> /etc/launchd.conf

সুডো ভুল জায়গায় থাকার কারণে এটি কাজ করে না, চেষ্টা করে দেখুন:

echo 'limit maxfiles 10000 unlimited' | sudo tee -a /etc/launchd.conf

3
আপনি যে উত্তরটির উল্লেখ করছেন তার জন্য সম্ভবত এটি "প্রস্তাবিত সম্পাদনা" হিসাবে ভাল হবে।
ক্রিস জনসন

3

শেল সীমাবদ্ধতা

শেল এবং প্রসেস উপলব্ধ রিসোর্স দ্বারা পরিবর্তন করা যাবে ulimitকমান্ড যা যেমন প্রারম্ভে স্ক্রিপ্ট যোগ করা যেতে পারে ~/.bashrcবা ~/.bash_profileপৃথক ব্যবহারকারীদের জন্য বা /etc/bashrcসকল ব্যবহারকারীর জন্য । যোগ করার জন্য উদাহরণ লাইন:

ulimit -Sn 4096 && ulimit -Sl unlimited

দেখুন: help ulimitএবং man bashআরও তথ্যের জন্য।

সিস্টেম সীমা

সাধারণভাবে, সিস্টেম সীমা লঞ্চড ফ্রেমওয়ার্ক দ্বারা নিয়ন্ত্রিত হয় এবং launchctlকমান্ড দ্বারা পরিবর্তিত হতে পারে , যেমন

launchctl limit maxfiles 10240 unlimited

পরিবর্তনগুলি অবিচলিত করার জন্য, আপনাকে নির্দিষ্ট লঞ্চ অনুবর্তী ফোল্ডারে একটি প্রার্টিস্ট লিস্ট ফাইল তৈরি করতে হবে যা একটি স্টার্টআপ এজেন্ট হিসাবে কাজ করে।

এই জাতীয় সূচনা ফাইলটি তৈরি করার উদাহরণ এখানে দেওয়া হল:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist -c "add Label string com.launchd.maxfiles" -c "add ProgramArguments array" -c "add ProgramArguments: string launchctl" -c "add ProgramArguments: string limit" -c "add ProgramArguments: string maxfiles" -c "add ProgramArguments: string 10240" -c "add ProgramArguments: string unlimited" -c "add RunAtLoad bool true"

ম্যানুয়ালি চালাতে লোড করার জন্য ফাইলটি সিস্টেম লঞ্চের সময় লোড হবে:

sudo launchctl load /Library/LaunchAgents/com.launchd.maxfiles.plist

বর্তমান সীমা যাচাই করতে, সঞ্চালন করুন: launchctl limit

দেখুন: লঞ্চ ডেমন এবং এজেন্ট তৈরি করা হচ্ছে

কার্নেলের সীমাবদ্ধতা

  • কার্নেলের সীমা sysctlকমান্ড দ্বারা নিয়ন্ত্রিত হয় ।
  • বর্তমান কার্নেল সীমা দেখার জন্য, সঞ্চালন করুন: sysctl -a | grep ^kern.max
  • খোলা, চালু করতে অনুমতি দেওয়া ফাইলের সর্বাধিক পরিবর্তন করার জন্য: sudo sysctl -w kern.maxfiles=20480
  • পরিবর্তনগুলি অবিচলিত করতে সিস্টেম স্টার্টআপ ফোল্ডারে সম্পত্তি তালিকা ফাইল তৈরি করতে অনুরূপ উপরের পদ্ধতিটি ব্যবহার করুন।

সম্পর্কিত:


অবহেলিত পদ্ধতিগুলি

ম্যাকোসের আগের সংস্করণে, আপনি /etc/sysctl.confইউনিক্সের মতো সাধারণভাবে সিস্টেম- ওয়াইডে এই সীমাগুলি নির্ধারণ করতে পারেন, তবে মনে হয় এটি সমর্থিত নয়।

ব্যবহার ~/.launchd.confবা /etc/launchd.confপ্রদর্শিত হচ্ছে এটি ম্যাকোসের কোনও বিদ্যমান সংস্করণে সমর্থিত নয়। উইকি

/etc/rc.localস্টার্টআপ ফাইলের সাথে একই , এটি ম্যাকোজে সমর্থিত নয়।


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

এখন আমাকে সন্ধানের / সীমা নির্ধারণের 2 উপায় কেন বিদ্যমান তা সন্ধান করতে হবে ....


ঠিক আছে - মনে হয় ulimitএবং sysctlএকটি মিথ্যা-ইতিবাচক ধারণা দেয় যে তারা আসলে কিছু করে - তবে পরিবর্তে তারা অকেজো বলে মনে হয় । কেউ তা যাচাই করতে পারে?


ঠিক আছে, আমি বুঝতে শুরু করেছি। ভি 10.4 হিসাবে, initআর কোনও প্রক্রিয়া নেই, এটি প্রতিস্থাপন করা হয়েছে launchd, যা 1 এর পিআইডি দিয়েও চলে।

% ps -fu root
  UID   PID  PPID   C     STIME TTY           TIME CMD
    0     1     0   0   0:30.72 ??         0:46.72 /sbin/launchd

এবং অবশ্যই উল্লেখযোগ্য যে ulimitএটি একটি শেল বিল্ট ইন, launchctlএটি শেল-স্বতন্ত্র প্রোগ্রাম।


2

ওএস এক্স-এ, আপনি যদি কোনও ডেমোন বা প্রক্রিয়া বা কার্যের জন্য নরম সীমাটি সংশোধন করার চেষ্টা করছেন, তবে এই নরম সীমাটি পরিবর্তন করার সঠিক উপায়টি সমস্ত প্রক্রিয়াগুলির জন্য ডিফল্ট লঞ্চ করা কনফিগারেশন পরিবর্তন করে নয় , তবে আপনি যে প্রক্রিয়াটি করছেন তার জন্য সেট করে is চালানোর চেষ্টা করছি।

এটি আপনার প্রক্রিয়াটির জন্য আপনার লঞ্চ করা .লিস্ট ফাইলটিতে সম্পন্ন হয়েছে।

আপনার যদি ডেমন বা প্রক্রিয়া চলমান থাকে তবে এর জন্য আপনার আরও বেশি উন্মুক্ত ফাইল থাকা দরকার, এর জন্য একটি প্লিস্ট ফাইল তৈরি করুন এবং এতে এই প্যারামগুলি যুক্ত করুন:

    <key>SoftResourceLimits</key>
    <dict>
        <key>NumberOfFiles</key>
        <integer>1024</integer>
    </dict>

একটি উদাহরণ, mongodb ব্যবহার করে। আমি org.mongo.mongodb.plist নামে একটি .plist ফাইল তৈরি করি এবং এটি /Library/LaunchDaemons/org.mongo.mongodb.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>Disabled</key>
  <false/>
  <key>Label</key>
  <string>org.mongo.mongod</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/lib/mongodb/bin/mongod</string>
    <string>--dbpath</string>
    <string>/Users/Shared/mongodata/</string>
    <string>--logpath</string>
    <string>/var/log/mongodb.log</string>
  </array>
  <key>QueueDirectories</key>
  <array/>
  <key>RunAtLoad</key>
  <true/>
  <key>UserName</key>
  <string>daemon</string>
  <key>SoftResourceLimits</key>
  <dict>
    <key>NumberOfFiles</key>
    <integer>1024</integer>
    <key>NumberOfProcesses</key>
    <integer>512</integer>
  </dict>
</dict>
</plist>

এখন আপনার প্রক্রিয়াটির প্রয়োজনীয় সংস্থানগুলি রয়েছে, সিস্টেমটির জন্য গ্লোবাল কনফিগারেশনকে ব্যঙ্গ না করে। এটি স্বয়ংক্রিয়ভাবে পুনঃসূচনাতে সেট আপ হবে। অথবা, আপনি যদি পুনরায় চালু করতে না চান তবে আপনি চালাতে পারেন

sudo launchctl load /Library/LaunchDaemons/org.mongod.plist

আপনার প্রক্রিয়া বা কার্য যদি ডেমনের চেয়ে এজেন্টের বেশি হয় তবে আপনি এর পরিবর্তে .plist / লাইব্রেরি / লঞ্চএজেন্টসটিতে রাখতে পারেন। উভয় ক্ষেত্রেই কীভাবে প্রবর্তন করা আপনার প্রক্রিয়াটিকে নিয়ন্ত্রণ করবে তা বিভিন্ন বিধি প্রয়োগ করে। লঞ্চডেমনগুলি প্রসেসগুলির জন্য সংরক্ষিত বলে মনে হয় যা সর্বদা চালিয়ে যাওয়ার চেষ্টা করবে।


1

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

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. এই মানগুলির যে কোনও একটিকে যখন তাদের ডিফল্টের সাথে তুলনা করা হয় খুব উচ্চ সংখ্যায় সেট করার সময় সতর্ক হন - বৈশিষ্ট্যগুলি স্থিতিশীলতা / সুরক্ষা উপস্থিত রয়েছে। আমি এই উদাহরণগুলি নিয়েছি যেগুলি আমি বিশ্বাস করি যুক্তিযুক্ত, অন্যান্য ওয়েবসাইটে লিখিত।
  8. যখন লঞ্চক্টল সীমাবদ্ধতা সিস্কটলগুলির চেয়ে কম থাকে, তখন রিপোর্টগুলি পাওয়া গেছে যে রিলেভেন্ট সিসেক্টলগুলি প্রয়োজনীয়তাগুলি পূরণ করতে স্বয়ংক্রিয়ভাবে বাম্প হবে।

1

আমার অভিজ্ঞতাটি হ'ল যে আমার উচ্চ-প্রক্রিয়া-গণনা কার্যটি কেবল এর সাথেই সফল হয়েছিল:

kern.maxproc=2500  # This is as big as I could set it.

kern.maxprocperuid=2048

ulimit -u 2048

প্রথম দুটি প্রবেশ করতে পারে এবং /etc/sysctl.confনির্ভরযোগ্য সেটিংয়ের জন্য, লঞ্চডকনফ-এ ulimit মানটি যেতে পারে ।

যেহেতু টিসিপি / আইপি আমি যা করছিলাম তারই একটি অংশ ছিল, তাই আমারও বাম্পআপ করা দরকার

kern.ipc.somaxconn=8192

এর ডিফল্ট থেকে 128।

প্রক্রিয়া সীমা বাড়ানোর আগে আমি "কাঁটাচামচ" ব্যর্থতা পাচ্ছিলাম, পর্যাপ্ত সংস্থান নেই। আমি kern.ipc.somaxconn বাড়ানোর আগে, আমি "ভাঙা পাইপ" ত্রুটি পাচ্ছিলাম।

এটি ছিল আমার দৈত্য ম্যাক, ওএস 10.5.7, তারপর 10.5.8, এখন 10.6.1 এ বিচ্ছিন্ন প্রক্রিয়াগুলির একটি ন্যায্য সংখ্যা (500-4000) চালানোর সময়। আমার কর্তাদের কম্পিউটারে লিনাক্সের অধীনে এটি সবেমাত্র কাজ করেছে।

আমি ভেবেছিলাম প্রক্রিয়াগুলির সংখ্যা 1000 এর কাছাকাছি হবে তবে মনে হয় যে প্রতিটি প্রক্রিয়া আমি শুরু করেছি তাতে আসল কাজটি করে আসল আইটেমের পাশাপাশি শেলের নিজস্ব কপি অন্তর্ভুক্ত করা হয়। খুব উত্সব।

আমি একটি প্রদর্শন খেলনা লিখেছিলাম যা এরকম কিছু হয়েছিল:

#!/bin/sh

while[ 1 ]

do

    n=netstat -an | wc -l

    nw=netstat -an | grep WAIT | wc -l

    p=ps -ef | wc -l

    psh=ps -ef | fgrep sh | wc -l

    echo "netstat: $n   wait: $nw      ps: $p   sh: $psh"

    sleep 0.5

done

এবং পিএস-শেফে সর্বাধিক সংখ্যক প্রক্রিয়া দেখেছি এবং TIME_WAITমেয়াদ উত্তীর্ণের অপেক্ষায় নেটস্পটে ঘুরে বেড়াচ্ছি ... সীমাটি বাড়ানোর সাথে সাথে আমি 3500+ TIME_WAITআইটেমগুলি শীর্ষে দেখেছি ।

সীমা বাড়ানোর আগে আমি ব্যর্থতার দোরগোড়ায় 'চুপচাপ' করতে পারতাম, যা 1K এর নীচে থেকে শুরু হয়েছিল তবে 1190 এর উচ্চমূল্যে উঠেছিল .. যতবারই ব্যর্থতার দিকে ঠেলে দেওয়া হয়েছিল পরবর্তী সময়ে এটি কিছুটা বেশি সময় নিতে পারে, সম্ভবত কোনও কারণে এটি ব্যর্থ হয়েছে যতবার তার সীমাতে প্রসারিত ক্যাশে।

যদিও আমার পরীক্ষার কেসটির চূড়ান্ত বিবৃতি হিসাবে একটি "অপেক্ষা" ছিল, এখনও এটির বাইরে বের হওয়ার পরে বিচ্ছিন্ন প্রক্রিয়াগুলি সুস্পষ্টভাবে রয়েছে।

আমি ইন্টারনেটে পোস্টিং থেকে ব্যবহার করা বেশিরভাগ তথ্য পেয়েছি, তবে এগুলির সবকটিই সঠিক ছিল না। আপনার মাইলেজ বিভিন্ন রকম হতে পারে।

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