![memtester의 출력에 메모리 오류가 표시되면 어떻게 해야 합니까?](https://linux55.com/image/132048/memtester%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%97%90%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%98%A4%EB%A5%98%EA%B0%80%20%ED%91%9C%EC%8B%9C%EB%90%98%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
Memtester는 다음 응답을 출력합니다.
memtester version 4.3.0 (64-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).
pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 10240MB (10737418240 bytes)
got 10240MB (10737418240 bytes), trying mlock ...locked.
Loop 1/1:
Stuck Address : testing 1FAILURE: possible bad address line at offset 0x12325b7a8.
Skipping to next test...
Random Value : ok
FAILURE: 0xa003776ad640ac0c != 0xe003776ad640ac0c at offset 0x7a4f2680.
Compare XOR : FAILURE: 0xe7139f89d94112c0 != 0x27139f89d94112c0 at offset 0x7a4f2680.
FAILURE: 0x4e53ee3a9704bdf5 != 0x4a53ee3a9704bdf5 at offset 0x950b4930.
Compare SUB : FAILURE: 0x96ecab120464e9c0 != 0xd6ecab120464e9c0 at offset 0x7a4f2680.
FAILURE: 0x7f67022cef637b99 != 0x2b67022cef637b99 at offset 0x950b4930.
FAILURE: 0x96c38c9f6e6dd229 != 0xd6c38c9f6e6dd229 at offset 0xe40d2b50.
Compare MUL : FAILURE: 0x00000001 != 0x00000002 at offset 0x69394a08.
FAILURE: 0x00000001 != 0x00000000 at offset 0x950b4930.
FAILURE: 0x400000000000001 != 0x00000001 at offset 0xea6b07a8.
FAILURE: 0x400000000000000 != 0x00000000 at offset 0xfb853610.
FAILURE: 0x00000000 != 0x800000000000000 at offset 0x12bf3ed10.
Compare DIV : FAILURE: 0x777fd9f1ddc6c1cd != 0x777fd9f1ddc6c1cf at offset 0x69394a08.
FAILURE: 0x777fd9f1ddc6c1cd != 0x7f7fd9f1ddc6c1cd at offset 0x12bf3ed10.
Compare OR : FAILURE: 0x367600d19dc6c040 != 0x367600d19dc6c042 at offset 0x69394a08.
FAILURE: 0x367600d19dc6c040 != 0x767600d19dc6c040 at offset 0x7a4f2680.
FAILURE: 0x367600d19dc6c040 != 0x3e7600d19dc6c040 at offset 0x12bf3ed10.
Compare AND : Sequential Increment: ok
Solid Bits : testing 0FAILURE: 0x4000000000000000 != 0x00000000 at offset 0x12325b7a8.
Block Sequential : testing 0FAILURE: 0x400000000000000 != 0x00000000 at offset 0xfb853610.
Checkerboard : testing 1FAILURE: 0xaaaaaaaaaaaaaaaa != 0xeaaaaaaaaaaaaaaa at offset 0x7a4f2680.
Bit Spread : testing 1FAILURE: 0xdffffffffffffff5 != 0xfffffffffffffff5 at offset 0x102e353e8.
Bit Flip : testing 0FAILURE: 0x4000000000000001 != 0x00000001 at offset 0x12325b7a8.
Walking Ones : testing 40FAILURE: 0xdffffeffffffffff != 0xfffffeffffffffff at offset 0x102e353e8.
Walking Zeroes : testing 0FAILURE: 0x400000000000001 != 0x00000001 at offset 0xea6b07a8.
FAILURE: 0x400000000000001 != 0x00000001 at offset 0xfb853610.
8-bit Writes : -FAILURE: 0xfeefa0a577dfa825 != 0xdeefa0a577dfa825 at offset 0x4bd600e8.
16-bit Writes : -FAILURE: 0xf3dfa5fff79e950b != 0xf7dfa5fff79e950b at offset 0x2b04cca8.
FAILURE: 0x3ffb3fc56e7532c1 != 0x7ffb3fc56e7532c1 at offset 0xe40d2b50.
Done.
분명히 이는 메모리 부족을 나타냅니다. 커널이나 하이퍼바이저에서 이 메모리를 불량으로 표시하고 계속 사용할 수 있습니까? 아니면 파일 13번에 넣고 교체품을 구매해야 할까요?
답변1
오류를 상당히 빨리 감지할 수 없다면,예를 들어ECC 메모리를 사용하거나 주기적으로 재부팅하십시오.그리고memtest
, 모듈을 교체하는 것이 가장 좋습니다. 자동 데이터 손상의 위험이 있습니다.
옵션을 사용하여 커널이 메모리를 예약함으로써 메모리를 무시하도록 지시할 수 있습니다 memmap
(참조:커널 문서세부):
memmap=nn[KMG]$ss[KMG]
[KNL,ACPI] 특정 메모리를 예약됨으로 표시합니다. 예약할 메모리 영역은 ~
ss
입니다ss+nn
.예: 0x18690000-0x1869ffff에서 메모리 제외
memmap=64K$0x18690000
또는
memmap=0x10000$0x18690000
일부 부트로더에서는 Grub2와 같이 "$" 앞에 이스케이프 문자가 필요할 수 있습니다. 그렇지 않으면 "$"와 다음 숫자가 먹히게 됩니다.
여기서 어려운 부분은 예약할 주소 범위를 파악하는 것입니다. memtester
필요한 물리적 주소와 일치하지 않는 가상 주소 공간에서 주소를 제공합니다 memmap
.
가장 쉬운 방법은 start 를 사용하는 것입니다 memtest
. 다음과 같은 내용이 표시됩니다.
4c494e5558726c7a bad mem addr 0x000000012f9eaa78 - 0x000000012f9eaa80 reserved
4c494e5558726c7a bad mem addr 0x00000001b86fe928 - 0x00000001b86fe930 reserved
0x000000012f9eaa80 - 0x00000001b86fe928 pattern 4c494e5558726c7a
그런 다음 커널은 감지한 잘못된 범위를 비활성화합니다. 계속해서 시작을 사용 memtest
하거나 예약된 주소 범위를 사용하여 memmap
매개변수를 구성할 수 있습니다.
답변2
당신은 그것을 사용할 수 있습니다나쁜 기억수리하다. 하지만 모듈을 변경하는 것이 좋습니다. 메모리는 더욱 악화될 수 있으며, 소리 없이 데이터가 손상되는 것은 매우 심각한 문제입니다. 특히 데이터베이스나 암호화를 실행하는 경우 이는 빠르게 치명적일 수 있습니다.