วิธีทดสอบ swap partition


23

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

ฉันจะบังคับให้เครื่องสลับเพื่อให้แน่ใจว่าทำงานได้อย่างถูกต้องได้อย่างไร?

orca ~ # free
             total       used       free     shared    buffers     cached
Mem:       1551140    1472392      78748          0     333920    1046368
-/+ buffers/cache:      92104    1459036
Swap:      1060280          0    1060280

orca ~ # swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdb2                               partition       1060280 0       -1

มีข้อความใด ๆ ในkern.logเวลาที่ segfaults หรือไม่ ข้อความเกี่ยวกับoom-killerจะระบุว่าระบบของคุณมีหน่วยความจำเสมือนไม่เพียงพอซึ่งอาจหมายความว่าไม่ได้ใช้การสลับ นี่เป็นเซิร์ฟเวอร์เสมือนจริงหรือไม่
Gilles 'หยุดความชั่วร้าย'

ไม่มีรายการอุ้มนักฆ่าในบันทึกสิ่งที่segfault at 54 ip b7619ba8 sp bf9c3380 error 4ฉันคิดว่ามันเป็นปัญหาฮาร์ดแวร์ซึ่งจะเป็นความเจ็บปวดที่จะติดตาม นี่เป็นเซิร์ฟเวอร์จริงที่มีโปรเซสเซอร์ Athlon MP 2000+ คู่และ RAM ขนาด 1.5GB มันทำงานค่อนข้างเสถียร แต่ segfaults ระหว่างคอมไพล์
joshperry

1
ปรากฏว่ากรณีที่แฟน ๆ ไม่ได้เสียบปลั๊กซึ่งเป็นสาเหตุของปัญหาเมื่อเซิร์ฟเวอร์จะเริ่มทำสิ่งใดก็ตามที่ต้องใช้ตัวประมวลผลอย่างมากทำให้ร้อนมากเกินไป
joshperry

คำตอบ:


30

ลินุกซ์นี้หรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถลองต่อไปนี้:

# sysctl vm.swappiness=100

จากนั้นใช้โปรแกรมที่ใช้ RAM จำนวนมากหรือเขียนแอปพลิเคชั่นขนาดเล็กที่กิน RAM สิ่งต่อไปนี้จะทำ (แหล่งที่มา: http://www.linuxatemyram.com/play.html ):

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
    int max = -1;
    int mb = 0;
    char* buffer;

    if(argc > 1)
        max = atoi(argv[1]);

    while((buffer=malloc(1024*1024)) != NULL && mb != max) {
        memset(buffer, 0, 1024*1024);
        mb++;
        printf("Allocated %d MB\n", mb);
        sleep(1);
    }      
return 0;
}

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

gcc filename.c -o memeater

โดยที่ filename.c เป็นไฟล์ที่คุณบันทึกโปรแกรมด้านบนจากนั้นคุณสามารถเรียกใช้ด้วย. /meater

ฉันจะไม่ทำสิ่งนี้ในเครื่องผลิต


ขอบคุณที่ทำงานได้ดีในการฮ็อตอัพหน่วยความจำและเริ่มการแลกเปลี่ยน ฉันคิดว่า segfaults ของฉันมีสาเหตุมาจากอย่างอื่น ... อาจเป็นฮาร์ดแวร์: /
joshperry

สำหรับ linux มันอาจจะมีประโยชน์ที่จะเริ่มต้นด้วยการเขียนเพื่อ/proc/self/oom_score_adjให้แน่ใจว่าเป็นเหยื่อของ OOM-killer ที่เป็นไปได้มากที่สุด ...
Gert van den Berg

2
ต้องรวมถึง<unistd.h>การนอนหลับมิฉะนั้นมันจะส่งสัญญาณเตือนwarning: implicit declaration of function ‘sleep’;
Debanjan Basu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.