방금 우분투 20.04로 업그레이드했습니다.
업그레이드 후 갑자기 다음과 같은 세그폴트가 많이 보이기 시작했습니다.
[ 87.157912] perl[5442]: segfault at 0 ip 0000556a510d9f05 sp 00007fff768ae410 error 6 in perl[556a510d5000+16a000]
[ 87.157919] Code: be 08 00 00 00 48 c1 f9 03 48 8d 6c 09 02 48 81 fd 00 08 00 00 48 0f 47 e8 48 89 ef e8 54 cc ff ff 48 8d 54 e8 f8 48 8d 48 20 <48> 89 10 49 8b 54 24 08 48 89 50 08 49 89 44 24 08 48 8b 10 48 c1
[ 87.158481] perl[5504]: segfault at 0 ip 000055db4eb74f05 sp 00007fff87b13870 error 6 in perl[55db4eb70000+16a000]
[ 87.158489] Code: be 08 00 00 00 48 c1 f9 03 48 8d 6c 09 02 48 81 fd 00 08 00 00 48 0f 47 e8 48 89 ef e8 54 cc ff ff 48 8d 54 e8 f8 48 8d 48 20 <48> 89 10 49 8b 54 24 08 48 89 50 08 49 89 44 24 08 48 8b 10 48 c1
[ 87.613155] perl[5509]: segfault at 8 ip 00005597f965f58a sp 00007ffdc4c26d60 error 4 in perl[5597f95f1000+16a000]
[ 87.613166] Code: 00 00 00 48 8b 06 0f b7 40 20 66 0f 1f 44 00 00 66 85 c0 0f 84 aa 0e 00 00 83 e8 01 0f b7 c0 8d 34 18 49 8b 46 18 48 8d 14 f0 <8b> 02 85 c0 0f 85 8c 00 00 00 44 89 22 49 8b 46 18 89 da 83 44 d0
문제는 이것에만 국한된 것이 아니기 perl
때문에 업그레이드 과정에서 뭔가 문제가 있었던 것 같습니다.
메모리 테스트를 해보니 메모리 모듈 불량이더군요. 이것은 세그폴트를 설명할 수 있습니다.
이제 불량 메모리 모듈을 제거했으며 시스템이 메모리 테스트를 통과했습니다.
그러나 문제는 남아 있습니다.
그런 다음 나는 업그레이드 중에 메모리 모듈에 의해 libc(또는 유사한 것)가 손상되었을 수도 있다고 생각했습니다. 그래서 나는 다음을 실행했습니다.
debsums | grep -v OK
오류가 표시되지 않습니다.
세그폴트의 원인은 무엇입니까?
편집하다:
libc6 및 libc6++를 강제로 다시 설치했습니다. 그러나 그것은 문제를 해결하지 못했습니다.
좋은 점은 시스템에 과부하가 걸리면 오류가 발생할 수 있다는 것입니다. 이런 일이 발생하면 프로그램은 메모리 부족(그러나 여전히 사용 가능한 스왑 공간이 80GB임) 및 "xmalloc 실패"에 대해 불평하기 시작합니다.
한 가지 설명은 malloc
커널의 일부 루틴에서 비트가 반전된 경우입니다.
업그레이드하는 동안 update-initramfs
. 이 중 일부가 결함이 있는 RAM을 통해 수행되어 커널에 약간의 비트 오류가 있다고 가정하면 어떻게 깔끔하게 재구축할 수 있습니까? 즉, 모든 입력이 원래 상태로 유지되도록 make clean
실행하기 전에 무엇을 해야 합니까 ?update-initramfs
편집 2:
컴퓨터에 과부하가 걸리면 Xorg 및 Firefox와 같은 프로그램이 충돌합니다. 가상 메모리가 부족하지만 여전히 80GB를 사용할 수 있는 경우 이러한 동작은 놀라운 일이 아닙니다.
strace
단일 명령을 통해 모든 무거운 부하를 실행하면 strace
세그폴트가 발생하지 않습니다.
편집 3:
더 이상 오류를 안정적으로 재현할 수 없습니다. 사라지지는 않지만 훨씬 덜 자주 발생합니다.