私はUbuntu 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 ++を強制的に再インストールしました。しかし、それは問題を解決できませんでした。
良い点は、システムに過負荷がかかるとエラーが発生する可能性があることです。これが発生すると、プログラムはメモリ不足(ただし、まだ利用可能なスワップスペースは80 GBです)と「xmallocの失敗」について文句を言い始めます。
1つの説明は、malloc
カーネルの一部のルーチンでビットが反転された場合です。
アップグレード中update-initramfs
。これらのいくつかが欠陥のあるRAMを介して実行され、カーネルにいくつかのビットエラーがあると仮定すると、どのようにきれいに再構築できますか?つまり、すべての入力が元のままになるようにmake clean
実行する前に何をすべきですか?update-initramfs
編集2:
コンピュータに過負荷がかかると、XorgやFirefoxなどのプログラムがクラッシュします。仮想メモリが不足しているがまだ80 GBを使用できる場合、これらの動作は驚くべきことではありません。
strace
単一のコマンドですべての重い負荷を実行すると、strace
セグフォルトは発生しません。
編集3:
エラーを確実に再現できなくなりました。消えませんが、はるかに少ない頻度で発生します。