තනි ලිනක්ස් ක්‍රියාවලියක් සඳහා මතක භාවිතය සීමා කරන්න


174

pdftoppmපරිශීලක විසින් සපයන ලද PDF එකක් 300DPI අනුරුවක් බවට පරිවර්තනය කිරීමට මම දුවමි. පරිශීලකයා ඉතා විශාල පිටු ප්‍රමාණයක් සහිත PDF එකක් ලබා දෙන්නේ නම් හැර මෙය විශිෂ්ටයි. pdftoppmඅඟල් 100 ක වර්ග පිටුවකට 100 * 300 * 100 * 300 * 4 පික්සෙල් එකකට බයිට් = 3.5 ජීබී, එම ප්‍රමාණයෙන් 300DPI අනුරුවක් මතකයේ තබා ගැනීමට ප්‍රමාණවත් මතකයක් වෙන් කරනු ඇත. අනිෂ්ට පරිශීලකයෙකුට මට මෝඩ විශාල පී.ඩී.එෆ් ලබා දී සියලු ආකාරයේ ගැටළු ඇති කළ හැකිය.

ඉතින් මම කරන්න කැමති දේ මම ක්‍රියාත්මක කිරීමට සූදානම් වන ළමා ක්‍රියාවලියක් සඳහා මතක භාවිතය සඳහා යම් ආකාරයක දැඩි සීමාවක් පැනවීමයි - එය මතක ධාරිතාව 500MB ට වඩා වැඩි ප්‍රමාණයක් වෙන් කිරීමට උත්සාහ කළහොත් එම ක්‍රියාවලිය මිය යන්න. එය කළ හැකිද?

මේ සඳහා ulimit භාවිතා කළ හැකි යැයි මම නොසිතමි, නමුත් එක ක්‍රියාවලියකට සමානද?


සමහර විට docker?
ශ්‍රීධර් සර්නොබත්

Answers:


69

Ulimit සමඟ ගැටළු කිහිපයක් තිබේ. මාතෘකාව පිළිබඳ ප්‍රයෝජනවත් කියවීමක් මෙන්න: ලිනක්ස් හි වැඩසටහනක කාලය සහ මතක පරිභෝජනය සීමා කිරීම, කල් ඉකුත් වීමේ මෙවලමට මඟ පෙන්වන අතර කාලය හෝ මතක පරිභෝජනය අනුව ක්‍රියාවලියක් (සහ එහි දෙබලක) කූඩු කිරීමට ඔබට ඉඩ සලසයි.

කල් ඉකුත් වීමේ මෙවලමට පර්ල් 5+ අවශ්‍ය වන අතර /procගොනු පද්ධතිය සවි කර ඇත. ඊට පසු ඔබ මෙවලම උදා ලෙස පිටපත් කරයි /usr/local/bin:

curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | \
  sudo tee /usr/local/bin/timeout && sudo chmod 755 /usr/local/bin/timeout

ඊට පසු, ඔබේ ප්‍රශ්නයේදී මෙන් මතක පරිභෝජනයෙන් ඔබේ ක්‍රියාවලිය 'කූඩුව' කළ හැකිය:

timeout -m 500 pdftoppm Sample.pdf

විකල්පයක් ලෙස භාවිතා කිරීමට ඔබට හැකිය -t <seconds>සහ -x <hertz>පිළිවෙළින් කාලීන හෝ CPU සීමාවන් විසින් ක්රියාවලිය සීමා කිරීමට.

මෙම මෙවලම ක්‍රියා කරන ආකාරය නම්, තත්පරයට කිහිප වතාවක් පරික්ෂා කිරීමෙන්, සැකසූ ක්‍රියාවලිය එහි නියම සීමාවන් ඉක්මවා දායක වී නොමැති නම්. මෙයින් අදහස් කරන්නේ කල් ඉකුත් වූ දැනුම් දීම් වලට පෙර ක්‍රියාවලියක් අධි දායකත්වයක් ලබා ගත හැකි කුඩා කවුළුවක් ඇති බවත් එම ක්‍රියාවලිය ills ාතනය කරන බවත්ය.

වඩාත් නිවැරදි ප්‍රවේශයක් නිසා cgroups සම්බන්ධ විය හැකි නමුත්, එය සැකසීමට බොහෝ සෙයින් සම්බන්ධ වේ, ඔබ ඩොකර් හෝ runC භාවිතා කළත්, ඒවා අතර, cgroups වටා වඩාත් පරිශීලක-හිතකාමී සාරාංශයක් ලබා දේ.


දැන් මා වෙනුවෙන් වැඩ කරන බවක් පෙනේ (නැවතත්?) නමුත් මෙන්න ගූගල් හැඹිලි අනුවාදය: webcache.googleusercontent.com/…
kvz

කාර්ය සාධක කට්ටලය සමඟ අපට කල් ඉකුත්වීම භාවිතා කළ හැකිද (අපට මතකය සහ හරය යන දෙකම සීමා කළ යුතුය)?
ransh

13
මෙම පිළිතුර coreutilsඑකම නමින් ලිනක්ස් සම්මත උපයෝගීතාවයට යොමු නොවන බව සැලකිල්ලට ගත යුතුය ! මේ අනුව, ඔබේ පද්ධතියේ ඕනෑම තැනක, සමහර පැකේජයට timeoutලිනක්ස් සම්මත coreutilsපැකේජයක් අපේක්ෂා කරන ස්ක්‍රිප්ටයක් තිබේ නම් පිළිතුර භයානක විය හැකිය ! මෙම මෙවලම ඩෙබියන් වැනි බෙදාහැරීම් සඳහා ඇසුරුම් කර ඇති බව මම නොදනිමි.
user1404316

-t <seconds>තත්පර ගණනකට පසු අවහිරතා ක්‍රියාවලිය විනාශ කරයිද ?
xxx374562

-M කිලෝබයිට් භාර ගැනීමද ප්‍රයෝජනවත් විය හැකිය. ඉහත උදාහරණයෙන් ඇඟවෙන්නේ එය MB භාවිතා කිරීමයි.
ඩැනියෙල්

132

මෙය සීමා කළ හැකි තවත් ක්‍රමයක් නම් ලිනක්ස් පාලන කණ්ඩායම් භාවිතා කිරීමයි. ක්‍රියාවලියක (හෝ ක්‍රියාවලි සමූහයක) භෞතික මතකය අථත්‍ය මතකයෙන් වෙන් කිරීම සීමා කිරීමට ඔබට අවශ්‍ය නම් මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ. උදාහරණයක් වශයෙන්:

cgcreate -g memory:myGroup
echo 500M > /sys/fs/cgroup/memory/myGroup/memory.limit_in_bytes
echo 5G > /sys/fs/cgroup/memory/myGroup/memory.memsw.limit_in_bytes

නම් කරන ලද පාලන කණ්ඩායමක් නිර්මාණය කරනු ඇත myGroup, myGroup යටතේ ක්‍රියාත්මක වන ක්‍රියාවලි සමූහය 500 MB භෞතික මතක ශක්තිය දක්වා සහ 5000 MB swap දක්වා. පාලන කණ්ඩායම යටතේ ක්‍රියාවලියක් ක්‍රියාත්මක කිරීම සඳහා:

cgexec -g memory:myGroup pdftoppm

නවීන, උබුන්ටු බෙදාහැරීමේ මත මෙම උදාහරණයේ ස්ථාපනය අවශ්ය බව සටහන cgroup-binපැකේජය සහ සංස්කරණය කිරීම /etc/default/grubවෙනස් කිරීමට GRUB_CMDLINE_LINUX_DEFAULTකිරීමට:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

sudo update-grubනව කර්නල් ඇරඹුම් පරාමිතීන් සමඟ ආරම්භ කිරීම සඳහා ධාවනය සහ නැවත ආරම්භ කිරීම.


4
මෙම firejailවැඩසටහන ඔබ මතක සීමා (හුදෙක් මතකය වඩා සීමා කිරීමට cgroups හා නාමඅවකාශයන්හි භාවිතා කරමින්) සමග ක්රියාවලිය ආරම්භ වෙනවා ඇත. මෙය ක්‍රියාත්මක වීම සඳහා මගේ පද්ධතිවල කර්නල් විධාන රේඛාව වෙනස් කිරීමට මට අවශ්‍ය නොවීය!
නෙඩ් 64

1
GRUB_CMDLINE_LINUX_DEFAULTසැකසුම නොනවත්වා කිරීමට ඔබට වෙනස් කිරීමක් අවශ්‍යද? මම එය දිගටම පවතින කිරීමට තවත් ක්රමයක් සොයා මෙහි .
stason


1
මෙම පිළිතුරෙහි සටහන් කිරීම ප්‍රයෝජනවත් වනුයේ සමහර බෙදාහැරීම් වලදී (උදා: උබුන්ටු) සුඩෝ cgcreate සඳහා අවශ්‍ය වන අතර වත්මන් පරිශීලකයාට අවසර ලබා නොදුන්නේ නම් පසුකාලීන විධානයන්ය. මෙම තොරතුරු වෙනත් තැනකින් සොයා ගැනීමෙන් පා er කයා බේරා ගනු ඇත (උදා: askubuntu.com/questions/345055 ). මම මේ සඳහා සංස්කරණයක් යෝජනා කළ නමුත් එය ප්‍රතික්ෂේප විය.
ස්ටූබසික්

නවීන උබුන්ටු සඳහා cgroup-bin අවශ්‍ය නොවන බව පෙනේ
Ferroao

82

ඔබේ ක්‍රියාවලිය වැඩිපුරම මතකය පරිභෝජනය කරන දරුවන් බිහි නොකරන්නේ නම්, ඔබට setrlimitක්‍රියාකාරිත්වය භාවිතා කළ හැකිය . ඒ සඳහා වඩාත් පොදු පරිශීලක අතුරුමුහුණත වන්නේ ulimitකවචයේ විධානය භාවිතා කිරීමයි:

$ ulimit -Sv 500000     # Set ~500 mb limit
$ pdftoppm ...

මෙය ඔබගේ ක්‍රියාවලියේ "අතථ්‍ය" මතකය පමණක් සීමා කරනු ඇත, ක්‍රියාවලිය ක්‍රියාවට නංවන ලද මතකය වෙනත් ක්‍රියාවලීන් සමඟ බෙදා ගනී, සහ මතකය සිතියම් ගත කළ නමුත් වෙන් කර නැත (නිදසුනක් ලෙස, ජාවාහි විශාල සංචය). තවමත්, අථත්ය මතකය යනු විශාල වශයෙන් වර්ධනය වන ක්රියාවලීන් සඳහා ආසන්නතම දළ විශ්ලේෂණය වන අතර එම දෝෂයන් වැදගත් නොවේ.

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


3
setrlimitවැඩි දරුවන් සඳහා වඩාත් සංකීර්ණ වන්නේ ඇයි ? man setrlimit"දෙබලක (2) හරහා නිර්මාණය කරන ලද ළමා ක්‍රියාවලියක් එහි දෙමව්පියන්ගේ සම්පත් සීමාවන් උරුම කර ගන්නා බව මට කියයි. සම්පත් සීමාවන් ක්‍රියාත්මක කිරීම (2) හරහා ආරක්ෂා වේ"
අකිරා

8
සියලු ළමා ක්‍රියාවලීන් සඳහා කර්නලය vm ප්‍රමාණය එකතු නොකරන නිසා; එය එසේ වූයේ නම් කෙසේ හෝ පිළිතුර වැරදියි. සීමාව එක් ක්‍රියාවලියක් වන අතර එය අථත්‍ය ලිපින අවකාශය මිස මතක භාවිතය නොවේ. මතක භාවිතය මැනීමට අපහසුය.
මාර්ක්

1
මම ප්‍රශ්නය නිවැරදිව තේරුම් ගත්තා නම්, OP යනු උප ක්‍රියාවලියකට (දරුවාට) ඇති සීමාව කුමක්ද?
akira

Ark මාක්ආර්, කෙසේ වෙතත්, අථත්ය ලිපින අවකාශය භාවිතා කරන මතකය සඳහා හොඳ දළ විශ්ලේෂණයක් වේ, විශේෂයෙන් ඔබ අථත්ය යාන්ත්රණයකින් පාලනය නොවන වැඩසටහනක් ක්රියාත්මක කරන්නේ නම් (කියන්න, ජාවා). අවම වශයෙන් මම මීට වඩා හොඳ මෙට්‍රික් එකක් දන්නේ නැත.

2
යන්තම් ස්තුති කියන්න ඕන - මෙම ulimitප්රවේශය සමඟ මට උදව් කළා firefoxගේ දෝෂයක් 622816 - විශාල රූපය පූරණය ෆයර්ෆොක්ස් "කැටි" හැක, හෝ පද්ධතියම බිඳ ; එය USB ඇරඹුමක් මත (RAM වෙතින්) මෙහෙයුම් පද්ධතිය කැටි කිරීමට නැඹුරු වන අතර එය නැවත ආරම්භ කිරීම අවශ්‍ය වේ. දැන් අවම වශයෙන් firefoxකඩා වැටී මෙහෙයුම් පද්ධතිය පණපිටින් තබයි ... චියර්ස්!
sdaau

17

ඕනෑම පද්ධති මත පදනම් වූ ඩිස්ට්‍රෝ එකක ඔබට systemd-run හරහා වක්‍රව cgroups භාවිතා කළ හැකිය. උදා: ඔබේ pdftoppmරැම් 500M ට සීමා කිරීම සඳහා, භාවිතා කරන්න:

systemd-run --scope -p MemoryLimit=500M pdftoppm

සටහන: මෙය ඔබෙන් මුරපදයක් ඉල්ලා සිටින නමුත් යෙදුම ඔබේ පරිශීලකයා ලෙස දියත් වේ. විධානය අවශ්‍ය යැයි සිතීමට ඔබව රැවටීමට මෙය ඉඩ නොදෙන්න sudo, මන්ද එය විධානය මූල යටතේ ක්‍රියාත්මක වීමට හේතු වන අතර එය ඔබගේ අභිප්‍රාය නොවීය.

ඔබට මුරපදය ඇතුළත් නොකිරීමට අවශ්‍ය නම් (සියල්ලට පසු, ඔබේ මතකය ඔබ සතු පරිශීලකයෙකු ලෙස, එය සීමා කිරීමට ඔබට මුරපදයක් අවශ්‍ය වන්නේ ඇයි) , ඔබට --userවිකල්පයක් භාවිතා කළ හැකිය, කෙසේ වෙතත් මෙය ක්‍රියාත්මක කිරීම සඳහා ඔබට cgroupsv2 සහය අවශ්‍ය වේ. දැන් කර්නල් පරාමිතිය සමඟ ආරම්භ කිරීමට අවශ්‍ය වේsystemd.unified_cgroup_hierarchy .


2
ස්තූතියි, මගේ දවස බවට පත් කළා
Geradlus_RU

කෙටි හා මිහිරි. පෙර මම උත්සාහ කළා firejail, නමුත් ඒ සඳහා බොහෝ අතුරු ආබාධ සමඟ overkill විය බවක් පමණක් මතකය පරිභෝජනය සීමා. ස්තූතියි!
ඇන්ඩ්‍රි සෙනිට්සන්

1
තවත් සටහනක්: මෙය cgroupsකබාය යටතේ භාවිතා වන cgroupsඅතර වෙනත් පිළිතුරු වල යෝජනා කර ඇති පරිදි අතින් හසුරුවනවා වෙනුවට මෙම විධානය සමඟ එය කිරීමට වැඩි අර්ථයක් ඇතැයි මම සිතමි . මේ සඳහා වැඩි දියුණුවක් තිබිය යුතුය.
ඇන්ඩ්‍රි සෙනිට්සන්

IMO පහසුම ක්‍රමය මෙයයි, ස්තූතියි
skrat

10

මම පහත පිටපත භාවිතා කරමි. එය හරහා cgroups භාවිතා කරයි cgmanager. යාවත්කාලීන කිරීම: එය දැන් සිට විධාන භාවිතා කරයි cgroup-tools. මෙම ස්ක්‍රිප්ටය නම් limitmemකර එය ඔබගේ $ PATH තුළට දමන්න, ඔබට එය භාවිතා කළ හැකිය limitmem 100M bash. මෙය මතකය සහ හුවමාරු භාවිතය යන දෙකම සීමා කරයි. මතකය සීමා කිරීම සඳහා රේඛාව ඉවත් කරන්න memory.memsw.limit_in_bytes.

සංස්කරණය කරන්න: පෙරනිමියෙන් ලිනක්ස් ස්ථාපනයන් මෙය මතක භාවිතය සීමා කරයි, හුවමාරු භාවිතය නොවේ. Swap භාවිතය සීමා කිරීම සක්‍රීය කිරීම සඳහා, ඔබේ ලිනක්ස් පද්ධතියේ swap ගිණුම්කරණය සක්‍රීය කළ යුතුය. සැකසීම / එකතු ඔබ විසින් swapaccount=1දී /etc/default/grubඒ වගේ දෙයක් වගේ නිසා

GRUB_CMDLINE_LINUX="swapaccount=1"

ඉන්පසු ධාවනය sudo update-grubකර නැවත ආරම්භ කරන්න.

වියාචනය: cgroup-toolsඅනාගතයේ දී ද බිඳී ගියහොත් මා පුදුම නොවනු ඇත . නිවැරදි විසඳුම වනුයේ cgroup කළමනාකරණය සඳහා systemd api භාවිතා කිරීමයි, නමුත් එම atm සඳහා විධාන රේඛා මෙවලම් නොමැත

#!/bin/sh

# This script uses commands from the cgroup-tools package. The cgroup-tools commands access the cgroup filesystem directly which is against the (new-ish) kernel's requirement that cgroups are managed by a single entity (which usually will be systemd). Additionally there is a v2 cgroup api in development which will probably replace the existing api at some point. So expect this script to break in the future. The correct way forward would be to use systemd's apis to create the cgroups, but afaik systemd currently (feb 2018) only exposes dbus apis for which there are no command line tools yet, and I didn't feel like writing those.

# strict mode: error if commands fail or if unset variables are used
set -eu

if [ "$#" -lt 2 ]
then
    echo Usage: `basename $0` "<limit> <command>..."
    echo or: `basename $0` "<memlimit> -s <swaplimit> <command>..."
    exit 1
fi

cgname="limitmem_$$"

# parse command line args and find limits

limit="$1"
swaplimit="$limit"
shift

if [ "$1" = "-s" ]
then
    shift
    swaplimit="$1"
    shift
fi

if [ "$1" = -- ]
then
    shift
fi

if [ "$limit" = "$swaplimit" ]
then
    memsw=0
    echo "limiting memory to $limit (cgroup $cgname) for command $@" >&2
else
    memsw=1
    echo "limiting memory to $limit and total virtual memory to $swaplimit (cgroup $cgname) for command $@" >&2
fi

# create cgroup
sudo cgcreate -g "memory:$cgname"
sudo cgset -r memory.limit_in_bytes="$limit" "$cgname"
bytes_limit=`cgget -g "memory:$cgname" | grep memory.limit_in_bytes | cut -d\  -f2`

# try also limiting swap usage, but this fails if the system has no swap
if sudo cgset -r memory.memsw.limit_in_bytes="$swaplimit" "$cgname"
then
    bytes_swap_limit=`cgget -g "memory:$cgname" | grep memory.memsw.limit_in_bytes | cut -d\  -f2`
else
    echo "failed to limit swap"
    memsw=0
fi

# create a waiting sudo'd process that will delete the cgroup once we're done. This prevents the user needing to enter their password to sudo again after the main command exists, which may take longer than sudo's timeout.
tmpdir=${XDG_RUNTIME_DIR:-$TMPDIR}
tmpdir=${tmpdir:-/tmp}
fifo="$tmpdir/limitmem_$$_cgroup_closer"
mkfifo --mode=u=rw,go= "$fifo"
sudo -b sh -c "head -c1 '$fifo' >/dev/null ; cgdelete -g 'memory:$cgname'"

# spawn subshell to run in the cgroup. If the command fails we still want to remove the cgroup so unset '-e'.
set +e
(
set -e
# move subshell into cgroup
sudo cgclassify -g "memory:$cgname" --sticky `sh -c 'echo $PPID'`  # $$ returns the main shell's pid, not this subshell's.
exec "$@"
)

# grab exit code 
exitcode=$?

set -e

# show memory usage summary

peak_mem=`cgget -g "memory:$cgname" | grep memory.max_usage_in_bytes | cut -d\  -f2`
failcount=`cgget -g "memory:$cgname" | grep memory.failcnt | cut -d\  -f2`
percent=`expr "$peak_mem" / \( "$bytes_limit" / 100 \)`

echo "peak memory used: $peak_mem ($percent%); exceeded limit $failcount times" >&2

if [ "$memsw" = 1 ]
then
    peak_swap=`cgget -g "memory:$cgname" | grep memory.memsw.max_usage_in_bytes | cut -d\  -f2`
    swap_failcount=`cgget -g "memory:$cgname" |grep memory.memsw.failcnt | cut -d\  -f2`
    swap_percent=`expr "$peak_swap" / \( "$bytes_swap_limit" / 100 \)`

    echo "peak virtual memory used: $peak_swap ($swap_percent%); exceeded limit $swap_failcount times" >&2
fi

# remove cgroup by sending a byte through the pipe
echo 1 > "$fifo"
rm "$fifo"

exit $exitcode

1
call to cgmanager_create_sync failed: invalid requestසෑම ක්‍රියාවලියක් සඳහාම මම ක්‍රියාත්මක කිරීමට උත්සාහ කරමි limitmem 100M processname. මම Xubuntu 16.04 LTS හි සිටින අතර එම පැකේජය ස්ථාපනය කර ඇත.
ආරොන් ෆ්‍රෑන්ක්

අපොයි, මට මෙම දෝෂ පණිවිඩය ලැබුණි: $ limitmem 400M rstudio limiting memory to 400M (cgroup limitmem_24575) for command rstudio Error org.freedesktop.DBus.Error.InvalidArgs: invalid request කිසියම් අදහසක් තිබේද?
ආර් කිසෙලෙව්

KRKiselev cgmanager දැන් අතහැර දමා ඇති අතර උබුන්ටු 17.10 හි පවා නොමැත. එය භාවිතා කරන systemd api යම් අවස්ථාවක දී වෙනස් කරන ලදි, එබැවින් එය බොහෝ විට හේතුව විය හැකිය. Cgroup-tools විධාන භාවිතා කිරීම සඳහා මම ස්ක්‍රිප්ට් යාවත්කාලීන කර ඇත.
ජන්කනිස්

ප්‍රති percentresults ල සඳහා ගණනය කිරීම ශුන්‍ය නම්, exprතත්ව කේතය 1 ක් වන අතර මෙම ස්ක්‍රිප්ට් අකාලයේ පිටවෙයි. රේඛාව වෙනස් කිරීමට නිර්දේශ කරන්න: percent=$(( "$peak_mem" / $(( "$bytes_limit" / 100 )) ))(ref: unix.stackexchange.com/questions/63166/… )
විලි බැලෙන්ටින්

මා සීමාව ඉක්මවා ගියහොත් මගේ ක්‍රියාවලිය විනාශ කිරීමට cgroup වින්‍යාස කරන්නේ කෙසේද?
d9ngle

7

daemontoolsමාර්ක් ජොන්සන් විසින් යෝජනා කරන ලද මෙවලම් වලට අමතරව , සොයාගත හැකි දේ ද සලකා බැලිය chpstහැකිය runit. Runit ම එකට එකතු වී ඇති busyboxබැවින් ඔබ එය දැනටමත් ස්ථාපනය කර ඇත.

මෙම මිනිසා පිටුවchpst සංදර්ශන විකල්පය:

-m බයිට් මතකය සීමා කරයි. දත්ත ඛණ්ඩය, සිරස් කොටස, අගුළු දැමූ භෞතික පිටු, සහ එක් ක්‍රියාවලියකට ඇති සියලුම කොටස් බයිට් වලට සීමා කරන්න.


4

මම උබුන්ටු 18.04.2 එල්ටීඑස් ධාවනය කරන අතර ඔහු යෝජනා කරන පරිදි ජන්කනිස් පිටපත මට වැඩ කරන්නේ නැත. ධාවනය limitmem 100M scriptයනු අසීමිත හුවමාරුවකින් 100MB RAM ප්‍රමාණයක් සීමා කිරීමයි .

පරාමිතියක් නම් කර නොමැති limitmem 100M -s 100M scriptබැවින් ධාවනය නිහ ly ව අසමත් වේ .cgget -g "memory:$cgname"memory.memsw.limit_in_bytes

ඒ නිසා මම swap අක්‍රීය කළා:

# create cgroup
sudo cgcreate -g "memory:$cgname"
sudo cgset -r memory.limit_in_bytes="$limit" "$cgname"
sudo cgset -r memory.swappiness=0 "$cgname"
bytes_limit=`cgget -g "memory:$cgname" | grep memory.limit_in_bytes | cut -d\  -f2`

sourcesourcejedi එය එකතු කළේය :)
d9ngle

2
හරි, මම මගේ පිළිතුර සංස්කරණය කළා. Swap සීමාවන් සක්‍රිය කිරීමට ඔබේ පද්ධතියේ swap ගිණුම්කරණය සක්‍රීය කළ යුතුය. ඊට උඩින් කුඩා ධාවන කාලයක් ඇත, එබැවින් එය පෙරනිමියෙන් උබුන්ටු මත සක්‍රීය නොවේ. මගේ සංස්කරණය බලන්න.
ජන්කනිස්
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.