Linux에서 메모리(RAM) 테스트 하기

입질쾌감 물때표

memtest86+을 이용한 하드웨어상의 RAM 테스트

지난번에 중고나라에서 사왔던 RAM이 고장이 나서 JVM이 알수없는 에러를 갑자기 쏟아내면서 eclipse가 갑작스레 종료되거나, 또는 컴퓨터가 제멋대로 꺼지는 현상이 발생했다. 확실한건 메모리 영역은 여유가 많았었다. 그러므로 Memory 할당 영역의 부족으로 프로그램이 기동중 꺼지는 현상과는 다른 문제로 인지했었다.

이전까지는 이 이유를 알지를 못해서 단순히 하드웨어나 커널쪽 에러라고만 여기고 있었는데, 상태가 날이 갈수록 악화되는 것을 확인하면서 메모리쪽에 에러가 발생하는게 아닌가 의심이 되기 시작했다. 그랬더니,… 정말로 RAM이 문제가 있었던 것이였다. (황당)

우분투에서는 메모리를 테스트 할수 있게 해주는 아주 좋은 방법이 있는데, 부팅시에 Grub 메뉴의 memtest86+를 이용해서 확인할수가 있다.

위의 memtest86+의 기능으로 자신의 메모리가 정상인지 아닌지 쉽게 판단할수 있는데, 테스트하면서 Errors 쪽에 빨간 하이라이트로 메모리 주소값이 표기되는지 확인하면 된다. 나는 지금까지 메모리가 맛이 가면 PC자체가 제대로 켜지지 않거나 OS 부팅시에 뭔가 에러가 생길것이라고 예상했는데, 초기에는 모두 정상 작동하는 것을 보면서 이번에 아주 귀중한 교훈을 얻게 되었다.

RAM이 고장나도, PC는 켜진다.

위의 테스트를 우선적으로 통과하면 RAM은 문제없는 것이고, 계속적으로 메모리 관련 문제가 발생되면 이후 다른 점들을 체크해 나가면 될것이다.

GCC를 응용한 메모리 테스트 방법

GCC로 왜 테스트를 하는지는 다음과 같은 이유가 있어서 그랬다.

  1. Ubuntu가 기본 RAM 메모리를 모두 사용하고 이후 스왑메모리를 사용하기 시작할때, 갑자기 PC가 멈추는 현상이 발생한다.
  2. 알수없는 이유로 Ubuntu가 스왑메모리 영역을 사용하지 않는다.
  3. 노트북이 Sleep모드에서 Wake Up으로 바뀔때 정상적으로 켜지지 않는다.

대부분이 1번 사항의 이유로 테스트를 진행해야 하는 경우가 많았는데, 테스트를 위해서 아래의 C 코드가 필요하다.

#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*100)) != NULL && mb != max) {
        memset(buffer, 0, 1024*1024*100);
        mb++;
        printf("Allocated %d00 MB\n", mb);
        sleep(1);
    }      
return 0;
}

아무 디렉토리에 들어가서 위의 코드가 있는 C파일을 생성해 준다.

1. 파일 생성
user1@user1-GE62-2QF:~/Desktop$ vi memtest.c

2. 컴파일
user1@user1-GE62-2QF:~/Desktop$ gcc memtest.c -o memtest

위의 memtest를 +x로 실행가능하도록 하고 해당파일을 실행하면, 1초단위로 100MB씩 메모리 영역에 dummy 데이터를 쓰기 시작한다. htop 프로그램으로 화면으로 같이 확인하면 조금더 편하다.
htop 패키지는 우분투 기본패키지가 아니니, 직접 설치하면 되겠다.

화면 상단에 보면 자신의 CPU 스레드 개수대로 부하율을 한눈에 확인할수 있고, Mem과 Swp부분의 게이지로 현재의 메모리 상황을 확인할수 있다.
대부분의 Ubuntu 데탑 유저들은 저 스왑영역을 크게 신경쓰지 않고 사용하는 경우가 많을 것 같은데, 강제로 채워보면 우분투가 이상한(?) 행동을 보일때가 있으므로 한번쯤은 테스트 해볼 가치가 있는 것 같다.

먼저 저 스크립트를 실행하면 Mem영역이 차츰 0.1G 단위로 증가하고 자신의 RAM 사이즈와 일치하기 시작하면 스왑영역이 점차 증가하게 된다. 물론 이 시점부터는 메모리에 기록하지 않고 저장장치(SSD, HDD)등에 기록하기 때문에 데탑의 마우스가 점차 끊김 현상이 생기기 시작하면서 반응속도가 급격히 느려지는 것을 알수 있을 것이다.

이때에 완전히 PC가 멈추는 경우도 있고, PC가 갑자기 꺼지는 현상도 있을수 있으니, 중요한 프로그램은 모두 저장하고 종료시키는 것이 낫겠다.

  • SSD의 Freezing(일명 프리징) 현상등을 이것으로 확인도 해볼수 있는것 같으니 새 PC를 구매하고 Ubuntu를 사용하는 경우에는 우선적으로 위의 테스트를 거치고 사용하는 것이 정신건강에 다소 도움이 되지 않을까 싶다.
  • 그리고 RAM을 1슬롯 이상 사용하면서 각각의 RAM이 제조사가 다른 경우에 제대로 동작하는지도 테스트 해볼수 있다. 특히, 이러한 경우에는 꼭 테스트를 권장한다.
  • 저전력 1.35V와 1.5V RAM을 함께 사용하는 경우, 1.35V RAM이 서서히 내부 소자가 타들어 가는 경우도 있다. 따라서 이런 조합으로 컴퓨터가 켜졌다 하더라도, 반드시 메모리 테스트를 해서 고장이 없는지 확인해야 한다. (사실 이러한 조합은 시도조차 하지 않는 것이 좋다)

나는 노트북의 메모리의 문제를 알고난 부터 고장난 RAM은 미련없이 버리고, 당장 용산으로 달려가서 국내 S사의 램으로 구매해서 교체해두었다. 이후 Ubuntu에서는 메모리에 관련한 어떠한 문제도 발생하지 않게되었다. (이 상황을 겪었던 나는 하루종일 용산에서 왔다갔다 하면서 생쑈를 했다. 다른 분들도 이런경우로 짜증이 없으시길..)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다