Score:11

Cached Memory ใช้หน่วยความจำทั้งหมด

ธง id

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

หน่วยความจำแคชของอูบุนตู

ดังที่คุณเห็นในภาพนี้ Ubuntu ใช้ RAM ของฉันมากกว่า 50% นอกจากนี้ ฉันใช้ 23.3% ของ 11.6 GiB ซึ่งโดยทั่วไปหมายความว่าระบบของฉันใช้หน่วยความจำมากกว่า 75-80%...

ตอนนี้ ฉันค้นหาหลายครั้งว่าจะล้างแคชได้อย่างไร และฉันก็พบสิ่งนั้น ซิงค์; เสียงสะท้อน 1 > /proc/sys/vm/drop_caches คำสั่งที่มีสิทธิ์ sudo สามารถล้างได้ แต่คำสั่งนี้ใช้ได้เฉพาะในตอนเริ่มต้น เช่นเมื่อฉันใช้คำสั่งนี้และเห็นว่าแคชของฉันถูกลดลงอย่างมาก แต่ตอนนี้ เมื่อฉันเห็นหน่วยความจำแคชของฉันหลังจากรันสิ่งนี้ มันยังคงเหมือนเดิม

ใครสามารถช่วยฉันแก้ปัญหานี้ได้บ้าง

ป.ล. ฉันคิดว่าถ้าฉันลองอัปเกรด RAM นั่นจะไม่ช่วยแก้ปัญหานี้...

in flag
นี่ไม่ใช่ปัญหา นี่คือการออกแบบ ทำไมต้องมี RAM ถ้าคุณไม่ได้ใช้งาน เมื่อระบบต้องการหน่วยความจำเพื่อวัตถุประสงค์อื่น เช่น แอปพลิเคชัน และอื่นๆ แคชจะถูกสับเพื่อสลับหรือลบออกจากหน่วยความจำเพื่อรองรับความต้องการในทันที มิฉะนั้นระบบจะทำสิ่งที่ต้องการอย่างรวดเร็วและตอบสนอง นี่เป็นหนึ่งในประโยชน์หลักของ Linux เหนือระบบปฏิบัติการอื่น เช่น Windows
Labham Jain avatar
id flag
ฉันไม่มีปัญหาในการเก็บ cached memory ฉันแค่ต้องการให้มันอยู่ในขอบเขตจำกัด... เพราะถ้าระบบใช้พื้นที่ทั้งหมดในการแคช ฉันก็จะไม่สามารถใช้ ram ได้... ตอนนี้ เนื่องจากปัญหาหน่วยความจำแคช Chrome ของฉันแสดงข้อผิดพลาด SIGSEV ให้ฉัน และ AVD ก็แย่เสมอ
guiverc avatar
cn flag
หากโปรแกรมของคุณเรียก `malloc()` (การจัดสรรหน่วยความจำ) และไม่มี RAM ว่าง ดังนั้น RAM ที่แคชไว้จะถูกจัดสรร แคชส่วนนั้นจะหายไป... ฉันไม่เห็นว่าข้อจำกัดจะช่วยปัญหาของคุณได้อย่างไร คุณอาจโฟกัสผิดประเด็น.. (*ความคิดเห็น* ฉันไม่รู้รหัสและการอ่านหนังสือ *linux kernel workings* เมื่อนานมาแล้ว)
Artur Meinild avatar
vn flag
นี่ไม่ใช่ปัญหา คุณเข้าใจผิดแล้ว ระบบไม่ได้ใช้หน่วยความจำใด ๆ สำหรับแคชที่จะใช้สำหรับแอปพลิเคชัน คุณคิดว่านี่เป็นปัญหา ทั้งที่ในความเป็นจริงมันไม่ใช่
us flag
ไม่เกี่ยวข้องกับคำถาม: เนื่องจากคุณมี RAM จำนวนมาก ให้พิจารณาเปลี่ยนไปใช้ ZRam แทนการแลกเปลี่ยนตาม HDD
ru flag
นี่เป็นปกติ. ตัวอย่างเช่น RAM แคชของระบบไดรเวอร์รายวัน 32GB ของฉันคือ 7.6GiB จาก ~ 31GiB ที่ใช้งานได้ ระบบใช้งาน RAM 7GB อยู่ ด้วยแคช คุณจะคิดว่าฉันใช้ RAM ขนาด 14.6GB ทั้งที่จริงๆ แล้วฉันใช้ RAM เพียง 7GB เท่านั้น RAM ขนาด 7.6GB จะถูกปล่อยออกมาหากจำเป็น มิฉะนั้นจะถูกเก็บไว้เพื่อ 'เพิ่มความเร็ว' สิ่งต่างๆ ในดิสก์ แคช ฯลฯ เท่านั้น RAM ที่แคชไว้จะถูกเก็บไว้จนกว่าจะจำเป็น และจะถูกปล่อยออกมาทันทีเมื่อจำเป็น ซึ่งจริงๆ แล้วจะไม่ส่งผลกระทบต่อหน่วยความจำของคุณ *การใช้งาน* แต่อย่างใด
cn flag
@LabhamJain ฟังตัวเอง ระบบกำลัง *ใช้* หน่วยความจำ คุณต้องการให้ *ไม่ใช้* หน่วยความจำ และเหตุผลของคุณคือหากระบบใช้หน่วยความจำ "จะไม่สามารถใช้แรมได้" ที่ไม่สมเหตุสมผล คุณต้องการให้ระบบสามารถใช้ RAM ได้ ระบบ *กำลัง* ใช้ RAM ซึ่งพิสูจน์ว่าระบบ *คือ* ใช้งานได้
gf flag
SIGSEV เป็นผลมาจากข้อผิดพลาดของโปรแกรมเมอร์ ไม่เกี่ยวกับจำนวน RAM ที่มีอยู่หรือไม่ AVD แย่เสมอเมื่อมันจำลองคำสั่งแขนบน x86 CPU
cn flag
@matigo: Windows ยังใช้หน่วยความจำ "ไม่ได้ใช้" เพื่อแคชสิ่งต่าง ๆ แต่ _most_ ของ UI นั้นซ่อนสิ่งนี้จากผู้ใช้เพื่อไม่ให้สับสนและตื่นตระหนก
Labham Jain avatar
id flag
@OrangeDog มันเป็นปัญหาจริง ๆ ที่เกิดขึ้นเมื่อ Chrome ออกจากการเข้าถึงหน่วยความจำ ... ดังนั้นสิ่งที่ฉันหมายถึงโดยหน่วยความจำแคชก็คือระบบของฉันใช้ RAM ส่วนใหญ่ในแคชดังนั้นในทางเทคนิคแล้วฉันจะสามารถใช้หน่วยความจำว่างเท่านั้นเช่น รวม 11 gb - แคชไว้ 6 gb ดังนั้นฉันสามารถใช้ได้สูงสุด 5 กิกะไบต์ ...
gf flag
@LabhamJain ตามที่อธิบายซ้ำแล้วซ้ำอีกนั่นผิด
fk flag
https://www.linuxatemyram.com/ ram ที่ไม่ได้ใช้คือ ram ที่สูญเปล่า หากบางสิ่งต้องการหน่วยความจำนั้น Linux จะเลิกใช้สิ่งที่มันใช้ในตอนนี้ ดังนั้นจึงไม่มีปัญหาจริง
Ruslan avatar
bv flag
เมื่อคุณพูดถึง SIGSEGV ดูเหมือนว่าจะเป็น [ปัญหา XY](https://xyproblem.info)
nulldev avatar
cn flag
โปรดทราบว่าหน่วยความจำแคชไม่ได้หมายถึงหน่วยความจำที่สามารถทิ้งได้เสมอไปเมื่อต้องการ RAM มากขึ้น ตัวอย่างเช่น ข้อมูลใน `tmpfs` จะแสดงเป็น "cached memory" อย่างไรก็ตาม System Monitor จะแสดงหน่วยความจำประเภทนี้ทั้งแบบแคชและกำลังใช้งาน (ดังนั้นหน่วยความจำจะอยู่ในส่วนที่เป็นสีของแผนภูมิวงกลม) [สิ่งนี้กัดฉันมาก่อน](https://askubuntu.com/questions/762717/high-shmem-memory-usage)
eckes avatar
cn flag
นอกจากนี้ Windows ยังมีแคชอีกด้วย ซึ่งมีความเข้มงวดน้อยกว่าเล็กน้อย @มาติโก
fr flag
https://www.linuxatemyram.com - นี่คือคลาสสิก ;)
eckes avatar
cn flag
@OrangeDog ใช่ แต่ - เนื่องจาก malloc ที่ล้มเหลวส่งคืนค่า null จึงเป็นเรื่องปกติมากที่โปรแกรมจะขัดข้องกับ SEGV หากหน่วยความจำเสมือนหมดและไม่มีการตรวจสอบการส่งคืนที่เหมาะสม ดังนั้นจึงมีความสัมพันธ์ที่แข็งแกร่ง ตัวอย่างเช่น รหัส ZIp ใน รันไทม์ Java มีปัญหานั้นมาหลายปี
marcelm avatar
cn flag
@eckes `malloc()` บน Linux โดยพื้นฐานแล้ว [ไม่ส่งคืน NULL] (https://stackoverflow.com/questions/16674370) ดังนั้นจึงเป็นที่สงสัย
Score:26
ธง bo

หากระบบใช้พื้นที่ทั้งหมดในการแคช ฉันจะไม่สามารถใช้แรมได้

นี่ไม่เป็นความจริง. RAM ที่แคชไว้ไม่ได้กำหนด RAM ที่ใช้งานอยู่ คุณ จะ สามารถใช้ RAM ได้ นั่นจึงเรียกว่าแคช â สามารถใช้และทิ้งได้ตามต้องการ ในความเป็นจริงมันตรงกันข้ามกับสมมติฐานของคุณ หากคุณกำจัด RAM ที่แคชไว้ คุณจะไม่สามารถใช้สิ่งที่แคชไว้ได้

ตอนนี้ ฉันค้นหาหลายครั้งว่าฉันจะล้างแคชได้อย่างไร ฉันพบการซิงค์นั้นแล้ว echo 1 > /proc/sys/vm/drop_caches คำสั่งที่มีสิทธิ์ sudo สามารถล้างมันได้ แต่คำสั่งนี้ใช้ได้เฉพาะตอนเริ่มต้นเหมือนตอนที่ฉันใช้คำสั่งนี้และเห็นว่าแคชของฉันลดลงอย่างมาก แต่ตอนนี้ เมื่อฉันเห็นหน่วยความจำแคชของฉันหลังจากรันสิ่งนี้ มันยังคงเหมือนเดิม

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

อูบุนตูไม่พังเมื่อโหลด RAM จำนวนมาก ซึ่งแตกต่างจาก Windows เนื่องจากความแตกต่างในการจัดการหน่วยความจำ การปิดใช้งานคุณสมบัติเหล่านี้จะลดประสิทธิภาพลงอย่างมาก

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

mchid avatar
bo flag
หากคุณต้องการเพิ่มประสิทธิภาพของระบบ สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือเปลี่ยนไปใช้ไดรฟ์โซลิดสเทตแทนฮาร์ดดิสก์ไดรฟ์
mchid avatar
bo flag
โดยส่วนตัวแล้ว ฉันเปลี่ยนมาใช้ SSD และเพิ่มความรวดเร็วเป็น 70 เพื่อให้ได้ประสิทธิภาพที่ดีขึ้นบน RAM ขนาด 5GB เนื่องจากคุณมี 11GB ความรวดเร็วจะส่งผลต่อประสิทธิภาพของระบบเพียงเล็กน้อย เว้นแต่ว่าระบบจะล่ม ในกรณีนี้ ความรวดเร็วควรเพิ่มประสิทธิภาพ ไม่ใช่ลดลง
in flag
@MooingDuck: ทำไมคุณถึงคิดว่า Linux ปิดใช้งานการแลกเปลี่ยนโดยค่าเริ่มต้น ฉันคิดว่า Ubuntu สร้างพาร์ติชัน swap ในระหว่างการติดตั้งเริ่มต้น - แน่นอน คุณสามารถยืนยันได้ว่าไม่มี swap ถ้าคุณต้องการนอกจากนี้ "แครช" คือเมื่อระบบไม่ตอบสนองหรือรีบูต ซึ่งแตกต่างอย่างมากกับสิ่งที่ลีนุกซ์ทำในสถานการณ์หน่วยความจำไม่เพียงพอ (กำหนดหยุดกระบวนการเพื่อเพิ่มหน่วยความจำ)
Ruslan avatar
bv flag
มันไม่ยุติธรรมเลยที่จะบอกว่า Ubuntu ไม่มีปัญหากับ RAM ที่โอเวอร์โหลด การฆ่าเซิร์ฟเวอร์ X ของคุณด้วย OOM นั้นแย่พอๆ กับประสบการณ์การใช้งานเดสก์ท็อป เช่นเดียวกับการล็อคหรือการตื่นตระหนกของเคอร์เนล จริงอยู่ ทุกวันนี้หายากเพราะการปรับคะแนน OOM ที่ทำโดย distros สมัยใหม่ไปยังกระบวนการที่สำคัญ แต่ฉันเคยประสบกับสิ่งนี้บ่อยครั้งเมื่อประมาณ 5 ปีที่แล้ว
terdon avatar
cn flag
แน่นอน Linux (รวมถึง Ubuntu) อาจมีปัญหากับ RAM ที่โอเวอร์โหลด มันยากกว่าที่จะไปถึงจุดนั้นเพราะวิธีการจัดการหน่วยความจำ แต่ก็ไม่ใช่ว่าจะเป็นไปไม่ได้ หากคุณใช้ RAM จนหมดจริง ๆ ระบบจะเริ่มสลับและถ้าคุณเติมด้วย มันจะไม่ตอบสนองและพังในที่สุด (สมมุติว่า เรามักจะบังคับให้รีบูตเมื่อสิ่งนี้เกิดขึ้น)
cn flag
@terdon ฉันหมายความว่ามันจะไม่พัง มี OOM killer สำหรับสถานการณ์แบบนั้น ขึ้นอยู่กับสิ่งที่คุณหมายถึงภายใต้ "ความผิดพลาด" แน่นอน แต่เคอร์เนลก็ใช้ได้ กระบวนการอื่น ๆ - ขึ้นอยู่กับ
mchid avatar
bo flag
@terdon ใช่ ฉันมีระบบล็อคอยู่บ่อยครั้งในคอมพิวเตอร์เครื่องเก่าจริงๆ (มี RAM เพียง 1.5GB) แต่นั่นเป็นเพราะพาร์ติชั่น swap ของฉันเล็กเกินไปและ HDD ทำงานช้ามาก หลังจากเพิ่มขนาดของพาร์ติชั่น swap (และความรวดเร็วจาก 10 สำรองเป็น 60) ระบบก็ช้าแต่ไม่ตอบสนอง
Score:21
ธง tr

หน่วยความจำแคชในความเป็นจริงหน่วยความจำฟรี

มันสามารถ (และจะ) ถูกฟีดฟรีสำหรับกระบวนการใดๆ ที่ขอหน่วยความจำ ทันทีที่หน่วยความจำว่างอื่นๆ ถูกใช้หมด

ในระหว่างนี้ เคอร์เนลจะติดตามว่าข้อมูลใดถูกแคชไว้ในหน่วยความจำว่างนี้

ข้อมูลนี้ไม่คาดว่าจะเขียนที่ไหนสักแห่งโดย i/o ที่ใช้เวลานาน มันถูกเขียนหรืออ่านแล้วและไม่เคยเปลี่ยนแปลงตั้งแต่แรก ข้อมูลนี้สามารถลบออกจากหน่วยความจำได้อย่างปลอดภัย (และรวดเร็ว)

Score:15

การแคชไม่ทำร้ายคุณ แต่อย่างใด!

แรมไม่ได้เป็น ใช้แล้ว โดยแคช...กำลังเป็นอยู่ ยืม โดยแคช! ซึ่งหมายความว่าจะถูกส่งคืนให้คุณใช้งานได้ทันทีที่คุณต้องการ

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

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

Labham Jain avatar
id flag
สิ่งนี้ดูเหมือนจะไม่เป็นความจริง ฉันลองใช้ android emulator แต่เมื่อ ram ของฉันเต็มไปด้วยแคช 4gb มันหยุดระบบของฉันแทนที่จะลบแคชนั้น...
terdon avatar
cn flag
@LabhamJain ดูเหมือนว่าคุณใช้ RAM _and_ swap หมดแล้ว ดิสก์แคชไม่ใช่ปัญหาของคุณ
Harper - Reinstate Monica avatar
ปัญหาแคชของ @LabhamJain ไม่ได้ทำให้ระบบของคุณค้าง ดังนั้นฉันคิดว่า "แคช" เป็นปลาเฮอริ่งแดง และคุณมีปัญหาที่แตกต่างไปจากเดิมอย่างสิ้นเชิง... สิ่งนี้เกิดขึ้นตลอดเวลาที่นี่ เรียกว่า "ปัญหา XY"...
mchid avatar
bo flag
@LabhamJain ฉันเคยประสบปัญหาดิสก์ thrashing ในคอมพิวเตอร์เครื่องเก่า และกลายเป็นว่าฉันต้องเพิ่มขนาดของพาร์ติชัน swap ของฉัน ระบบพยายามสลับเป็น swapspace ที่ไม่มีอยู่จริง นอกจากนี้ ฉันมีอาการแฮงค์ชั่วคราวเนื่องจากฮาร์ดไดรฟ์ทำงานช้า วิธีแก้ไขคือเปลี่ยนไปใช้ SSD
Score:10
ธง cn
raj

เปิดเทอร์มินัลของคุณ (Ctrl+Alt+T) แล้วพิมพ์คำสั่ง: ฟรี -h. คุณจะได้ผลลัพธ์ดังนี้:

              รวมใช้บัฟ/แคชที่ใช้ร่วมกันฟรี
หน่วยความจำ: 15Gi 2.0Gi 10Gi 33Mi 2.7Gi 13Gi
สลับ: 31Gi 0B 31Gi

ที่นี่คุณมี RAM ทั้งหมด 15G, ใช้ 2G, แคช 2,7G และ 10G แสดงเป็น "ฟรี" แต่ดูที่คอลัมน์สุดท้าย: มันแสดง 13G ว่า "ว่าง" นั่นก็หมายความว่าคุณ สามารถใช้ RAM 13G (นั่นคือผลรวมของแคช+ฟรี) แม้จะแสดงเพียง 10G ว่า "ฟรี" ตามที่คำตอบอื่น ๆ ชี้ให้เห็น หน่วยความจำแคชคือ ชั่วคราว: ถูกกำหนดให้กับแอปพลิเคชันหากจำเป็น เหมือนกับหน่วยความจำ "ว่าง" ไม่มีความแตกต่างระหว่างสองคนนี้เกี่ยวกับเรื่องนี้

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

Score:3

ยินดีต้อนรับสู่ GNU/Linux เพื่อน!

ในโลกนี้ เคอร์เนลของเราจะไม่เสีย RAM และเราไม่ต้องกังวลว่า RAM จะถูก 'ใช้งาน' เว้นแต่ว่าจะมีแอปพลิเคชันที่ต่อสู้กับแอปพลิเคชันอื่นเพื่อมัน

สิ่งที่คุณอธิบายเป็นเรื่องปกติ

100% ของ ram จะถูกใช้งานบนระบบ GNU/Linux แอปพลิเคชัน ram ใดที่ไม่ต้องการจะถูกใช้โดยการแคชดิสก์ คุณอยากให้การทำงานของดิสก์ทำงานด้วยความเร็วของ RAM มากกว่าที่ความเร็วของฮาร์ดดิสก์ของคุณหรือไม่ คุณได้รับตอนนี้ฟรี สนุกและไม่ต้องกังวลเมื่อคุณเห็นหน่วยความจำถูกใช้งานโดยการแคช

Score:3
ธง cn

RAM เปล่าที่ใช้เป็นแคชสำหรับ ssd ของคุณนั้นออกแบบมาเพื่อเพิ่มความเร็วคอมพิวเตอร์ของคุณ หากคุณต้องการล้างแคชทุกๆ x นาที คุณสามารถตั้งค่ารายการ crontab เพื่อล้างแคชได้

Labham Jain avatar
id flag
ฉันไม่ได้ต้องการ ฉันแค่ต้องการจำกัดการแคชหน่วยความจำของฉัน...
Boann avatar
cn flag
@LabhamJain ไม่คุณไม่ทำ
Score:0
ธง id

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

Score:0
ธง br

กรุณาตรวจสอบลิงค์นี้ https://www.linuxatemyram.com/ผู้เขียนอธิบายว่าสิ่งที่คุณเห็นไม่ใช่สิ่งที่คุณคิดว่ากำลังเกิดขึ้น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา