ওএস এক্স 10.7.1 এ "সিস্টেমে প্রচুর ওপেন ফাইলগুলি" ত্রুটির কোনও সমাধান রয়েছে?


190

ওএস এক্স 10.7.1-এ সীমাবদ্ধ হওয়া "সিস্টেমে অনেকগুলি ওপেন ফাইল" সীমাবদ্ধতা থেকে আমার মুক্তি পাওয়ার দরকার। 

কোন উপায় আছে?


4
আপনি কখন এই ঘটনাটি সম্পর্কে আরও ব্যাখ্যা করতে চান? কোন পরিস্থিতিতে?
slhck

1
@ এসএলএইচসি - আমারও একই সমস্যা আছে। পরিস্থিতি মূলত "এলোমেলোভাবে"। আমি একজন বিকাশকারী, সুতরাং আমি আমার ম্যাকটি মোটামুটিভাবে ভারীভাবে ব্যবহার করছি: এক বা একাধিক ডাটাবেস, একটি ওয়েব সার্ভার, পরীক্ষার সরঞ্জাম, এক বা একাধিক ব্রাউজার এবং এক সাথে এক সঙ্গীত প্লেয়ার। গুগল ক্রোম এমন একটি প্রোগ্রাম বলে মনে হচ্ছে যাতে প্রচুর ফাইল খোলা থাকে।
নাথান লং

আসলে, আমার "ভারী ব্যবহার" বিষয়টি ছিল না; কার্নাল এবং প্রতি-প্রক্রিয়ার জন্য সর্বাধিক সংখ্যক খোলার ফাইলের জন্য আমার সেটিংস ডিফল্ট হওয়ার চেয়ে অনেক কম ছিল।
নাথান লং

2
যদি আপনি নাথনের মন্তব্য পড়ে থাকেন এবং অবাক হন যে তিনি ডিফল্ট সম্পর্কে কোনও বিবরণ কেন অন্তর্ভুক্ত করেন না, কারণ এটি নীচে তাঁর উত্তরে সমস্ত কিছু বানান। (দুর্দান্ত উত্তর! :)
অলি

আমি নাথান লংয়ের মতো একই পরিস্থিতিতে রয়েছি এবং অ্যাপাচি পুনরায় চালু করাই সমস্যাটি "সমাধান" করার একমাত্র পদক্ষেপ ছিল। আমি নীচের সমস্ত সীমা বাড়িয়ে প্রয়োগ করেছি কিন্তু তারা তত্ক্ষণাত সাহায্য করেনি। আমি কমান্ড লাইন phpUnit পরীক্ষা> সেলেনিয়াম সার্ভার> ফায়ারফক্স> অ্যাপাচি> পিএইচপি> মাইএসকিএল সমস্ত একই ম্যাকবুকে চালাচ্ছি। আমি ম্যাভারিক্সে আপগ্রেড না হওয়া পর্যন্ত সূক্ষ্ম কাজ করতে ব্যবহৃত। আমি যে ত্রুটিটি পেয়েছি তা ওয়েবআপে পরীক্ষা করা হচ্ছে, অর্থাৎ এটি পিএইচপি / অ্যাপাচি ফাইলের বাইরে চলেছে, সম্ভবত শেল সেটিংস দ্বারা নিয়ন্ত্রিত নয়।
scipilot

উত্তর:


225

মতে এই সহায়ক নিবন্ধ (যা আমি পড়া সুপারিশ):

ডিফল্টরূপে, ম্যাক ওএস এক্স যে ফাইলগুলি খুলতে পারে তার সর্বাধিক সংখ্যা 12,288 এ সেট করা থাকে এবং প্রদত্ত প্রক্রিয়াটি খুলতে পারে এমন সর্বাধিক সংখ্যা 10,240।

আপনি এটি দিয়ে পরীক্ষা করতে পারেন:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

আপনি এর সাথে সীমাগুলি (আপনার নিজের ঝুঁকিতে) বাড়িয়ে নিতে পারেন:

  • sysctl -w kern.maxfiles=20480 (বা আপনি যে নম্বর বেছে নিন)
  • sysctl -w kern.maxfilesperproc=18000 (বা আপনি যে নম্বর বেছে নিন)

পরিবর্তনটি স্থায়ী করার জন্য, sudoআপনার সেটিংসগুলিতে /etc/sysctl.conf(যা আপনাকে তৈরি করতে হতে পারে) লাগাতে ব্যবহার করুন :

kern.maxfiles=20480
kern.maxfilesperproc=18000

দ্রষ্টব্য: ওএস এক্স ১০.১০ বা তার চেয়ে কম ক্ষেত্রে আপনি /etc/launchd.confপছন্দ মতো সেটিং যুক্ত করতে পারেন limit maxfilesএবং আপনি এখানে যা কিছু রেখেছিলেন তা এটি ওভাররাইড করবে।

আবার, নিবন্ধ থেকে:

একবার এটি হয়ে গেলে, কার্নেলটিতে নিজেই সর্বাধিক সংখ্যক ফাইল থাকবে তবে শেলটি নাও থাকতে পারে। এবং যেহেতু বেশিরভাগ প্রক্রিয়াগুলি এই অনেকগুলি ফাইল গ্রহণ করবে আপনি যে শেলটি বাড়িয়ে নিতে চান তা শেল দ্বারা শুরু করা হবে।

এর জন্য আদেশটি হ'ল:

ulimit -S -n 2048 # or whatever number you choose

সেই পরিবর্তনও অস্থায়ী; এটি কেবলমাত্র বর্তমান শেল সেশনের জন্য স্থায়ী। তুমি তোমার শেল কনফিগারেশন ফাইল (এটি যোগ করতে পারেন .bashrc, .zshrcযদি আপনি এটি আপনি একটি শেল ওপেন প্রত্যেক সময় চালাতে চান বা যাই হোক না কেন)।


1
লঞ্চ অঞ্চলে আইকন ক্লিক করে লঞ্চ করা প্রক্রিয়াগুলিতে কোন সীমা প্রয়োগ করা হয়? এবং কিভাবে এই সীমা পরিবর্তন? আপনি যখন "শেল" বলবেন, আমি ধরে নিচ্ছি আপনি একটি ইন্টারেক্টিভ টার্মিনাল শেল বোঝাচ্ছেন।
চিজো

@ শেইসো - আমি মনে করি সামগ্রিক সিস্টেমের সীমা (সিস্টেস্টেল) বা লঞ্চ করা সীমা, যে কোনও কম, এটি নিয়ন্ত্রণ করে।
নাথান লং

1
বিষয়বস্তু সীমা ম্যাক্সফাইল 1000000 1000000 সহ একটি /etc/launchd.conf তৈরি করা আমার পক্ষে দুর্দান্ত কাজ করেছে! (ওএসএক্স 10.8.2 এখানে)
জুগওয়াল্ট

1
আমি kern.maxfiles=65000 kern.maxfilesperproc=65000/etc/sysctl.conf এ রেখে পুনরায় বুট করেছি। kern.maxfiles উপেক্ষা করা হয়েছিল এবং ডিফল্ট থেকে যায় তবে kern.maxfilesperproc 65000 সেট করা হয়েছিল I
পেফারেল

2
যদি কারও যদি সর্বোচ্চ ফাইল স্টিক না করে সমস্যা হয় তবে এটি কারণ ম্যাক্সফাইলস লাইনের পরে একটি পিছনের স্থান রয়েছে, এটি মুছতে হবে।
jjathman

62

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

ওএস এক্স সিয়েরার জন্য (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

পুরোপুরি কাজ করেছেন, ধন্যবাদ! আমার ক্ষেত্রে ত্রুটিটি একটি জাভা প্রক্রিয়াটিতে বার্তাটি দিয়ে প্রকাশিত হয়েছিলIO Error: Bad file descriptor (Write failed)
আগ্রাডল

1
এল ক্যাপ্টেন 10.11.6 এও কাজ করে
ট্রয় ড্যানিয়েলস

এখনও শেলের জন্য উলিমিট পরিবর্তন করতে পারে না। আমি যাই
করুক

পদক্ষেপ 2 রান: sudo chmod 600 / লাইব্রেরি / LaunchDaemons/limit.maxfiles.plist sudo কাটা মূল / লাইব্রেরি
হাই Nguyen

32

আপনাকে নিজের উলিমিট সেটিংস বাড়িয়ে তুলতে হবে - এটি ওএস এক্সের তুলনায় খুব কম - ডিফল্টরূপে 256। ulimit -n 4096আপনার ~ /। প্রোফাইল বা সমতুল্য যোগ করুন বা এর অনুরূপ এবং এটি আপনার স্থানীয় পরিবেশে এটি সমাধান করবে। চালান ulimit -aআপনার বর্তমান মাত্রা পরীক্ষা করতে

সিস্টেম সেটিংস দেখতে, এটি চালান:

launchctl limit maxfiles

এটি আগের হিসাবে প্রক্রিয়া ভিত্তিতে সিংহের (10240) বেশ খানিকটা উঁচুতে সেট করা হয়েছে। আপনি যদি এখনও সেখানে আঘাত করে থাকেন তবে আপনি পছন্দসই স্তরগুলির সাথে একই কমান্ডটি ব্যবহার করে এটি উচ্চতর সেট করতে পারেন। পরিবর্তনগুলি স্থায়ী করতে /etc/launchd.conf সেখানে আপনার প্রাসঙ্গিক লাইন যুক্ত করতে হবে।


1
256? এটি আমার জন্য 2560 ফাইল বর্ণনাকারী এবং আমি কখনই এটি পরিবর্তন করি নি। সীমাটি 266 প্রক্রিয়া (সিএফ ulimit -a)।
slhck

2
আমার জন্য একই, ম্যাকস এক্স ম্যাভেরিকের 256 টি ফাইল
9:44

4
ওএস এক্স ইয়োসেমাইটে 256
আলেকজান্ডার

2
এল ক্যাপিটনেও 256।
টিএমএন

1
256 ইয়োসেমাইটে।
জ্যাক

31

অন্য বিকল্পটি অপরাধীর সন্ধান করতে পারে:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

সর্বশেষের জন্য আপনি দেখতে পাচ্ছেন কোন ফাইলগুলি খোলা আছে:

sudo lsof -n | grep socketfil

এবং ইচ্ছা করলে প্রক্রিয়াটি মেরে ফেলুন

kill $pid

মন্তব্য থেকে:

এটির জন্য প্রয়োজনীয়, আপনি সর্বাধিক উন্মুক্ত ফাইল ব্যবহার করে প্রসেস আইডির একটি তালিকাও পেতে পারেন

lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail

সহায়ক! তবে ওএস এক্স অনুসারে বাছাই (10.11) লাগে না h (হতে পারে-জি?)
রবার্ট ক্যালহাউন

আমার জন্য ঠিক -hওএস (এক্স এক্স 10.12.3) ছাড়াই ভাল কাজ করেছে :sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
ভেরুটোপ

সুতরাং এটি ছাড়াই হোক-h
সান্মই

এটিই একমাত্র উত্তর যা আমাকে আমার সমস্যার মূল কারণ হতে সাহায্য করেছে .. ধন্যবাদ :)
SgtPooki

1
lsof -n +c 0ছাঁটাই প্রক্রিয়া নাম প্রতিরোধ করতে ব্যবহার করুন ।
ভন

9

ভাবেন, ম্যাভেরিক্সে 10.9.4

ulimit -n 2048ঠিকভাবে কাজ করে. আপনার একটি নতুন লগইন সেশন আরম্ভ করার প্রয়োজন হতে পারে।


2

সর্বশেষ ম্যাকোসের জন্য (লেখার সময়: 10.14.1), আপনি ব্যবহার করতে পারেন sudo launchctl limit maxfiles 64000 524288(ডিফল্টরূপে এটি 256 ছিল) তবে এটি কেবল বর্তমান অধিবেশনে কাজ করে। স্থায়ী সমাধানের জন্য launchctl@ নিনজাপিক্সেল ( https://superuser.com/a/1171028/760235 ) থেকে চাকরীটি ব্যবহার করুন ।


আপনি কীভাবে 524288 নম্বরটি নিয়ে এসেছেন? আমার আগের মানগুলি 256 এবং সীমাহীন ছিল।
চিপ রবারসন

1

আপনি চালাতে পারেন

lsof -n

যা অনেকগুলি ফাইল খোলার প্রক্রিয়া করে।

তারপর এটি হত্যা।

অথবা

sysctl -w kern.maxfiles=20480

এটিকে বড় করে পরিবর্তন করুন।


3
এই উত্তরটি ইতিমধ্যে প্রদত্ত উত্তরগুলির চেয়ে কীভাবে আলাদা তা ব্যাখ্যা করুন।
স্টিফেন রাউচ

1

আমার জাভা উপরের সমস্ত পরিবর্তন পরে 10000 ফাইল বেশি করে না। সমাধানটি ছিল এই জেভিএম ফ্ল্যাগ- এক্সএক্স: -ম্যাক্সএফডি লিমিট


0

Chmod -R করার সময় আমি এটির মুখোমুখি হয়েছি তাই আমি ছোট পদক্ষেপ গ্রহণ করে এটি প্রায় পেয়েছিলাম, যেমন eg

# for each directory
find . -type d -exec chmod 755 {} \;

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

0

অনুরূপ https://superuser.com/a/1171028/367819

আপনার ম্যাক ওএস এক্স সিস্টেমে বর্তমান সীমা পরীক্ষা করতে, চালান:

launchctl limit maxfiles

শেষ দুটি কলাম যথাক্রমে নরম এবং শক্ত সীমা।

ম্যাক ওএস এক্স ইয়োসেমাইটে সিস্টেম-ভিত্তিতে ওপেন ফাইল সীমাটি সামঞ্জস্য করতে আপনাকে অবশ্যই দুটি কনফিগারেশন ফাইল তৈরি করতে হবে। প্রথমটি হল /Library/LaunchDaemons/limit.maxfiles.plist এ সম্পত্তি তালিকা (ওরফে প্লিস্ট) ফাইল যা নিম্নলিখিত XML কনফিগারেশন ধারণ করে:

<?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>200000</string>
          <string>200000</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

এটি ওপেন ফাইলগুলির সীমা 200000 এ সেট করবে The দ্বিতীয় প্লাস্ট কনফিগারেশন ফাইলটি নিম্নলিখিত বিষয়বস্তুগুলির সাথে /Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

দুটি প্লাস্ট ফাইলই রুট: চাকা দ্বারা মালিকানাধীন থাকতে হবে এবং এর অনুমতি থাকতে হবে - rw-r - r--। এই অনুমতিগুলি ডিফল্টরূপে জায়গায় হওয়া উচিত, তবে আপনি sudo chmod 644 চালিয়ে নিশ্চিত করতে পারেন যে সেগুলি সেগুলিতে রয়েছে। যদিও উপরে বর্ণিত পদক্ষেপগুলি সিস্টেম-প্রশস্ত ওপেন ফাইল সীমাটিকে পুনরায় চালু করার সময় সঠিকভাবে সেট করতে বাধ্য করবে, আপনি সেগুলি লঞ্চাক্টল সীমাটি চালিয়ে নিজে প্রয়োগ করতে পারেন।

সিস্টেম পর্যায়ে এই সীমাবদ্ধতা নির্ধারণের পাশাপাশি, আমরা আপনার বাশারসিআর, বাশপ্রোফাইল বা অ্যানালোগুলি ফাইলটিতে নিম্নলিখিত লাইনগুলি সংযোজন করে অধিবেশন স্তরে সীমা নির্ধারণ করার পরামর্শ দিচ্ছি:

ulimit -n 200000
ulimit -u 2048

প্লাস্ট ফাইলগুলির মতো আপনার বাশার্ক বা অনুরূপ ফাইলের -rw-r - r-- অনুমতি থাকা উচিত। এই মুহুর্তে, আপনি আপনার কম্পিউটারটি পুনরায় চালু করতে পারেন এবং আপনার টার্মিনালে ইউলিমিট-এন প্রবেশ করতে পারেন। যদি আপনার সিস্টেমটি সঠিকভাবে কনফিগার করা থাকে তবে আপনার দেখতে হবে যে ম্যাক্সফাইলগুলি 200000 এ সেট করা হয়েছে।


আপনি আরও তথ্যের জন্য এই নিবন্ধটি অনুসরণ করতে পারেন।

https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c


মানগুলি কার্যকর করতে আপনার ম্যাক পুনরায় চালু করতে ভুলবেন না।


হয় যদি ইতিমধ্যে উত্তর থাকে তবে পোস্টটিকে নকল হিসাবে চিহ্নিত করা উচিত, অন্যথায়, দয়া করে কোনও লিঙ্ক থেকে সম্পর্কিত তথ্য পোস্ট করুন, কারণ লিঙ্কটি চিরতরে বৈধ হবে না।
জিমহান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.