Ubuntu หมด RAM อย่างรวดเร็วและคอมพิวเตอร์ของฉันเริ่มค้าง คำสั่งอะไรที่จะแก้ปัญหานี้?


73

มันเกิดขึ้นกับฉันบ่อยครั้งเมื่อฉันรวบรวมซอฟต์แวร์ในพื้นหลังและทันใดนั้นทุกอย่างก็เริ่มช้าลงและในที่สุดก็กลายเป็นน้ำแข็ง [หากฉันไม่ทำอะไรเลย] เนื่องจากฉันใช้พื้นที่แรมและพื้นที่สว็อปหมดแล้ว

คำถามนี้สันนิษฐานว่าฉันมีเวลาและทรัพยากรเพียงพอที่จะเปิดสถานี Gnome ค้นหาประวัติของฉันและดำเนินการsudoคำสั่งเดียว

คำสั่งใดที่สามารถช่วยให้ฉันไม่ต้องรีบูตเครื่องหรือรีบูตเครื่องเลย?


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
โธมัสวอร์ด

1
หากคุณไม่มีพื้นที่สว็อปฉันคิดว่าคุณมีมันน้อยเกินไป ฉันได้พื้นที่สว็อป 20G บนคอมพิวเตอร์เครื่องนี้ ประเด็นก็คือเพื่อให้คุณมีเวลามากพอกับระบบที่ใช้งานได้เพื่อฆ่าสิ่งที่กำลังหมดความทรงจำของคุณ ไม่ใช่สิ่งที่คุณใช้ในสิ่งที่คุณจะใช้ แต่สิ่งที่คุณหวังว่าคุณจะไม่เคยใช้
JoL

1
คุณแน่ใจหรือไม่ว่าทั้ง RAM และ swap เต็มไป หากเป็นกรณีนี้ตัวจัดการ OOM จะฆ่าคอมไพเลอร์ของคุณและเพิ่มหน่วยความจำ (และรวมถึงกระบวนการสร้างของคุณด้วย) มิฉะนั้นฉันคิดว่ามันเพิ่งจะเต็มและระบบของคุณอาจช้าเพราะ swap ของคุณอยู่ในดิสก์ระบบของคุณ
sudo

3
ลองลดจำนวนงานสร้างแบบขนานของคุณหากคุณมี RAM ไม่เพียงพอที่จะรองรับได้ หากบิลด์ของคุณเริ่มต้นแลกเปลี่ยนคุณจะช้าลง ด้วยความmakeพยายาม-j4เช่น 4 ขนานสร้างในเวลา
Shahbaz

1
"Alexa สั่งให้ฉัน ram 8 กิ๊ก"

คำตอบ:


84

จากประสบการณ์ของฉัน Firefox และ Chrome ใช้ RAM มากกว่าคอมพิวเตอร์ 7 เครื่องแรกของฉันรวมกัน อาจเป็นไปได้มากกว่านั้น แต่ฉันได้รับจากจุดของฉัน สิ่งแรกที่คุณควรทำคือปิดเบราว์เซอร์ของคุณ คำสั่ง?

killall -9 firefox google-chrome google-chrome-stable chromium-browser

ฉันได้เชื่อมโยงเบราว์เซอร์ยอดนิยมเข้าด้วยกันเป็นคำสั่งเดียวที่นั่น แต่ถ้าคุณกำลังเรียกใช้อย่างอื่น (หรือรู้ว่าคุณไม่ได้ใช้สิ่งใดสิ่งหนึ่ง) เพียงแค่ปรับเปลี่ยนคำสั่ง killall -9 ...เป็นบิตที่สำคัญ ผู้คนมักจะเจอปัญหาSIGKILL(หมายเลขสัญญาณ 9) แต่เบราว์เซอร์นั้นมีความยืดหยุ่นอย่างยิ่ง ยิ่งไปกว่านั้นการยกเลิกอย่างช้า ๆ ผ่านSIGTERMจะหมายถึงเบราว์เซอร์จะทำการโหลดขยะทำความสะอาดซึ่งต้องใช้ RAM เพิ่มเติมจำนวนมากซึ่งเป็นสิ่งที่คุณไม่สามารถจ่ายได้ในสถานการณ์นี้

หากคุณไม่สามารถรับสิ่งนั้นลงในเทอร์มินัลที่กำลังทำงานอยู่หรือบทสนทนาAlt+ F2ให้ลองเปลี่ยนเป็น TTY Control+ Alt+ F2จะนำคุณไปยัง TTY2 ซึ่งควรอนุญาตให้คุณเข้าสู่ระบบ (แม้ว่ามันอาจจะช้า) และควรให้คุณใช้บางอย่างเช่นhtopในการดีบักปัญหา ฉันไม่คิดว่าฉันจะใช้ RAM หมดจนถึงจุดที่ฉันไม่สามารถลุกhtopขึ้นได้

โซลูชันระยะยาวเกี่ยวข้องกับการซื้อ RAM เพิ่มเติมให้เช่าผ่านคอมพิวเตอร์ระยะไกลหรือไม่ทำสิ่งที่คุณกำลังทำอยู่ ฉันจะปล่อยให้ข้อโต้แย้งทางเศรษฐกิจที่ซับซ้อนขึ้นอยู่กับคุณ แต่โดยทั่วไปแล้วพูดว่า RAM มีราคาถูกที่จะซื้อ แต่ถ้าคุณต้องการจำนวนระเบิดเซิร์ฟเวอร์ VPS เรียกเก็บเงินต่อนาทีหรือชั่วโมงเป็นทางเลือกที่ดี


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
โธมัสวอร์ด

ฉันได้รับคำสั่งสองสามข้อที่เชื่อมโยงกับคำสั่งของฉันlazygitที่ฉันใช้เป็นครั้งคราวอาจมีบางอย่างที่สามารถใช้ได้ที่นี่ killall ...สคริปต์ทั้งหมดสามารถลดลงให้ง่ายemptyramหรืออะไรทำนองนั้น
Francisco Presencia

คุณไม่จำเป็นต้องเรียกใช้คำสั่งเต็มรูปแบบหากคุณรู้ว่าเบราว์เซอร์ใดกำลังทำงานอยู่และฉันคิดว่าคนส่วนใหญ่ที่สามารถระบุปัญหาการขาดแคลน RAM ได้ โดยการขยายผมพบว่ามันยากที่จะจำได้ว่าผมเคยเขียนสคริปต์มากกว่าเพียงแค่การไล่ในemptyram killall -9 firefox
Oli

2
การซื้อ RAM ... ทำไมไม่เพียง แต่ดาวน์โหลดแรมเพิ่มเติม?
Stephan Bijzitter

1
คุณอาจล้อเล่น แต่ถ้าคุณต้องทำอะไรซักอย่างในช่วงเวลาสั้น ๆ ที่ต้องการ RAM และ CPU มากกว่าที่คุณมีการเช่า VPS ในแต่ละนาทีนั้นค่อนข้างประหยัดสำหรับการถ่ายภาพเดียว
Oli

66

ในระบบที่เปิดใช้งานคีย์คำขอของระบบเวทมนตร์การกดAlt + System Request+ f(หากไม่มีการทำเครื่องหมายบนแป้นพิมพ์ของคุณSystem Requestมักจะอยู่บนPrint Screenปุ่ม) จะเรียกใช้เคอร์เนลตัวฆ่าหน่วยความจำ (oomkiller) ด้วยตนเองซึ่งพยายามเลือกกระบวนการที่แย่ที่สุดสำหรับ การใช้งานหน่วยความจำและฆ่ามัน คุณสามารถทำสิ่งนี้ได้ถ้าคุณมีเวลาน้อยกว่าที่คุณได้อธิบายไว้และระบบกำลังจะเริ่ม (หรืออาจเริ่มต้นแล้ว) การเฆี่ยนตี - ในกรณีนี้คุณอาจไม่สนใจสิ่งที่ถูกฆ่าเพียงแค่คุณจบ กับระบบที่ใช้งานได้ บางครั้งสิ่งนี้อาจจบลงด้วยการฆ่า X แต่เวลาส่วนใหญ่ในวันนี้มันดีกว่ามากในการเลือกกระบวนการที่ไม่ดีกว่าที่เคยเป็น


5
@ T.Sar หากคุณกำลังมุ่งหน้าไปที่การเฆี่ยนตีคุณจะสูญเสียหรือได้รับโอกาสในการฆ่ากินหน่วยความจำ คุณจะไม่ได้อะไรเลยถ้าคุณงดการแสดง
Ruslan

4
@Muzer นี้จะทำงานเมื่อคุณได้ตั้งkernel.sysrqไปหรือจำนวนรวมทั้งบิตที่ถูกต้องในของคุณ1 /etc/sysctl.d/10-magic-sysrq.conf
Ruslan

9
@ T.Sar คุณจะไม่สูญเสียความคืบหน้าถ้าคุณใช้ระบบสร้างสติ คุณจะเก็บไฟล์ออบเจ็กต์ทั้งหมด แต่ไฟล์ที่คุณรวบรวมไว้จริง ๆ แล้วคุณจะกลับไปที่จุดที่เหลือ
Muzer

3
@ T.Sar เพียงเพราะสิ่งที่คุณรวบรวมไม่ได้มีเหตุผลไม่ได้หมายความว่าระบบการสร้างไม่ได้มีสติ สร้างระบบตั้งแต่กาลเวลามีการจัดเก็บไฟล์วัตถุเพื่อนำมาใช้ใหม่ในการรวบรวมที่ตามมา ในทางตรงกันข้ามฉันสามารถตั้งชื่อโครงการซอฟต์แวร์มากมายที่มีสติน้อยกว่า Linux (ซึ่งโดยทั่วไปแล้วค่อนข้างออกแบบมาอย่างดี) ตัวอย่างเช่นการรวบรวมบางสิ่งเช่น Firefox หรือ OpenOffice ด้วย 8 บิวด์บิวด์แบบขนานฉันสามารถดูได้อย่างง่ายดายโดยเรียงตามลำดับกิกะไบต์ของ RAM นอกจากนี้ยังมีระบบองค์กรขนาดใหญ่ที่ต้องพึ่งพาห้องสมุดหลายร้อยแห่ง
Muzer

7
@ T.Sar Linux ไม่ได้ซับซ้อนจาก POV ของคอมไพเลอร์ จริงๆแล้วมีโปรแกรม C แทบจะทุกโปรแกรม แล้วซีพลัสพลัสล่ะ? คุณเคยลองสร้างโปรแกรมโดยใช้ Eigen หรือ Boost หรือไม่? คุณจะแปลกใจว่าคอมไพเลอร์มีหน่วยความจำเท่าไหร่ที่กินโปรแกรมดังกล่าวและพวกมันไม่จำเป็นต้องซับซ้อน
Ruslan

20

ตรงกันข้ามกับคำตอบอื่น ๆ ฉันขอแนะนำให้คุณปิดการแลกเปลี่ยนในขณะที่คุณกำลังทำสิ่งนี้ ในขณะที่การสลับช่วยให้ระบบของคุณทำงานในลักษณะที่คาดการณ์ได้และมักจะใช้เพื่อเพิ่มปริมาณงานของแอพพลิเคชั่นที่เข้าถึงดิสก์ (โดย eviting หน้าที่ไม่ได้ใช้เพื่อให้มีที่ว่างสำหรับดิสก์แคช) ในกรณีนี้ดูเหมือนว่าระบบของคุณช้าลง เป็นระดับที่ใช้ไม่ได้เนื่องจากหน่วยความจำที่ใช้งานมากเกินไปกำลังถูกบังคับให้เปลี่ยน

ฉันขอแนะนำให้ปิดการใช้งานการแลกเปลี่ยนทั้งหมดในขณะที่ทำภารกิจนี้เพื่อที่ว่าตัวกำจัดหน่วยความจำไม่เพียงพอจะทำงานทันทีที่ RAM เต็ม

ทางเลือกอื่น ๆ :

  • เพิ่มความเร็วในการอ่านของการแลกเปลี่ยนโดยการใส่พาร์ติชัน swap ใน RAID1
    • หรือ RAID0 ถ้าคุณรู้สึกเสี่ยง แต่มันจะทำให้โปรแกรมที่กำลังทำงานจำนวนมากพังลงมาหากดิสก์ตัวใดตัวหนึ่งของคุณทำงานผิดปกติ
  • ลดจำนวนงานสร้างพร้อมกัน ("แกนเพิ่มเติม = ความเร็วมากขึ้น" เราทุกคนพูดว่าลืมว่ามันต้องใช้เวลาโทรเชิงเส้นบน RAM)
  • นี่อาจเป็นไปได้ทั้งสองวิธี แต่ลองเปิดใช้งานzswapในเคอร์เนล การบีบอัดหน้านี้ก่อนที่พวกเขาจะถูกส่งไปแลกเปลี่ยนซึ่งอาจให้พื้นที่กระดิกเพียงพอที่จะทำให้เครื่องของคุณเร็วขึ้น ในอีกทางหนึ่งมันก็อาจจะกลายเป็นอุปสรรคด้วยการบีบอัด / คลายการบีบอัดพิเศษ
  • ปิดการปรับให้เหมาะสมหรือใช้คอมไพเลอร์อื่น บางครั้งรหัสการปรับให้เหมาะสมอาจใช้หน่วยความจำหลายกิกะไบต์ หากคุณเปิดใช้งาน LTO คุณจะต้องใช้ RAM จำนวนมากในระยะเชื่อมโยงด้วย หากสิ่งอื่นล้มเหลวคุณสามารถลองรวบรวมโปรเจ็กต์ของคุณด้วยคอมไพเลอร์ที่มีน้ำหนักเบา (เช่นtcc) โดยเสียค่าใช้จ่ายเล็กน้อยสำหรับประสิทธิภาพการรันไทม์เล็กน้อยที่เข้าชมผลิตภัณฑ์ที่รวบรวม (โดยปกติจะยอมรับได้หากคุณทำสิ่งนี้เพื่อการพัฒนา / แก้ไขจุดบกพร่อง)

6
หากคุณปิดการแลกเปลี่ยนนั่นเป็นพฤติกรรมของ Linux เมื่อหน่วยความจำไม่เพียงพอ หาก Linux ไม่ได้เรียกใช้ killer killer หน่วยความจำหมด แต่ค้างแทนนั่นอาจหมายความว่ามีปัญหาในการตั้งค่าที่ลึกกว่า แน่นอนว่าหากเปิดใช้งานการสลับพฤติกรรมจะแตกต่างกันเล็กน้อย
คะแนน _ ต่ำกว่า

10
@Akiva คุณเคยลองโดยไม่ต้องสลับหรือไม่? คำตอบนี้เป็นจุด ฉันต้องการเพิ่มว่าการทำงานsudo swapoff -aอาจช่วยให้คุณประหยัดเมื่อคุณมีข้อผูกมัดอยู่แล้ว: มันจะหยุดการใช้พื้นที่สว็อปเพิ่มเติมทันทีเช่นนักฆ่า OOM ควรถูกเรียกใช้ในทันทีถัดไปและนำเครื่องเข้าสู่การทำงาน sudo swapoff -aยังเป็นมาตรการป้องกันที่ยอดเยี่ยมเมื่อทำการดีบั๊กการรั่วไหลของหน่วยความจำหรือการคอมไพล์พูด Firefox โดยปกติการสลับจะมีประโยชน์เล็กน้อย (เช่นสำหรับการจำศีลหรือแลกเปลี่ยนสิ่งที่ไม่มีใครต้องการจริงๆ) แต่เมื่อคุณใช้หน่วยความจำจริงการแช่แข็งจะแย่ลง
Jonas Schäfer

2
@Score_Under: การแยกพาร์ติชัน swap ในแต่ละดิสก์นั้นควรจะมีประสิทธิภาพมากกว่าการแลกเปลี่ยนบนอุปกรณ์ md raid0 อย่างมีนัยสำคัญ ฉันลืมที่ฉันอ่าน ลินุกซ์ RAID วิกิพีเดียแนะนำพาร์ทิชันเฉพาะกิจ RAID0 แต่ไม่ได้พูดอะไรที่แข็งแกร่งมากเกี่ยวกับสาเหตุที่มันจะดีกว่า อย่างไรก็ตามใช่ RAID1 หรือ RAID10n2 นั้นเหมาะสมสำหรับการแลกเปลี่ยนโดยเฉพาะอย่างยิ่งถ้าคุณแค่ต้องการที่จะสามารถสลับหน้าสกปรก แต่เย็นมาก ๆ ออกไปเพื่อให้แรมเพิ่มขึ้นสำหรับหน้ากระดาษ นั่นคือประสิทธิภาพการแลกเปลี่ยนไม่ได้เป็นเรื่องใหญ่
Peter Cordes

2
ประเด็นของฉันคือการทำตามคำแนะนำของคุณคุณอาจไม่สามารถเรียกใช้โปรแกรมเหล่านั้นได้เลยเพราะพวกเขาต้องการสลับ งานสร้างที่ล้มเหลว 100% ของเวลานั้นแย่กว่างานสร้างที่มีโอกาส 50% ในการล็อคระบบใช่ไหม
Dmitry Grigoryev

2
หากไม่มีการแลกเปลี่ยนในหลาย ๆ เครื่องมันเป็นไปไม่ได้ที่จะรวบรวมโค้ดขนาดใหญ่ ทำไมคุณถึงคิดว่ามันเป็นการรวบรวมที่เขาต้องการเสียสละ?
David Schwartz

14

คุณสามารถใช้คำสั่งต่อไปนี้ (ซ้ำ ๆ หากจำเป็น) เพื่อฆ่ากระบวนการโดยใช้ RAM ส่วนใหญ่ในระบบของคุณ:

ps -eo pid --no-headers --sort=-%mem | head -1 | xargs kill -9

ด้วย:

  • ps -eo pid --no-headers --sort=-%mem: แสดงรหัสกระบวนการของกระบวนการที่กำลังทำงานทั้งหมดเรียงลำดับตามการใช้หน่วยความจำ
  • head -1: เก็บบรรทัดแรกเท่านั้น (กระบวนการใช้หน่วยความจำมากที่สุด)
  • xargs kill -9: ฆ่ากระบวนการ

แก้ไขหลังจากความคิดเห็นที่ถูกต้องของ Dmitry:

นี่เป็นวิธีแก้ปัญหาที่รวดเร็วและสกปรกที่ควรดำเนินการเมื่อไม่มีงานที่ละเอียดอ่อนกำลังทำงานอยู่ (งานที่คุณไม่ต้องการkill -9)


5
มันแย่กว่าปล่อยให้นักฆ่า OOM จัดการกับสถานการณ์ นักฆ่า OOM ฉลาดกว่านั้นมาก คุณใช้คำสั่งดังกล่าวกับคอมพิวเตอร์ด้วยการคอมไพล์อย่างต่อเนื่องหรือไม่?
Dmitry Grigoryev

@DmitryGrigoryev มันฉลาดมากที่จะฆ่า Xorg บนเดสก์ท็อปของฉัน ในเมล็ดข้าวสมัยใหม่ OOMK ดูเหมือนจะได้รับความมีสติ แต่ฉันก็ไม่เชื่อใจในสิ่งนั้น
Ruslan

11

ก่อนที่จะใช้คำสั่งของคุณทรัพยากรการบริโภคนอกจากนี้คุณยังสามารถใช้setrlimit (2)สายระบบอาจจะด้วยulimitในตัวของเปลือกทุบตีของคุณ (หรือlimitbuiltin ใน zsh) สะดุดตาด้วยสำหรับ-v RLIMIT_ASจากนั้นใหญ่เกินไปที่อยู่เสมือนการบริโภคพื้นที่ (เช่นกับmmap (2)หรือsbrk (2)ใช้โดยmalloc (3) ) จะล้มเหลว (กับerrno (3)เป็นENOMEM)

จากนั้นพวกเขา (เช่นกระบวนการหิวในเปลือกของคุณหลังจากที่คุณพิมพ์ulimit) จะถูกยกเลิกก่อนที่จะแช่แข็งระบบของคุณ

อ่านLinux Ate My RAMและพิจารณาการปิดใช้งานหน่วยความจำ overcommitment (โดยการรันคำสั่งecho 0 > /proc/sys/vm/overcommit_memory เป็น root ให้ดูproc (5) ... )


11

สิ่งนี้เกิดขึ้นกับฉันบ่อยครั้งเมื่อฉันรวบรวมซอฟต์แวร์ในพื้นหลัง

ในกรณีนั้นมีบางอย่างเช่น "killall -9 make" (หรืออะไรก็ตามที่คุณใช้เพื่อจัดการการคอมไพล์ของคุณถ้าไม่ทำ) สิ่งนี้จะหยุดการคอมไพล์ต่อไปอีกต่อไปจะ SIGHUP กระบวนการคอมไพเลอร์ทั้งหมดที่เปิดตัวจากมัน (หวังว่าจะทำให้พวกเขาหยุดเช่นกัน) และโบนัสไม่จำเป็นต้อง sudo สมมติว่าคุณกำลังคอมไพล์เป็นผู้ใช้เดียวกันกับคุณ ในฐานะ และเนื่องจากมันฆ่าสาเหตุที่แท้จริงของปัญหาของคุณแทนที่จะเป็นเว็บเบราว์เซอร์ของคุณ, เซสชัน X หรือกระบวนการบางอย่างแบบสุ่ม, มันจะไม่เข้าไปยุ่งเกี่ยวกับสิ่งอื่นที่คุณทำในระบบในเวลานั้น


2
เป็นเพียงความอัปยศที่ฉันต้องเลื่อนลงเพื่อค้นหาคำตอบนี้ ฉันหวังว่าจะมีคนเสนอวิธีที่จะระงับความคืบหน้าในการกิน RAM นี้
TOOGAM

ไม่มีอะไรใกล้คำตอบที่ OP คาดหวัง แต่จะตอบคำถามวรรณกรรม: เครื่องอึของฉันไม่สามารถใช้งานได้เมื่อฉันสร้างมัน - หยุดการสร้างบนเครื่องอึ
9ilsdx 9rvj 0lo

9

สร้างการแลกเปลี่ยนเพิ่มเติมสำหรับตัวคุณเอง

ต่อไปนี้จะเพิ่มการสลับ 8G:

dd if=/dev/zero of=/root/moreswap bs=1M count=8192
mkswap /root/moreswap
swapon /root/moreswap

มันจะยังช้า (คุณสลับ) แต่คุณไม่ควรจะหมด Linux เวอร์ชันทันสมัยสามารถสลับเป็นไฟล์ได้ เกี่ยวกับการใช้งานเฉพาะสำหรับพาร์ติชั่นสว็อปเท่านั้นในปัจจุบันคือการจำศีลแล็ปท็อป


1
ผมเคยใช้วิธีนี้มาใช้เป็นสคริปต์จริงที่นี่ มีประโยชน์มากสำหรับการเพิ่ม swap ในทันที
Sergiy Kolodyazhnyy

7
โดยทั่วไปการแลกเปลี่ยนบางอย่างนั้นฉลาด แต่การจัดสรรเงินจำนวนมากเพียงปล่อยให้เครื่องฟาดฟันมากขึ้นก่อนที่ OOM killer จะเข้ามาและเลือกอาสาสมัคร บทบาทเก่าแก่ของหัวแม่มือเกี่ยวกับ "การเพิ่มหน่วยความจำของคุณเป็นสองเท่า" นั้นตายไปนานแล้ว โดยส่วนตัวฉันไม่เห็นค่าใด ๆ ในการจัดสรรรวม swap มากกว่า ~ 1 GB
Criggie

5
ด้วย ext4 คุณสามารถfallocate -l 8G /root/moreswapแทนddเพื่อหลีกเลี่ยงไม่จำเป็นที่จะทำ 8GB ของ I / O ในขณะที่ระบบเป็นหวด สิ่งนี้ไม่ทำงานกับระบบไฟล์อื่น ๆ ไม่ใช่ XFS แน่นอนที่ swapon เห็นขอบเขตที่ไม่ได้เขียนไว้เป็นรู (ฉันเดาว่าการสนทนารายชื่ออีเมล xfsนี้ไม่ได้เลื่อนออกไป) ดูเพิ่มเติมswapddaemon ซึ่งสร้าง / ลบไฟล์ swap ได้ทันทีเพื่อประหยัดพื้นที่ดิสก์ นอกจากนี้askubuntu.com/questions/905668/…
Peter Cordes

1
@Criggie "โดยส่วนตัวฉันเห็นว่าไม่มีค่าในการจัดสรรรวมทั้งหมดมากกว่า 1 GB swap" - คุณพยายามสร้าง Firefox หรือไม่?
Dmitry Grigoryev

1
@Akiva ครั้งล่าสุดที่ฉันตรวจสอบแล้วการกำหนดค่าบิลด์ที่แนะนำคือ RAM ขนาด 16 GB ไฟล์ปฏิบัติการหลัก ( xul.dll) อยู่ที่ประมาณ 50 MB ดังนั้นจึงหนักกว่า Linux kernel ประมาณ 10 เท่า
Dmitry Grigoryev

5

วิธีหนึ่งในการรับ RAM ฟรีบนการแจ้งเตือนสั้น ๆ คือการใช้zramซึ่งสร้างดิสก์ RAM ที่บีบอัดและสลับที่นั่น ด้วยซีพียูที่เหมาะสมครึ่งตัวนี้เร็วกว่าการแลกเปลี่ยนปกติมากและอัตราการบีบอัดค่อนข้างสูงด้วย RAM ที่ทันสมัยเช่นเว็บเบราว์เซอร์

สมมติว่าคุณติดตั้งและกำหนดค่า zram แล้วสิ่งที่คุณต้องทำก็แค่เปิดใช้งาน

sudo service zramswap start

สิ่งนี้ใช้ได้กับระบบไฟล์ทั้งหมดเช่น btrfs หรือไม่
Akiva

1
@Akiva zram ไม่เคยสัมผัสดิสก์ดังนั้นฉันจะบอกว่าใช่;)
Dmitry Grigoryev

3

sudo swapoff -aจะปิดการใช้งานการสลับทำให้เคอร์เนลฆ่ากระบวนการโดยอัตโนมัติด้วยคะแนนสูงสุดหากระบบมีหน่วยความจำไม่เพียงพอ ฉันใช้สิ่งนี้หากฉันรู้ว่าฉันกำลังใช้งาน RAM ที่มีน้ำหนักมากซึ่งฉันควรจะฆ่าถ้ามันเกินการควบคุมมากกว่าปล่อยให้มันเปลี่ยนไปและติดอยู่ตลอดไป ใช้sudo swapon -aเพื่อเปิดใช้งานอีกครั้งในภายหลัง

หลังจากนั้นคุณอาจต้องการดูการตั้งค่าการสลับของคุณ ดูเหมือนว่า swap ของคุณจะอยู่ในดิสก์เดียวกับ root partition ซึ่งจะทำให้ระบบของคุณช้าลงเมื่อคุณกดปุ่ม swap ดังนั้นควรหลีกเลี่ยงถ้าคุณทำได้ ในความคิดของฉันระบบสมัยใหม่มักจะได้รับการกำหนดค่าด้วยการสลับมากเกินไป โดยปกติแล้ว 32GiB RAM จะหมายถึงการแลกเปลี่ยน 32GiB ถูกจัดสรรโดยค่าเริ่มต้นราวกับว่าคุณต้องการที่จะนำ 32GiB ไปสู่พื้นที่แลกเปลี่ยนของคุณ


โอ้ฉันเพิ่งเห็นว่ามีคนแสดงความคิดเห็นที่อยู่เหนือที่ใดที่หนึ่ง
sudo

3

อีกสิ่งหนึ่งที่สามารถทำได้คือเพิ่มแคชของหน้าหน่วยความจำผ่านคำสั่งนี้:

echo 3 | sudo tee /proc/sys/vm/drop_caches

จากเอกสารkernel.org (เน้นเพิ่ม):

drop_caches

การเขียนสิ่งนี้จะทำให้เคอร์เนลทำการลบแคชที่สะอาดรวมถึงวัตถุแผ่นพื้นที่เรียกคืนได้เช่นทันตกรรมและ inodes เมื่อลดลงหน่วยความจำของพวกเขาจะกลายเป็นฟรี

เมื่อต้องการเพิ่ม pagecache: echo 1> / proc / sys / vm / drop_caches เมื่อต้องการฟรีวัตถุพื้นที่สามารถเรียกคืนได้ (รวมถึง dentries และ inodes): echo 2> / proc / sys / vm / drop_caches เพื่อฟรีวัตถุพื้นและ pagecache: echo 3> / proc sys / / เมล์ / drop_caches

นี่คือการดำเนินการแบบไม่ทำลายและจะไม่ปล่อยวัตถุสกปรกใด ๆ เพื่อเพิ่มจำนวนของวัตถุที่เป็นอิสระจากการดำเนินการนี้ผู้ใช้อาจเรียกใช้ `ซิงค์ 'ก่อนที่จะเขียนไปยัง / proc / sys / vm / drop_caches วิธีนี้จะลดจำนวนวัตถุสกปรกในระบบและสร้างตัวเลือกเพิ่มเติมที่จะดร็อป


ที่น่าสนใจ ... สนใจที่จะอธิบายตรรกะคำสั่งนั้น?
Akiva

1
@Akiva โดยทั่วไปจะบอกให้เคอร์เนล Linux เพิ่ม RAM นี่ไม่ได้เป็นการกำจัดสาเหตุซึ่งกำลังฆ่ากระบวนการที่ละเมิดดังนั้นคำตอบของ Oli จึงเป็นวิธีการแก้ปัญหา การวางแคชจะป้องกันไม่ให้ระบบของคุณมีหน่วยความจำไม่เพียงพอดังนั้นจึงป้องกันการแช่แข็งจึงซื้อเวลาให้คุณทราบถึงปัญหาที่เกิดขึ้นจริง นี่อาจจะเร็วกว่าการสร้างไฟล์ swap โดยเฉพาะอย่างยิ่งถ้าคุณใช้ฮาร์ดไดรฟ์ไม่ใช่ SSD
Sergiy Kolodyazhnyy

7
แคชเป็นสิ่งแรกที่จะไปเมื่อคุณเติมหน่วยความจำดังนั้นฉันไม่คิดว่ามันจะช่วยได้มาก ที่จริงแล้วฉันไม่คิดว่าคำสั่งนี้มีการใช้งานจริงนอกเหนือจากการดีบักพฤติกรรมเคอร์เนลหรือการเพิ่มประสิทธิภาพการเข้าถึงดิสก์เวลา ฉันขอแนะนำอย่างนอบน้อมต่อการเรียกใช้คำสั่งนี้บนระบบใด ๆ ที่ต้องการประสิทธิภาพมากกว่า
คะแนน _ ต่ำกว่า

2
@Score_Under - "แคชเป็นสิ่งแรกที่จะไปเมื่อคุณเติมความทรงจำ" - /proc/sys/vm/swappinessดีที่ขึ้นอยู่กับการตั้งค่าของคุณ เมื่อตั้งค่า swappiness เป็น 0 ถือว่าถูกต้อง ด้วยการตั้งค่าเริ่มต้นที่ 60 คุณก็ใกล้แล้ว ด้วยการตั้งค่าเป็น 200 อย่างไรก็ตามมันจะเป็นเพจที่ใช้งานน้อยที่สุดเมื่อเร็ว ๆ นี้ของกระบวนการทำงานที่ลดลงก่อน ... ในกรณีนั้นคำสั่งนี้อาจมีประโยชน์ แต่การตั้งค่า swappiness เป็น 0 (หรือบางค่าต่ำอาจ 20 หรือ 30) จะเป็นวิธีทั่วไปที่ดีกว่า
จูลส์

3
@Score_Under คำสั่งนี้มีประโยชน์กับเมล็ดเก่าที่มีkswapdข้อบกพร่อง (บางคนถึงกับสร้าง cronjobs ด้วย) แต่คุณพูดถูกฉันสงสัยว่ามันจะช่วยได้หรือไม่
Dmitry Grigoryev

1

คุณพูดว่า "คอมไพล์ในพื้นหลัง" คุณกำลังทำอะไรอยู่เบื้องหน้า? หากคุณกำลังพัฒนาด้วย Eclipse หรือ IDE หนักของรีซอร์สอื่นให้ตรวจสอบว่าทุกอย่างถูกยกเลิกในคอนโซลอย่างถูกต้องหรือไม่

สภาพแวดล้อมการพัฒนามักจะอนุญาตให้เริ่มกระบวนการต่าง ๆ ภายใต้การพัฒนาสิ่งเหล่านี้อาจยังคงอยู่หลังจากที่คุณไม่สนใจพวกเขาอีกต่อไป (ในการดีบักเกอร์หรือเพิ่งเสร็จไม่เหมาะสม) หากนักพัฒนาไม่ใส่ใจกระบวนการที่ถูกลืมหลายสิบอาจสะสมในระหว่างวันโดยใช้หลายกิกะไบต์ด้วยกัน

ตรวจสอบว่าทุกสิ่งที่ควรยกเลิกใน IDE นั้นถูกยกเลิก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.