web-dev-qa-db-ja.com

カーネルパニックがメモリから同期せず、強制終了可能なプロセスが終了しない

VMWARE仮想マシン、Lubuntu17-32bitで、500mb RAMで簡単に実行できます(0mbでも十分です))。 kernel "linux-4.12.3.tar"をコンパイルし、VM、つまりLubuntu内にインストールしました。新しいカーネルで再起動すると、次のようになります:

End kernel panic not syncing out of memory and no killable processes

RAMのVMを1500mbまで増やしてエラーを回避し、システムが起動してデスクトップに到達したときに、メモリ使用量を確認しました0mbの前後で以前と同じです。

注:その仮想マシンに割り当てられたハードディスクはsata 40GBです。

なぜこのRAMがすべて必要なのか!!そして最も重要なことはどのようにそれを減らすことができますか?

更新:

みんな気をつけてください:私はneitherです。コンパイルの問題、インストールの問題、新しいカーネルでの作業の問題に直面したと言っています。唯一の問題は、新しいカーネルから起動することです。起動にのみ1500mbが必要であり、起動が完了してログイン画面とデスクトップに到達すると、OS(Lubuntu)の合計は300mb未満です。では、なぜその1500MBとそれを削減する方法ですか?

回答:

/boot/initrd.imgファイルが問題であり、サイズが非常に大きくなっています。サイズを小さくするには:

cd /lib/modules/<version>
Sudo find . -name *.ko -exec strip --strip-unneeded {} +
Sudo update-initramfs -c -k <version>

リブート

これを指摘してくれた人たちに感謝します。

2
Mosab Shaheen

次のいずれかの理由でカーネルパニックが発生したか、それ以上の可能性があります。

1カーネルのコンパイルは基本的にカーネルをインストールするため、古いカーネルを置き換える代わりに、どちらのカーネルもメモリを使用できず、パニックに陥ったデッドロックに陥りました。

  1. 新しいカーネルはある種のループに入りました。このように「自分自身を呼び出そうとした」か、単にフォーク爆弾の一種になり、メモリ不足エラーとパニックになったと思います。

  2. 新しいカーネルに割り当てられたパーティションが十分ではありませんでした。別のパーティションを作成し、マウントし、sysリンクして、他のプログラムが実行できるようにします。 gccとchains(linker)を使用して再コンパイルします

  3. カーネルを置き換える代わりに、それ自体を殺しました。

  4. 最初に300 mbのサイズのカーネルtarballを抽出すると、つまり "tar -xvf kernel.Zip"を抽出した後、サイズが900 mbの巨大なものになります。 gcc、g ++、gnu-makeなどのパッケージをインストールしてコンパイルすると、コンパイルされたカーネルは2 GBの巨大なスペースになる場合があります。そのため、パーティションにそれほど多くのメモリ不足が発生しない場合があります。

  5. スワップ領域を提供しませんでした。カーネルの構築はリソースを大量に消費するため、十分なスペースとスワップ領域とRAMの両方が必要です。

  6. インストール中に、/ mount、/ proc、/ boot、/ devなどのサブフォルダーが作成されます。そのため、各パーツはそれぞれの場所を取得し、メモリ不足が原因で何らかの障害が発生します。

  7. 通常、カーネルは環境のようにchrootでコンパイルされますが、chrootが適切に設定されていないと、proc、mnt、devなどのリソースの取得に失敗し、パニックが発生する場合があります。

    まだ助けが必要な場合は、これら2つの場所をチェックアウトしてください#1 buntuのカーネルチーム 、#2 buntuのカーネルデバッグチーム

新しいアップデート:

あなたのアップデートはカーネルのコンパイルが機能していることを暗示しているようです。

これは、カーネル全体をコンパイルしたことを意味するだけです。

通常、カーネルには重要なものがありますが、他の人にとってはスペースと時間の無駄です。

そのため、 buntu kernel の新しいカーネルを使用できます。私の場合、v4.14-rc1.Archに合ったカーネルをダウンロードしてください。 x86_64があるので、64ビットを1つ選択します。これらをダウンロードします

  • linux-headers-4.14.0-041400rc1_4.14.0-041400rc1.201709162031_all.deb
  • linux-headers-4.14.0-041400rc1-generic_4.14.0-041400rc1.201709162031_AMD64.deb
    • linux-image-4.14.0-041400rc1-generic_4.14.0-041400rc1.201709162031_AMD64.deb

そして、「Sudo dpkg -i * .deb」を発行してすべてをコンパイルします。

コンパイルしたカーネルは1GBを超えているため、より多くのリソースを使用しているようです。

Ubuntuカーネルには多くの部分が取り除かれているため、iサイズが小さく、重い圧縮を使用します。

カーネルにはすべてのものが含まれており、IOT、サーバー、デスクトップで使用でき、これらを実行するためのすべてのモジュールが存在する可能性があるため、arm 64、AMD64などと互換性があります。

そのため、これを減らすには、聞いたことのないハードウェアのドライバーなど、ケースで役に立たないすべての部品を削除する必要があります。可能な限りサーバー部品を除去します。

カーネルのコンパイルは集中的なリソース、時間、忍耐を使用するため、頭痛の種です。

アップデート#2:

先ほど述べたように、initrd.imgファイルは巨大でした。/boot /のスクリーンショットを少なくとも投稿するか、「ls -l」を使用してすべてのサイズをリストしてください。

カーネルはたまたまLinuxディストリビューションの心臓部です。非常に複雑なので、何も知らなくても、問題を推測することができます。

カーネルから不要なモジュールを削除してコンパイルすることをお勧めします。

2
SIDDHARTH