මූල නොවන පරිශීලකයෙකු සඳහා විවෘත ගොනු සීමාව වැඩි කරන්නේ කෙසේද?


156

මෙය සිදුවන්නේ උබුන්ටු නිකුතුව 12.04 (නිරවද්‍ය) 64-බිට් කර්නල් ලිනක්ස් 3.2.0-25-අතථ්‍ය

පරිශීලකයෙකුට අවසර දී ඇති විවෘත ලිපිගොනු ගණන වැඩි කිරීමට මම උත්සාහ කරමි. මෙය 1024 හි වර්තමාන සීමාව ප්‍රමාණවත් නොවන මගේ සූර්යග්‍රහණ ජාවා යෙදුම සඳහා වේ.

මා මෙතෙක් සොයාගෙන ඇති තනතුරු වලට අනුව, මට පේළි දැමීමට හැකි විය යුතුය

/etc/security/limits.conf මේ වගේ:

soft nofile 4096
hard nofile 4096

සියලුම පරිශීලකයින් සඳහා අවසර දී ඇති විවෘත ගොනු ගණන වැඩි කිරීමට.

නමුත් එය මා වෙනුවෙන් වැඩ නොකරන අතර ගැටලුව එම ගොනුවට සම්බන්ධ නැති බව මම සිතමි.

/Etc/security/limits.conf හි ඇති දේ නොසලකා සියලු පරිශීලකයින් සඳහා පෙරනිමි සීමාව 1024 වේ (එම ගොනුව වෙනස් කිරීමෙන් පසුව මම නැවත ආරම්භ කළෙමි)

$ ulimit -n
1024

දැන්, /etc/security/limits.conf හි ඇතුළත් කිරීම් තිබියදීත් මට එය වැඩි කළ නොහැක:

$ ulimit -n 2048

-bash: ulimit: විවෘත ලිපිගොනු: සීමාව වෙනස් කළ නොහැක: මෙහෙයුමට අවසර නැත අමුතුම කොටස නම් මට සීමාව පහළට වෙනස් කළ හැකි නමුත් එය ඉහළට වෙනස් කළ නොහැක - මුල් සීමාවට වඩා අඩු සංඛ්‍යාවක් වෙත ආපසු යාමට පවා:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

-bash: ulimit: open files: cannot modify limit: Operation not permitted

මුල ලෙස, මට එම සීමාව මට අවශ්‍ය ඕනෑම දෙයකට ඉහළට හෝ පහළට වෙනස් කළ හැකිය. / Proc / sys / fs / file-max හි ඇති පද්ධතිමය සීමාව ගැන සැලකිලිමත් වන බවක් නොපෙනේ

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

නමුත් මට සූර්යග්‍රහණය root ලෙස ක්‍රියාත්මක වීමට පවා හැකි වුවද, "බොහෝ විවෘත ගොනුව" ව්‍යතිරේකය නිසා මගේ යෙදුම තවමත් බිඳ වැටේ!

මූල නොවන පරිශීලකයෙකු සඳහා විවෘත ගොනු සීමාව වැඩි කිරීමට මම මෙතෙක් ක්‍රමයක් සොයාගෙන නැත.

මම මෙය නිසි ලෙස කළ යුත්තේ කෙසේද? මම තවත් ලිපි කිහිපයක් බැලූ නමුත් වාසනාවක් නැත!


6
එසේම, ඔබ සංස්කරණය කිරීමෙන් පසුව /etc/security/limits.conf, ඔබට නව උපරිම සීමාව භාවිතා කිරීමට පෙර ඉවත් වී නැවත ඇතුල් වීමට සිදු විය හැකි බව සලකන්න . මම මෙය කළ අතර, ulimit -Hsමම එය 1000000 දක්වා ඉහළ නංවා ඇති විට 1000 ක් පෙන්වීමෙන් බාධා ඇති විය! පසුව මම පිටතට ගොස් නැවත ඇතුල් වූ අතර, ulimit නව මුදල පෙන්වීය.
සෙරින්

1
GUI සැසිය සඳහා ඔබට මෙම නූල් වැදගත් (උබුන්ටු 16+) ද සොයාගත හැකිය .
වොල්ඩෙමර් වොසිස්කි

Answers:


150

මෙම ulimitපෙරනිමි විසින් විධානය Hard සීමාවන්, ඔබ (අ පරිශීලකයා) අඩු කර ගත හැකිය, නමුත් වැඩි නොහැකි වෙනස් වෙනවා.

SOFT සීමාව වෙනස් කිරීමට -S විකල්පය භාවිතා කරන්න , එය 0- { HARD from සිට විය හැකිය .

මම ඇත්ත වශයෙන්ම අන්වර්ථ ulimitකර ඇත ulimit -S, එබැවින් එය සෑම විටම මෘදු සීමාවන්ට පෙරනිමි.

alias ulimit='ulimit -S'

ඔබගේ ගැටළුව සම්බන්ධයෙන්, ඔබගේ ඇතුළත් කිරීම්වල තීරුවක් ඔබට මග හැරී ඇත /etc/security/limits.conf.

තීරු හතරක් තිබිය යුතුය, නමුත් පළමුවැන්න ඔබේ උදාහරණයේ නොමැත.

* soft nofile 4096
* hard nofile 4096

පළමු තීරුවේ විස්තර කරන්නේ WHO සඳහා ඉල්ලුම් කළ යුතු සීමාවයි. '*' යනු ආදේශක කාඩ්පතකි, එයින් අදහස් කරන්නේ සියලුම පරිශීලකයින් යන්නයි. Root සඳහා සීමාවන් ඉහළ නැංවීම සඳහා , ඔබ පැහැදිලිවම '*' වෙනුවට 'root' ඇතුළත් කළ යුතුය.

ඔබට /etc/pam.d/common-session*පහත පේළිය සංස්කරණය කර එකතු කළ යුතුය:

session required pam_limits.so

2
විවෘත ගොනු විස්තර කරන්නන් සඳහා උපරිම සීමාව වෙනස් කරන්නේ කෙසේද? මගේ ගැටළුව නම්, මගේ සූර්යග්‍රහණ යෙදුමට අවශ්‍ය තරම් විවෘත ගොනුවක් තබා ගැනීමට මට ඉඩ දිය යුතු නමුත් 4096 සීමාව ප්‍රමාණවත් නොවන අතර එය හැකි තරම් ඉහළ මට්ටමකට 500000 ක් ලෙස සැකසීමට මට අවශ්‍යය. මගේ සැකසුම limit.conf ඔබ තාරකාව සමඟ සඳහන් කළ පරිදි තවමත් දෘ limit සීමාව චලනය නොවේ.
අයිකෝඩ්

1
හොඳයි, ඔබ සොයා ගත්තේ / proc / sys / fs / file-max හි වටිනාකම 188,897 ක් ... එබැවින් මම කියන්නේ ඔබේ ඉහළ සීමාව 188,000 (අවසර) සහ 500,000 (අවසර නැත) අතර බවයි. ඔබට එකවර විවෘත ලිපිගොනු 65000 කට වඩා අවශ්‍ය යමක් ඇති බව සිතට වද දෙයි. වොව්. සාමාන්‍යයෙන් එය හසුරුවනු ලබන්නේ විශාල යකඩ මත ය. මම ක්‍රමලේඛයක් ගැන සැක කරනවා, අහ්, වැරදි වැටහීමක්. (කරුණාකර සියලු ගෞරවයෙන්)
ලෝර්නික්ස්

4
සැසිය අවශ්‍යයි pam_limits.so, ස්තූතියි!
මාරාන්තික

14
මුලදී මට අවසානයේදී ආදේශක කාඩ්පත මඟ හැරී /etc/pam.d/common-session*සංස්කරණය කරන ලදි common-session, නැවත පණගැන්වීමෙන් පසුව පවා එය ක්‍රියාත්මක නොවීය. නමුත් එම මාර්ගය (සඳහා එකතු පසු pam_limits.so) වෙත common-session-noninteractive, ulimit -nනැවුම් පිවිසුම් (අවශ්ය නැත නැවත ක්රියාත්මක කරන්න) පසු නව වටිනාකම ප්රදර්ශනය කර ඇත. FWIW මම root සඳහා සීමාව වෙනස් කිරීමට උත්සාහ කළෙමි (පමණක්).
ලැම්බාර්ට්

1
root ලෙස ලොග් වී ඇත්නම් අගය වෙනස් දැයි පරීක්ෂා කරන්න. superuser.com/questions/1200539/…
Robbo_UK

21

ඔබ එක් පරිශීලක පදනමක් මත මෘදු හා දැඩි සීමාවන් භාවිතා කරන්නේ නම් ඔබට එවැනි දෙයක් භාවිතා කළ හැකිය:

su USER --shell /bin/bash --command "ulimit -n"

තෙතමනය පරීක්ෂා කිරීම සඳහා ඔබේ සැකසුම් එම නිශ්චිත පරිශීලකයා සඳහා වැඩ කරනවාද නැද්ද යන්න.


අවලංගු නීතිරීතිවලට පටහැනි ගොනුවක් මුදා හැරීමට මට මෙය භාවිතා කිරීමට හැකි වියsu i --shell /bin/bash --command "ulimit -f 8000000 && gunzip -f file_name.gz"
Íhor Mé

5

මෙය වැඩ කිරීමට මට බොහෝ කරදර ඇත.

ඔබගේ පරිශීලක අවසරය නොසලකා පහත සඳහන් දෑ භාවිතා කිරීමෙන් එය යාවත්කාලීන කිරීමට ඉඩ ලබා දේ.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
මට මෙය එකම ප්‍රශ්නයක් ඇති නමුත් එය ක්‍රියාත්මක නොවූ බැවින් මම මෙය උත්සාහ කළෙමි$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster

0
ulimit -S -n 4096

එය විවෘත ලිපිගොනු (-n) සඳහා ඔබේ මෘදු සීමාව 4096 දක්වා වැඩි කළ යුතුය.

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.