কীভাবে অদলবদলের পার্টিশন পরীক্ষা করা যায়


23

আমি একটি হেডলেস সার্ভারে কিছু এলোমেলো সেগফাল্টগুলি সনাক্ত করার চেষ্টা করছি এবং একটি বিষয় যা কৌতূহলী বলে মনে হচ্ছে তা হ'ল এগুলি কেবল মেমরির চাপের মধ্যেই ঘটে বলে মনে হচ্ছে এবং আমার অদলবদলের আকার 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সেগফাল্টসের সময় কোনও বার্তা আছে ? সম্পর্কে একটি বার্তা oom-killerইঙ্গিত দেয় যে আপনার সিস্টেমে পর্যাপ্ত ভার্চুয়াল মেমরি নেই, যার অর্থ হ'ল অদলবদ ব্যবহার হচ্ছে না। এটি কি ভার্চুয়ালাইজড সার্ভার (এবং কী ধরণের)?
গিলস 'অশুভ হওয়া বন্ধ করুন'

লগটিতে কোনও ওম-কিলার এন্ট্রি নেই ঠিক যেমন segfault at 54 ip b7619ba8 sp bf9c3380 error 4আমি ভাবছি এটি একটি হার্ডওয়্যার সমস্যা যা ট্র্যাক করতে ব্যথা হতে চলেছে। এটি ডুয়াল অ্যাথলন এমপি 2000+ প্রসেসর এবং 1.5 জিবি র‌্যাম সহ একটি শারীরিক সার্ভার। এটি মোটামুটি স্টেবেলে চলে তবে সংকলনের সময় সেগফোল্টস।
জোশপুরি

1
ঠিক আছে, প্রমাণিত হয়েছে যে কেস ফ্যানগুলি প্লাগ করা হয়নি যার ফলে সমস্যা দেখা দিচ্ছিল যখন সার্ভার এটির উত্তাপের কারণে প্রসেসরের নিবিড় কিছু করা শুরু করবে।
জোশপুরি

উত্তর:


30

এই লিনাক্স? যদি তাই হয় তবে আপনি নিম্নলিখিত চেষ্টা করতে পারেন:

# sysctl vm.swappiness=100

এবং তারপরে হয় এমন একটি প্রোগ্রাম (গুলি) ব্যবহার করুন যা প্রচুর র‌্যাম ব্যবহার করে বা একটি ছোট অ্যাপ্লিকেশন লিখুন যা কেবল র‌্যাম খায়। নিম্নলিখিতগুলি তা করবে (উত্স: 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) যুক্ত করেছি কারণ এটি রাম এবং অদলবদল করে go প্রোগ্রামটি দেওয়ার জন্য আপনি যখন র‌্যাম এবং সোয়াপ্পের বাইরে চলে যান তখন ওওএম কিলারটিকে এটিকে হত্যা করা উচিত। আপনি এটি দিয়ে সংকলন করতে পারেন

gcc filename.c -o memeater

যেখানে filename.c ফাইলটি আপনি উপরের প্রোগ্রামটি সংরক্ষণ করেন Then তারপরে আপনি এটি। / মাইমিটার দিয়ে চালাতে পারেন।

আমি কোনও প্রোডাকশন মেশিনে এটি করব না।


ধন্যবাদ, এটি স্মৃতিচারণ করতে এবং অদলবদল শুরু করতে ভাল কাজ করেছে। আমার অনুমান যে আমার
সেগফাল্টগুলি

লিনাক্সের জন্য, এটি /proc/self/oom_score_adjসম্ভবত ওওএম-হত্যাকারীর শিকার হওয়ার বিষয়টি নিশ্চিত করার জন্য লিখিতভাবে লেখা শুরু করা কার্যকর হতে পারে ...
গার্ট ভ্যান ড্যান বার্গ

2
<unistd.h>ঘুমের জন্য অন্তর্ভুক্ত করা দরকার , অন্যথায় এটি একটি সতর্কতা ছুঁড়ে দেয়warning: implicit declaration of function ‘sleep’;
দেবানজান বসু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.