Takas bölümü nasıl test edilir?


23

Başsız bir sunucudaki bazı rastgele segfaults'ları teşhis etmeye çalışıyorum ve meraklı görünen şeylerden biri sadece hafıza baskısı altında göründüğü ve takas büyüklüğüm 0'ın üzerine çıkmayacak.

Makinemi düzgün çalıştığından emin olmak için nasıl takas etmeye zorlayabilirim?

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.logSefahatler sırasında herhangi bir mesaj var mı? Hakkında bir mesaj oom-killer, sisteminizin yeterli sanal belleğe sahip olmadığını gösterir, bu da takasın kullanılmadığı anlamına gelir. Bu sanallaştırılmış bir sunucu mu (ve ne tür)?
Gilles 'SO- kötülük yapmayı bırak'

Kütükte hiçbir oom-katil girişi yok segfault at 54 ip b7619ba8 sp bf9c3380 error 4, sanırım izini sürecek bir acı olacak bir donanım sorunu olduğunu düşünüyorum. Bu, Athlon MP 2000+ işlemcilere ve 1.5 GB RAM'e sahip fiziksel bir sunucudur. Oldukça stabil çalışır ancak derlemeler sırasında farklılıklar oluşturur.
joshperry

1
Peki, kasa fanlarının takılı olmadığı ortaya çıktı ve bu durum sunucu aşırı ısınmasına neden olan yoğun bir işlem yapmaya başladığında sorunlara yol açtı.
joshperry

Yanıtlar:


30

Bu linux mu? Öyleyse aşağıdakileri deneyebilirsiniz:

# sysctl vm.swappiness=100

Ve sonra ya çok miktarda RAM kullanan bir program kullanın ya da sadece ram yiyen küçük bir uygulama yazın. Aşağıdakiler bunu yapacak (kaynak: 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;
}

Uykuyu (1) ekleyerek, çarpma ve çarpma gibi süreçleri izlemeniz için size daha fazla zaman kazandırmak için ekledim. OOM katili, programa vermek için RAM ve SWAP’tan çıktığınızda bunu öldürmelidir. İle derleyebilirsiniz

gcc filename.c -o memeater

filename.c yukarıdaki programı kaydettiğiniz dosyadır. Ardından ./memeater ile çalıştırabilirsiniz.

Bunu bir üretim makinesinde yapmazdım.


Teşekkürler, bu hatıraları arttırmak ve değiş tokuş etmeye başlamak için işe yaradı. Benim çalışma sırasında parçalama arızası başka bir şey kaynaklanır sanırım ... muhtemelen donanım: /
joshperry

Linux için, /proc/self/oom_score_adjen muhtemel OOM-katil kurbanı olmasını sağlamak için yazarak başlamak faydalı olabilir ...
Gert van den Berg

2
<unistd.h>uyumak gerekir , aksi takdirde bir uyarı atarwarning: implicit declaration of function ‘sleep’;
Debanjan Basu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.