OS X 10.7.1 හි “පද්ධතියේ බොහෝ විවෘත ලිපිගොනු” දෝෂය සඳහා විසඳුමක් තිබේද?


206

OS X 10.7.1 හි ඇති "පද්ධතියේ බොහෝ විවෘත ලිපිගොනු" සීමාවෙන් මිදීමට මට අවශ්‍යය. 

ක්‍රමයක් තිබේද?


4
මෙය සිදු වූ විට වැඩි විස්තර කිරීමට ඔබට අවශ්‍යද? කුමන තත්වයන් යටතේද?
slhck

1
lslhck - මට ඇත්තේ එකම ගැටලුවකි. තත්වයන් මූලික වශයෙන් "අහඹු ලෙස" වේ. මම සංවර්ධකයෙක්, එබැවින් මම මගේ මැක් තරමක් දැඩි ලෙස භාවිතා කරමි: දත්ත සමුදායන් එකක් හෝ කිහිපයක් ධාවනය කිරීම, වෙබ් සේවාදායකයක්, පරීක්ෂණ මෙවලම්, බ්‍රව්සර් එකක් හෝ වැඩි ගණනක් සහ සංගීත වාදකය එකවර ක්‍රියාත්මක කිරීම. ගූගල් ක්‍රෝම් ලිපිගොනු විශාල ප්‍රමාණයක් විවෘත කර ඇති එක් වැඩසටහනක් බව පෙනේ.
නේතන් ලෝන්ග්

1
ඇත්තටම, මගේ “අධික භාවිතය” ගැටලුව නොවේ; කර්නලය සහ එක් ක්‍රියාවලියක් සඳහා වන උපරිම විවෘත ගොනු ගණන සඳහා මගේ සැකසුම් පෙරනිමි විය යුතු ප්‍රමාණයට වඩා බෙහෙවින් අඩු ය.
නේතන් ලෝන්ග්

2
ඔබ නේතන්ගේ ප්‍රකාශය කියවා ඔහු පැහැර හැරීම් පිළිබඳ කිසිදු තොරතුරක් ඇතුළත් නොකළේ මන්දැයි ඔබ කල්පනා කළේ නම්, එයට හේතුව ඔහු ඒ සියල්ල ඔහුගේ පිළිතුරෙන් පහතින් දක්වා ඇති බැවිනි. (නියම පිළිතුර! :)
ඔලී

මම නේතන් ලෝන්ග්ගේ භාවිතයේ පවතින තත්වයේම සිටිමි, අපාචේ නැවත ආරම්භ කිරීම ගැටළුව "විසඳූ" එකම පියවර බව මට පෙනී ගියේය. මම පහත සඳහන් සියලු සීමාවන් වැඩි කළ නමුත් ඒවා වහාම උදව් කළේ නැත. මම විධාන රේඛාව phpUnit පරීක්ෂණ> සෙලේනියම් සේවාදායකය> ෆයර්ෆොක්ස්> අපචේ> php> mysql සියල්ලම එකම මැක්බුක් පරිගණකයේ ධාවනය කරමි. මම mavericks වෙත උසස් කරන තුරු හොඳින් වැඩ කිරීමට භාවිතා කරමි. මට ලැබෙන දෝෂය වෙබ්අප් පරීක්ෂාවට ලක්ව ඇත, එනම් එය php / apache ලිපිගොනු ඉවරයි, එබැවින් අනුමාන වශයෙන් ෂෙල් සැකසුම මගින් පාලනය නොවේ.
scipilot

Answers:


239

අනුව මෙම ලිපි ලියන්නටත් (මම කියවීම නිර්දේශ කරන):

පෙරනිමියෙන්, මැක් ඕඑස් එක්ස් විවෘත කළ හැකි උපරිම ගොනු සංඛ්‍යාව 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

සටහන: OS X 10.10 හෝ ඊට අඩු, ඔබට /etc/launchd.confසමාන සැකසුම් එක් කළ හැකි limit maxfilesඅතර එය ඔබ මෙහි තබන ඕනෑම දෙයක් අභිබවා යනු ඇත.

නැවතත්, ලිපියෙන්:

ඔබ මෙය කළ පසු, කර්නලයේ උපරිම ගොනු සංඛ්‍යාවක් ඇති නමුත් කවචය එසේ නොවිය හැක. මෙම බොහෝ ලිපිගොනු භාර ගන්නා බොහෝ ක්‍රියාදාමයන් කවචය මඟින් ආරම්භ කිරීමට යන බැවින් ඔබට එය වැඩි කිරීමට අවශ්‍ය වනු ඇත.

ඒ සඳහා වන විධානය:

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

එම වෙනස ද තාවකාලික ය; එය පවතින්නේ වත්මන් ෂෙල් සැසිය සඳහා පමණි. ඔබ ඔබේ ෂෙල් මානකරන ගොනුව වෙත එක් කළ හැකිය ( .bashrc, .zshrcකුමන හෝ) ඔබ එය ඔබ ශෙලය සෑම අවස්ථාවකදීම ක්රියාත්මක කිරීමට අවශ්ය නම්.


1
දියත් කිරීමේ ප්‍රදේශයේ අයිකන ක්ලික් කිරීමෙන් දියත් කළ ක්‍රියාවලි සඳහා අදාළ වන සීමාව කුමක්ද? එම සීමාව වෙනස් කරන්නේ කෙසේද? ඔබ "ෂෙල්" යැයි පැවසූ විට, මම හිතන්නේ ඔබ අදහස් කළේ අන්තර්ක්‍රියාකාරී පර්යන්ත කවචයකි.
චීසෝ

@Cheeso - මම හිතන්නේ ඒ ෙදෙකන් අඩු අගයට සමස්ත පද්ධතිය සීමාව (sysctl) හෝ launchd සීමාව, පාලනය බව.
නේතන් ලෝන්ග්

1
අන්තර්ගත සීමාවන් සහිත /etc/launchd.conf නිර්මාණය කිරීම මැක්ස්ෆයිල් 1000000 1000000 මා වෙනුවෙන් වැඩ කළා! (OSX 10.8.2 මෙහි)
සුග්වාල්ට්

1
මම kern.maxfiles=65000 kern.maxfilesperproc=65000/etc/sysctl.conf දමා නැවත ආරම්භ කළෙමි . kern.maxfiles නොසලකා හරින ලද නමුත් පෙරනිමියෙන් රැඳී සිටියද kern.maxfilesperproc 65000 ලෙස සකසා ඇත. මට /etc/launchd.conf නොමැත, එබැවින් එහි ඇති තත්වය කුමක්ද?
pferrel

2
උපරිම ලිපිගොනු ඇලවීම පිළිබඳව යමෙකුට ගැටලු තිබේ නම්, එයට හේතුව මැක්ස්ෆයිල් රේඛාවෙන් පසු පසුපස ඉඩක් ඇති බැවින් එය මකා දැමිය යුතුය.
jjathman

65

OS X හි එක් එක් අනුවාදය සඳහා විවෘත ගොනු සීමාව වෙනස් කිරීම සඳහා සම්පූර්ණයෙන්ම වෙනස් ක්‍රමයක් ඇති බව පෙනේ!

OS X සියෙරා (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> 

2. ඔබගේ නව ගොනුවේ හිමිකරු වෙනස් කරන්න:

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

3. මෙම නව සැකසුම් පූරණය කරන්න:

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

4. අවසාන වශයෙන්, සීමාවන් නිවැරදි දැයි පරීක්ෂා කරන්න:

launchctl limit maxfiles

හොඳින් වැඩ කළා, ස්තූතියි! මගේ නඩුවේදී ජාවා ක්‍රියාවලියක දෝෂය පණිවිඩය සමඟ ප්‍රකාශ වියIO Error: Bad file descriptor (Write failed)
agradl

1
එල් කැපිටන් 10.11.6
ට්‍රෝයි ඩැනියෙල්ස්

තවමත් ෂෙල් සඳහා වන සීමාව වෙනස් කළ නොහැක. මා කරන ඕනෑම දෙයක් උපරිම 1024 ක් වේ
DataGreed

දෙවන පියවරේදී: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist
Hai Nguyen

35

ඔබට ඔබගේ ulimit සැකසුම් වැඩි කිරීමට අවශ්‍ය වනු ඇත - මේ දිනවල එය OS X හි තරමක් අඩුයි - පෙරනිමියෙන් 256. ulimit -n 4096ඔබගේ ~ / .ප්‍රොෆයිල් හෝ ඊට සමාන එකතු කරන්න හෝ සමාන කරන්න, එය ඔබේ දේශීය පරිසරය තුළ විසඳනු ඇත. ulimit -aඔබගේ වර්තමාන මට්ටම් පරීක්ෂා කිරීමට ධාවනය කරන්න

පද්ධති සැකසුම් බැලීමට, මෙය ක්‍රියාත්මක කරන්න:

launchctl limit maxfiles

එය පෙර පැවති ක්‍රියාවලියට වඩා එක් ක්‍රියාවලියක් මත ලයන් (10240) හි තරමක් ඉහළින් සකසා ඇත. නමුත් ඔබ තවමත් එහි පහර දෙන්නේ නම් අපේක්ෂිත මට්ටම් සමඟ එකම විධානය භාවිතා කර ඔබට එය ඉහළ මට්ටමකට ගෙන යා හැකිය. වෙනස්කම් ස්ථිර කිරීමට /etc/launchd.conf යනු ඔබට අදාළ රේඛා එක් කළ යුතු ස්ථානයයි.


1
256? එය මා සඳහා ගොනු විස්තර 2560 ක් වන අතර මම එය කිසි විටෙකත් වෙනස් කර නැත. සීමාව ක්‍රියාවලි 266 කි (cf ulimit -a).
slhck


4
ඕඑස් එක්ස් යොස්මයිට් හි 256 ද
ඇලෙක්සැන්ඩර්

2
එල් කැපිටන් මත 256 ක් ද විය.
ටීඑම්එන්

1
256 යොස්මයිට් හි.
ජාක්

35

අනෙක් විකල්පය වැරදිකරු සොයා ගැනීම විය හැකිය:

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

ප්‍රයෝජනවත්! නමුත් OS X (10.11) මත වර්ග කිරීම -h ගන්නේ නැත. (සමහර විට -g?)
රොබට් කල්හුන්

මට -h(OS X 10.12.3) නොමැතිව හොඳින් වැඩ කර ඇත :sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
vearutop

එබැවින් එය එසේ -h
නොවන්න

මගේ ප්‍රශ්නයට මුල් වීමට මට උපකාර කළ එකම පිළිතුර මෙයයි .. ස්තූතියි :)
SgtPooki

1
lsof -n +c 0ක්‍රියාවලියේ නම කප්පාදු කිරීම වැළැක්වීමට භාවිතා කරන්න .
වෝගන්

11

ජනතාව, මේවරික්ස් 10.9.4

ulimit -n 2048හොඳින් වැඩ කරයි. ඔබට නව පිවිසුම් සැසියක් දියත් කිරීමට අවශ්‍ය විය හැකිය.


5

නවතම මැකෝස් සඳහා sudo launchctl limit maxfiles 64000 524288( ලිවීමේදී: 10.14.1), ඔබට භාවිතා කළ හැකිය (පෙරනිමියෙන් එය 256 විය), නමුත් එය ක්‍රියාත්මක වන්නේ වත්මන් සැසිය තුළ පමණි. ස්ථිර විසඳුමක් සඳහා launchctlinninjaPixel ( https://superuser.com/a/1171028/760235 ) වෙතින් රැකියාව භාවිතා කරන්න .


අංක 524288 සමඟ ඔබ පැමිණියේ කෙසේද? මගේ පෙර අගයන් 256 සහ අසීමිත විය.
චිප් රොබර්සන්

1

ඔබට දුවන්න පුළුවන්

lsof -n

එම ක්‍රියාවලිය බොහෝ ගොනු විවෘත කරයි.

ඉන්පසු එය මරන්න.

හෝ

sysctl -w kern.maxfiles=20480

එය විශාල එකක් බවට වෙනස් කරන්න.


3
මෙම පිළිතුර දැනටමත් ලබා දී ඇති පිළිතුරු වලට වඩා වෙනස් වන්නේ කෙසේදැයි කරුණාකර පැහැදිලි කරන්න.
ස්ටීවන් රවුච්

1

මගේ ජාවා වලට ඉහළින් ඇති සියලුම වෙනස්කම් වලින් පසුව ලිපිගොනු 10000 ට වඩා වැඩි ප්‍රමාණයක් සිදු නොවීය. විසඳුම වූයේ මෙම jvm ධජය -XX: -MaxFDLimit


1

Https://superuser.com/a/1171028/367819 ට සමානය

ඔබගේ මැක් ඕඑස් එක්ස් පද්ධතියේ වත්මන් සීමාවන් පරීක්ෂා කිරීමට, ධාවනය කරන්න:

launchctl limit maxfiles

අවසාන තීරු දෙක පිළිවෙලින් මෘදු හා තද සීමාවන් වේ.

මැක් ඕඑස් එක්ස් යොස්මයිට් හි පද්ධතිමය වශයෙන් විවෘත ගොනු සීමාවන් සකස් කිරීමට, ඔබ වින්‍යාස ගොනු දෙකක් සෑදිය යුතුය. පළමුවැන්න පහත දැක්වෙන XML වින්‍යාසය අඩංගු /Library/LaunchDaemons/limit.maxfiles.plist හි ඇති දේපල ලැයිස්තුවක් (aka 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>200000</string>
          <string>200000</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

මෙය විවෘත ලිපිගොනු සීමාව 200000 දක්වා සකසනු ඇත. දෙවන වර්‍ග වින්‍යාස ගොනුව පහත සඳහන් අන්තර්ගතයන් සමඟ /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>

ප්ලිස්ට් ලිපිගොනු දෙකම root: රෝදයට අයත් විය යුතු අතර අවසරයන් තිබිය යුතුය -rw-r - r--. මෙම අවසරයන් පෙරනිමියෙන් ක්‍රියාත්මක විය යුතුය, නමුත් sudo chmod 644 ධාවනය කිරීමෙන් ඒවා ක්‍රියාත්මක වන බව ඔබට සහතික කළ හැකිය. ඉහත විස්තර කර ඇති පියවර නැවත ආරම්භ කිරීමේදී පද්ධතිය පුරා විවෘත ගොනු සීමාවන් නිවැරදිව සැකසීමට හේතු වන අතර, දියත් කිරීමේ සීමාව ක්‍රියාත්මක කිරීමෙන් ඔබට ඒවා අතින් යෙදිය හැකිය.

පද්ධති මට්ටමින් මෙම සීමාවන් සැකසීමට අමතරව, සැසි මට්ටමින් මෙන්ම පහත දැක්වෙන රේඛා ඔබේ bashrc, bashprofile හෝ ප්‍රතිසම ගොනුවට එකතු කිරීමෙන් නිර්දේශ කරමු:

ulimit -n 200000
ulimit -u 2048

ප්ලිස්ට් ලිපිගොනු මෙන්, ඔබේ bashrc හෝ ඊට සමාන ගොනුවට -rw-r - r-- අවසර තිබිය යුතුය. මෙම අවස්ථාවෙහිදී, ඔබට ඔබේ පරිගණකය නැවත ආරම්භ කර ulimit -n ඔබේ පර්යන්තයට ඇතුළත් කළ හැකිය. ඔබේ පද්ධතිය නිවැරදිව වින්‍යාස කර ඇත්නම්, මැක්ස්ෆයිල් 200000 ලෙස සකසා ඇති බව ඔබ දැකගත යුතුය.


වැඩි විස්තර සඳහා ඔබට මෙම ලිපිය අනුගමනය කළ හැකිය.

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


අගයන් .ලදායී වීමට ඔබේ මැක් නැවත ආරම්භ කිරීමට මතක තබා ගන්න.


එක්කෝ දැනටමත් පිළිතුරක් තිබේ නම් එය අනුපිටපතක් ලෙස සලකුණු කළ යුතුය, එසේ නොමැතිනම් කරුණාකර සබැඳිය සදහටම වලංගු නොවන බැවින් කරුණාකර අදාළ තොරතුරු සබැඳියකින් පළ කරන්න.
zymhan

මා වෙනුවෙන් පරිපූර්ණව වැඩ කළා. ධාවනය වන මොජාවේ 10.14.6
ආදිත්‍ය

0

Chmod -R කරන අතරතුර මට එය හමු විය, එබැවින් කුඩා පියවර ගැනීමෙන් මම එය වට කර ගතිමි, උදා

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

1
මෙය වැඩකටයුතු විය හැකි වුවත්, එය ඇත්ත වශයෙන්ම ප්‍රශ්නයට පිළිතුරු සපයන බවක් නොපෙනේ. සමහර විට ඔබට පණිවිඩය ඉවත් කළ නොහැකි බව පැහැදිලි කිරීම සහ එය ගැටළුවක් අඩු කිරීමට එක් ක්‍රමයක් ලෙස මෙය යෝජනා කිරීමෙන් ඔබේ පිළිතුර වැඩිදියුණු වනු ඇත.
music2myear

0

මට මේ ප්‍රශ්නය තිබුණේ කැටලිනා ධාවනය වන 2017 මැක්බුක් එකක. ගැටළුව වූයේ Spotify (එය යාවත්කාලීනව තිබීම) සහ Spotify සැකසුම "දේශීය ගොනු පෙන්වන්න" යන්නයි.

මෙම සැකසුම Spotify හට ඔබගේ බාගැනීම් ෆෝල්ඩරය හෝ වෙනත් ෆෝල්ඩර හරහා බැලීමට ඉඩ සලසයි. යම් හේතුවක් නිසා එය ගොනු විවෘත කිරීම සහ පරීක්ෂා කිරීම සිදු කරයි. Lsof -n පරීක්ෂා කිරීම ඇත්ත වශයෙන්ම .jpg ගොනු දහස් ගණනක් ඇතුළුව ලිපිගොනු 7500 කට වඩා වැඩි විය. Spotify ඒවා වසා නොගත්තේ මන්දැයි විශ්වාස නැත, එය දෝෂයක් ලෙස පෙනේ.

මෙම සිටුවම අක්‍රීය කිරීම සහ Spotify නැවත ආරම්භ කිරීම ක්‍රියා කළ හැකිය, විකල්පයක් ලෙස අස්ථාපනය කිරීම ක්‍රියා කරයි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.