ฉันจะฆ่ากระบวนการที่ทำให้หน่วยความจำรั่วไหลโดยอัตโนมัติได้อย่างไร


8

ฉันมีปัญหากับกระบวนการที่ทำให้หน่วยความจำรั่ว /private/var/vmพวกเขาทำให้เกิดฮาร์ดไดรฟ์ของฉันจะเต็มไปด้วยไฟล์แลกเปลี่ยนใน

ฉันต้องการกระบวนการการรั่วไหลจะถูกฆ่าตายที่เห็นโดย OS ฉันไม่สนใจกล่องโต้ตอบที่ปรากฏหลังจากผ่านไป 20 นาทีแนะนำแอปพลิเคชั่นที่จะฆ่าและไม่แสดงให้เห็นถึงการรั่วไหล

ฉันลองตั้งค่าrssและdataขีด จำกัด แล้ว/etc/launchd.confแต่ดูเหมือนจะไม่มีผลกระทบ

นี่คือของฉัน/etc/launchd.conf:

limit data 8589934592 8589934592
limit rss 8589934592 8589934592

นี่คือlaunchctl limitผลลัพธ์:

% launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        8589934592     8589934592
    stack       8388608        67104768
    core        0              unlimited
    rss         8589934592     8589934592
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    256            unlimited

นี่คือของฉัน.zshrc:

ulimit -t 600
ulimit -d 512000
ulimit -v 1024000

และulimit -aผลลัพธ์ (ใน ZSH):

% ulimit -a
    -t: cpu time (seconds)         600
    -f: file size (blocks)         unlimited
    -d: data seg size (kbytes)     512000
    -s: stack size (kbytes)        8192
    -c: core file size (blocks)    0
    -v: address space (kb)         1000
    -l: locked-in-memory size (kb) unlimited
    -u: processes                  709
    -n: file descriptors           256

แต่นี่คือสิ่งที่topบอกฉันเกี่ยวกับกระบวนการ:

PID  COMMAND      %CPU  TIME     #TH  #WQ  #POR #MRE RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP PPID
886  process      30.8  01:16.40 1/1  0    17   332  2259M+ 184K   2072M- 19G+   38G    882  885

ดูเหมือนว่าไม่มีวิธีการ จำกัด หน่วยความจำที่ทำเป็นเอกสารจริงๆ มีกลไกเพิ่มเติมที่ฉันอาจพลาดหรือไม่?


230 GiB! ฉันหวังว่าคุณจะพลาดจุดทศนิยม
duci9y

@ duci9y Nope :-(
sam hocevar

3
ในกรณีนี้ฉันหวังว่าจะมีคนแก้ไขปัญหาของคุณ คุณจะอยู่ในคำอธิษฐานของฉัน
duci9y

ในที่สุดฉันก็ลบการพูดถึงสิ่งที่กระบวนการรั่วไหลเป็นเพราะผู้คนใน IRC เริ่มบรรยายฉันเกี่ยวกับสาเหตุที่ฉันควรใช้ clang ++ แทน llvm-g ++ และนั่นทำให้ฉันต้องการตีพวกเขาด้วยวัตถุปลายแหลม
sam hocevar

วัตถุแหลมบนกองไฟ
duci9y

คำตอบ:


3

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

จากรายการที่กรองฉันจะใช้leaksคำสั่ง (ดูman 1 Leaks ) ต่อกระบวนการ PID หากจำนวนหน่วยความจำ leaked ทั้งหมดที่รายงานโดยคำสั่งนั้นสูงกว่าเกณฑ์อื่นฉันจะฆ่าและตอบกลับ

หมายเหตุ : คุณควรระวังที่จะไม่ฆ่ากระบวนการ OS / ระบบใด ๆ โดยไม่ทราบว่าคุณทำอะไร เพื่อหลีกเลี่ยงสถานการณ์นี้คุณควรกรองรายการโดยใช้วิธี "รายการขาว"


1

ulimit บนแพลตฟอร์มส่วนใหญ่ไม่ทำงานตามที่คาดไว้

หากนี่ไม่ใช่แอปเดสก์ท็อปให้เรียกใช้ผู้กระทำความผิดด้วยผู้ดูแลกระบวนการที่เหมาะสมเช่นhttps://github.com/arya/bluepill

หากนี่เป็นแอปเดสก์ท็อปติดต่อผู้พัฒนาแอป คำติชมเป็นสิ่งจำเป็นและสำคัญ

UX บน GUI นักฆ่า OOM สำหรับ Mac นั้นแย่มาก ควรเรียงลำดับที่ใหญ่ที่สุดจากน้อยไปมากด้วยกราฟแท่งสัดส่วนสำหรับการใช้งาน ram ของแต่ละกระบวนการ นอกจากนี้ควร SIGCONT หยุดกระบวนการทั้งหมดโดยอัตโนมัติเมื่อแก้ไข


1
ผมเคยมีปัญหากับการใช้งานหลาย llvm-g++แต่ฟางที่ยากจนหลังอูฐเป็นแอปเปิ้ล รายงานปัญหาใน Radar ฉันอยากรู้: สิ่งที่แพลตฟอร์มอื่น ๆ ที่มีไม่ทำงานulimit? ฉันใช้ Unix หลายรสชาติมาเกือบ 20 ปีแล้วและฉันจำไม่ได้ว่าได้เห็น
sam hocevar

-2

หากคุณต้องการสิ่งนี้ในการรีบูตเครื่องคุณควรใช้launchctl limitคำสั่งเท่านั้น

หากคุณต้องการ จำกัด หน่วยความจำของแอปพลิเคชันคุณควร จำกัด กลุ่มสแต็กด้วย


อย่างที่คุณเห็นในผลลัพธ์ทั้งขนาดสแต็คและขนาดข้อมูลมี จำกัด ฉันถามคำถามเพราะlaunchctl limitไม่ได้ทำงาน
sam hocevar

ulimitคุณใช้งานไม่ได้ตามที่คุณต้องการ launchctl limitทำ.
Eir Nym

และอีกช่วงเวลาที่จะสว่างในขีด จำกัด : เมื่อโปรแกรมถึงขีด จำกัด โปรแกรมจะได้รับคำเตือน แต่ด้วยการกระทำที่ จำกัด แบบนุ่มนวลจะสามารถดำเนินการได้สำเร็จโดยยาก - มันจะล้มเหลว ดังนั้นหากโปรแกรมร้องขอหน่วยความจำเกินขีด จำกัด จะไม่มีการจัดสรรหน่วยความจำ
Eir Nym

launchctl limitใช้งานไม่ได้หรือฉันจะไม่ถามคำถาม
sam hocevar

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