คำถามติดแท็ก out-of-memory

1
OOM killer ตัดสินใจอย่างไรว่ากระบวนการใดจะต้องฆ่าก่อน
นี้คำตอบที่อธิบายการดำเนินการโดย kernel เมื่อสถานการณ์ OOM sysctl vm.overcommit_memoryจะพบขึ้นอยู่กับมูลค่าของ เมื่อovercommit_memoryตั้งค่าเป็น 0 หรือ 1 overcommitจะเปิดใช้งานและโปรแกรมได้รับอนุญาตให้จัดสรรหน่วยความจำได้มากกว่าที่มีจริง ๆ ตอนนี้เกิดอะไรขึ้นเมื่อเรามีหน่วยความจำไม่เพียงพอในสถานการณ์นี้ อย่างไรฆาตกร OOMตัดสินใจว่าขั้นตอนการฆ่าครั้งแรก?

2
ดีบักหน่วยความจำไม่เพียงพอด้วย / var / log / messages
รายงานต่อไปนี้จะถูกโยนลงในบันทึกข้อความของฉัน: kernel: Out of memory: Kill process 9163 (mysqld) score 511 or sacrifice child kernel: Killed process 9163, UID 27, (mysqld) total-vm:2457368kB, anon-rss:816780kB, file-rss:4kB ไม่สำคัญว่าถ้าปัญหานี้คือสำหรับhttpd, mysqldหรือpostfixแต่ผมอยากรู้ว่าฉันสามารถดำเนินการต่อการแก้จุดบกพร่องปัญหา ฉันจะรับข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่ทำให้ PID 9163 ถูกฆ่าได้อย่างไรและฉันไม่แน่ใจว่า linux เก็บประวัติของ PID ที่ถูกยกเลิกที่ไหนสักแห่งหรือไม่ หากสิ่งนี้เกิดขึ้นในไฟล์บันทึกข้อความของคุณคุณจะแก้ไขปัญหานี้ทีละขั้นตอนได้อย่างไร # free -m total used free shared buffers cached Mem: 1655 934 721 0 10 …

4
การดีบักการใช้งาน CPU / หน่วยความจำสูง (ใกล้เคียง) ของแอปพลิเคชัน“ เนื้อหาเว็บ” บน Linux Mint
ฉันมี Linux Mint ติดตั้งอยู่ในคอมพิวเตอร์ 3 เครื่องที่บ้านและทั้งหมดนั้นเกือบจะช้าอย่างไม่น่าเชื่อเมื่อเปิด Firefox นี่คือผลลัพธ์จากด้านบน : อย่างที่คุณเห็น "เนื้อหาเว็บ" และ Firefox นั้นใช้งาน CPU ของฉันเกือบทั้งหมดและหน่วยความจำระบบมากกว่า 50% (4GB +) ฉันไม่เคยมีปัญหานี้ในอดีตกับ Debian หรือ Ubuntu แต่มันเกิดขึ้นกับคอมพิวเตอร์ทุกเครื่องที่ฉันได้ติดตั้ง Mint ไปแล้ว การใช้งานซีพียู / หน่วยความจำสูงมาก (ใกล้เคียง) นี้คงที่และทำให้คอมพิวเตอร์ของฉันไม่สามารถใช้งานได้ ไม่มีใครมีความคิดเกี่ยวกับวิธีการแก้ไขปัญหานี้หรือไม่ หากไม่มีการแก้ไขฉันจะป้องกันไม่ให้แอปพลิเคชัน "เนื้อหาเว็บ" นี้ทำงานได้อย่างไร?

2
OOM killer ทำงานไม่ถูกต้องนำไปสู่ระบบปฏิบัติการที่ตรึงไว้
เป็นเวลาหลายปีที่นักฆ่า OOMของระบบปฏิบัติการของฉันทำงานไม่ถูกต้องและนำไปสู่ระบบที่หยุดชะงัก เมื่อการใช้หน่วยความจำสูงมากทั้งระบบมีแนวโน้มที่จะ "หยุด" (อันที่จริง: ช้ามาก ) เป็นเวลาหลายชั่วโมงหรือหลายวันแทนที่จะฆ่ากระบวนการเพื่อเพิ่มหน่วยความจำ จำนวนสูงสุดที่ฉันบันทึกไว้คือ 7 วันก่อนลาออกเพื่อทำการรีเซ็ต เมื่อ OOM ใกล้จะถึงแล้วiowaitนั้นสูงมาก (~ 70%) ก่อนที่จะกลายเป็นจำนวนที่ไม่สามารถวัดได้ เครื่องมือ: iotopแสดงให้เห็นว่าทุกโปรแกรมกำลังอ่านที่ปริมาณงานสูงมาก (ต่อสิบ MB / วินาที) จากฮาร์ดไดรฟ์ของฉัน โปรแกรมเหล่านั้นกำลังอ่านอะไร - ลำดับชั้นไดเรกทอรี? - รหัสปฏิบัติการเอง? ฉันไม่ได้ตอนนี้ [แก้ไข] ในเวลาที่ฉันเขียนข้อความนี้ (ในปี 2560) ฉันใช้ ArchLinux uptodate (4.9.27-1-lts) แต่เคยประสบปัญหานี้มาหลายปีแล้ว ฉันประสบปัญหาเดียวกันกับลีนุกซ์รุ่นต่างๆและการตั้งค่าฮาร์ดแวร์ที่แตกต่างกัน ปัจจุบัน (2019) ฉันใช้ Debian 9.6 (4.9.0) uptodate ฉันมีRAM จริง16 GB …

3
ข้อความ Out of Memory คืออะไร: เสียสละเด็ก?
เมื่อเร็ว ๆ นี้คอมพิวเตอร์ของฉันมีหน่วยความจำไม่เพียงพอ (เป็นผลมาจากการรวบรวมซอฟต์แวร์ในขณะที่ทำงานกับชุดข้อมูล GIS ขนาดใหญ่) ในบันทึกระบบรายละเอียดวิธีจัดการกับเงื่อนไข OOM เป็นบรรทัดต่อไปนี้: Out of memory: Kill process 7429 (java) score 259 or sacrifice child นั่นคือสิ่งที่or sacrifice childเกี่ยวกับ? แน่นอนมันไม่ได้ไตร่ตรองพิธีกรรมที่มืดเพื่อให้สิ่งต่าง ๆ ดำเนินต่อไป?

1
ผิดหรือเปล่าที่คิดว่า“ memfd” เป็น“ กระบวนการที่เป็นเจ้าของไฟล์”
https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/ ในทางทฤษฎีคุณสามารถบรรลุ [ memfd_create()] พฤติกรรมโดยไม่ต้องแนะนำ syscalls ใหม่เช่นนี้ int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU); (หมายเหตุเพื่อรับประกัน tmpfs มากขึ้นที่นี่เราสามารถใช้ " /dev/shm" แทน " /tmp") ดังนั้นคำถามที่สำคัญที่สุดคือทำไมเราถึงต้องการวิธีที่สาม? [ ... ] หน่วยความจำสำรองจะถูกประมวลผลโดยกระบวนการที่เป็นเจ้าของไฟล์และไม่อยู่ภายใต้การเมาต์โควต้า ฉันคิดถูกแล้วว่าส่วนแรกของประโยคนี้ไม่สามารถพึ่งพาได้ รหัสmemfd_create () มีการใช้งานอย่างแท้จริงว่าเป็น " ไฟล์ที่ไม่เชื่อมโยงอยู่ใน [a] tmpfs ซึ่งต้องเป็นเคอร์เนลภายใน " การติดตามรหัสฉันเข้าใจว่ามันไม่ได้มีการใช้การตรวจสอบ LSM แตกต่างกันนอกจากนี้ memfds ยังถูกสร้างขึ้นเพื่อรองรับ "แมวน้ำ" เนื่องจากโพสต์บล็อกอธิบายต่อไป อย่างไรก็ตามฉันสงสัยอย่างมากว่า memfds มีสัดส่วนแตกต่างจาก …

9
ปัญหาหน่วยความจำเมื่อบีบอัดและถ่ายโอนไฟล์ขนาดเล็กจำนวนมาก (รวม 1TB)
ฉันมี 5 ล้านไฟล์ซึ่งใช้พื้นที่จัดเก็บประมาณ 1TB ฉันต้องการถ่ายโอนไฟล์เหล่านี้ไปยังบุคคลที่สาม วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? ฉันได้ลองลดขนาดโดยใช้. tar.gz แต่ถึงแม้ว่าคอมพิวเตอร์ของฉันมี 8GB RAM ฉันได้รับข้อผิดพลาด "ออกจากระบบหน่วยความจำ" วิธีที่ดีที่สุดในการหอยทากไฟล์ทางไปรษณีย์คืออะไร?

2
การใช้หน่วยความจำ httpd
มีปัญหากับhttpd( Apache/2.2.29) การใช้หน่วยความจำ เมื่อเวลาผ่านไปการใช้หน่วยความจำในhttpdกระบวนการจะเพิ่มขึ้นจนกว่าจะถึง 100% ครั้งสุดท้ายที่ฉันเริ่มต้นใหม่httpdประมาณ 24 ชั่วโมงที่ผ่านมา ผลลัพธ์จากfree -mคือ: [ec2-user@www ~]$ free -m total used free shared buffers cached Mem: 1655 1415 239 0 202 424 -/+ buffers/cache: 788 866 Swap: 1023 4 1019 เพื่อพิสูจน์ว่ามันแน่นอนhttpdฉันเริ่มต้นใหม่httpdและวิ่งfree -mอีกครั้ง: [ec2-user@www ~]$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: …

2
`ทำให้ -j '(ไม่มีข้อโต้แย้ง) เป็นอันตรายหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ก่อนหน้านี้ในวันนี้เมื่อมีการสร้างสิ่งที่ฉันตัดสินใจที่จะทำงานmakeเป็น $ make -j บางทีอาจจะออกมาจากนิสัยกับโปรแกรมอื่น ๆ เช่นcabalที่-jเริ่มต้นที่วงเงินที่เหมาะสม ประมาณ 20 วินาทีต่อมาสก์ท็อปของฉันทั้งหมด grinds ต้องหยุดชะงัก ฉันมองหาสัญญาณต่าง ๆ ของกิจกรรม ไม่มีแฟน ๆ ปั่น ไฟ HDD เป็นสีเขียวค้าง แต่ฉันไม่ได้ยินการทำงานของดิสก์ hmmmmm หลังจากเงียบไป 10 นาทีในที่สุดฉันก็เห็นการตอบรับของปุ่มกดแรกที่ฉันทำเมื่อหลายปีก่อนและฉันก็เริ่มได้ยินเสียงที่คุ้นเคยของดิสก์อย่างรุนแรง 20 นาทีต่อมาเมื่อฉันพยายามที่จะลุยเข้าไปในอาคารที่ไม่ตอบสนองฉันก็เลยยุบและใช้ REISUB ตอนแรกฉันคิดว่าแอปพลิเคชันเดสก์ท็อปที่ไม่เกี่ยวข้องจะต้องเป็นผู้ร้ายเพราะฉันมีหน่วยความจำที่ จำกัด ในเซสชันทุบตีแบบโต้ตอบเพื่อป้องกันไม่ให้ฉันใส่ตัวเองลงในสถานการณ์เช่นนี้! แต่/var/log/syslogบอกเล่าเรื่องราวที่แตกต่าง; นักฆ่า OOM ทิ้งบางส่วนpsทิ้งซึ่งมีพิรุธเต็มไปด้วยc++และcc1plusกระบวนการ! นี่คือการวิเคราะห์ความถี่ของการทิ้งหนึ่งในนั้น: Command Number of appearances 'sh' 322 …

2
ขีด จำกัด หน่วยความจำของเคอร์เนล Linux
ฉันมีปัญหาที่น่างง ฉันมีห้องสมุดที่ใช้sgสำหรับการดำเนินการ CDB ที่กำหนดเอง มีคู่ของระบบที่เป็นประจำมีปัญหาเกี่ยวกับการจัดสรรหน่วยความจำมีSG โดยปกติแล้วSGคนขับมีขีด จำกัด หนักประมาณ 4MB แต่ที่เราเห็นบนระบบไม่กี่เหล่านี้ด้วย ~ คำขอ 2.3mb นั่นคือ CDBs กำลังเตรียมที่จะจัดสรรสำหรับการถ่ายโอน 2.3mb ไม่ควรมีปัญหาใด ๆ ที่นี่: 2.3 <4.0 ทีนี้รายละเอียดของตัวเครื่อง มันเป็นซีพียู 64 บิต แต่รัน CentOS 6.0 32- บิต (ฉันไม่ได้สร้างพวกเขาหรือฉันไม่มีส่วนเกี่ยวข้องกับการตัดสินใจนี้) เคอร์เนลเวอร์ชันสำหรับ CentOS distro นี้คือ 2.6.32 พวกเขามี RAM 16gb นี่คือลักษณะการใช้หน่วยความจำในระบบ (แต่เนื่องจากข้อผิดพลาดนี้เกิดขึ้นในระหว่างการทดสอบอัตโนมัติฉันยังไม่ได้ตรวจสอบหากสิ่งนี้สะท้อนถึงสถานะเมื่อ errno นี้ส่งคืนจากsg ) top - 00:54:46 up 5 …

1
เหตุใด OOM-Killer จึงไม่สามารถฆ่ากระบวนการที่ขอมากเกินไปได้
มีการอธิบายที่นี่ว่า OOM-Killer สามารถกำหนดค่าผ่านทางovercommit_memoryและ: 2 = ไม่มี overcommit การจัดสรรล้มเหลวหากถามมากเกินไป 0, 1 = overcommit (heuristically หรือเสมอ) ฆ่ากระบวนการบางอย่างโดยยึดตามฮิวริสติกเมื่อเข้าถึงหน่วยความจำมากเกินไป ตอนนี้ฉันอาจเข้าใจผิดทั้งหมด แต่ทำไมไม่มีตัวเลือก (หรือทำไมจึงไม่เป็นค่าเริ่มต้น) เพื่อฆ่ากระบวนการที่พยายามเข้าถึงหน่วยความจำที่จัดสรรมากเกินไป

3
วิธีการตั้งค่าการปรับ OOM killer สำหรับ daemons อย่างถาวร
ใช้เซิร์ฟเวอร์ Linux บางตัวที่มี daemons บริการระบบเพียงครั้งเดียวหรือเพียงไม่กี่ตัวฉันต้องการปรับ OOM killer สำหรับกระบวนการ daemonized เหล่านั้นในกรณีที่มีสิ่งผิดปกติเกิดขึ้น ตัวอย่างเช่นวันนี้เซิร์ฟเวอร์ Ubuntu บางตัวที่ใช้งาน MySQL ได้ถูกทำลายไปแล้วเพราะมีapt-checkerกระบวนการมากมายที่ต้องใช้หน่วยความจำทั้งหมดและเคอร์เนลคิดว่าเป็นความคิดที่ดีที่จะฆ่า MySQL ฉันรู้ว่าฉันสามารถปรับคะแนนโดยใช้/proc/$(pidof mysqld)/oom_score_adjไฟล์เพื่อให้เคอร์เนลเบาะแสบางอย่างที่ฉันไม่ต้องการให้ MySQL ถูกฆ่า แต่นั่นก็ไม่รอดการรีสตาร์ทบริการ ฉันควรแก้ไขสคริปต์ init / upstart จากแพ็คเกจเพื่อรวมการปรับเปลี่ยนเหล่านี้หรือไม่ ฉันไม่คิดว่ามันเป็นทางออกที่หรูหรามากเพราะฉันจะทำการปรับเปลี่ยนไฟล์ที่เป็นของแพ็คเกจ เป็นไปได้ไหมที่จะขอใช้งานสคริปต์เริ่มต้น / เริ่มต้นโดยทั่วไปและปรับตามเงื่อนไข หรือคุณอยากแนะนำให้ใช้สคริปต์ที่ไม่มีกำหนดเช่นนี้while true{ adjust_oom(); sleep 60;}?

2
รับสัญญาณก่อนที่กระบวนการจะถูกฆ่าโดย OOM killer / cgroups
ในกลุ่มของเราเรากำลัง จำกัด ทรัพยากรกระบวนการของเราเช่นหน่วยความจำ ( memory.limit_in_bytes) ฉันคิดว่าในท้ายที่สุดแล้วมันก็จัดการผ่าน OOM killer ในเคอร์เนลลินุกซ์ (ดูเหมือนว่าโดยการอ่านซอร์สโค้ด ) มีวิธีรับสัญญาณก่อนที่กระบวนการของฉันจะถูกฆ่าหรือไม่? (เช่นเดียวกับ-notifyตัวเลือกสำหรับSGEqsubซึ่งจะส่งSIGUSR1ก่อนที่กระบวนการจะถูกฆ่า) ฉันอ่านเกี่ยวกับ/dev/mem_notify ที่นี่แต่ฉันไม่มี - ทุกวันนี้มีอย่างอื่นอีกไหม? ฉันอ่านสิ่งนี้ซึ่งดูเหมือนว่าจะค่อนข้างเกี่ยวข้อง ฉันต้องการอย่างน้อยก็ทิ้งร่องรอยกองเล็ก ๆ และบางทีข้อมูลการแก้ปัญหาที่มีประโยชน์อื่น ๆ - แต่บางทีฉันสามารถกู้คืนได้โดยการเพิ่มหน่วยความจำ หนึ่งแก้ปัญหาฉันกำลังใช้อยู่นี้สคริปต์เล็ก ๆซึ่งการตรวจสอบบ่อยถ้าผมสนิท (95%) เพื่อขีด จำกัด SIGUSR1และถ้าเป็นเช่นนั้นก็จะส่งกระบวนการ ใน Bash ฉันกำลังเริ่มต้นสคริปต์นี้ในพื้นหลัง ( cgroup-mem-limit-watcher.py &) เพื่อที่จะคอยดู procs อื่น ๆ ใน cgroup เดียวกันและจะหยุดทำงานโดยอัตโนมัติเมื่อกระบวนการ Bash หลักตาย

1
OOM Killer - เซิร์ฟเวอร์ MySQL ที่ฆ่าแล้ว
หนึ่งในต้นแบบ MySQL ของเรา OOM Killer ถูกเรียกใช้และฆ่าเซิร์ฟเวอร์ MySQL ซึ่งนำไปสู่ปัญหาใหญ่ ต่อไปนี้เป็นบันทึกของเคอร์เนล: [2006013.230723] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0 [2006013.230733] Pid: 1319, comm: mysqld Tainted: P 2.6.32-5-amd64 #1 [2006013.230735] Call Trace: [2006013.230744] [<ffffffff810b6708>] ? oom_kill_process+0x7f/0x23f [2006013.230750] [<ffffffff8106bde2>] ? timekeeping_get_ns+0xe/0x2e [2006013.230754] [<ffffffff810b6c2c>] ? __out_of_memory+0x12a/0x141 [2006013.230757] [<ffffffff810b6d83>] ? out_of_memory+0x140/0x172 [2006013.230762] [<ffffffff810baae8>] ? __alloc_pages_nodemask+0x4ec/0x5fc [2006013.230768] [<ffffffff812fca02>] …

1
หน่วยความจำที่ไม่สามารถอ้างสิทธิ์ได้ถูกจัดสรรให้กับแผ่นพื้นซึ่งพิจารณาว่าใช้แล้วหรือมีแคชอยู่หรือไม่
หลังจากการประเมิน / proc / meminfo ฉันเห็นข้อมูลต่อไปนี้: $cat /proc/meminfo MemTotal: 197852592 kB MemFree: 64755992 kB MemAvailable: 65655112 kB Buffers: 4388 kB Cached: 759952 kB SwapCached: 0 kB Active: 649472 kB Inactive: 308340 kB Active(anon): 193840 kB Inactive(anon): 25316 kB Active(file): 455632 kB Inactive(file): 283024 kB Unevictable: 0 kB Mlocked: 0 kB …

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