Kswapdが100%のCPUを使用しているのを確認しています... kswapdがどのように多く使用されているかを知るにはどうすればよいですか?
kswapdはallプロセスで物理的に利用可能なメモリ要求よりも大きいメモリ要求に応じてスワップスペースを管理しています。
それはプロセスにとらわれず、どのページがいつアクセスされるかだけに関心があります(もちろん、これよりも複雑ですが、物事をシンプルに保つために、このように表示することもできます)。
つまりrealの質問は、「kswapdが常にページングする必要がある原因となっているメモリへの負荷が最も大きいプロセスはどれか」です。
これは、「top」を使用してメモリ使用量ソートモードに切り替えると、最も簡単に答えられます。
あなたはそれをスクリプト化することができます。しかし、トップを介してそれを行うこともできます
Topを実行し、次に[〜#〜] o [〜#〜]を押し、次にpを押し、次にenterを押します。
すべてのプロセスがスワップ使用量でソートされ、どのプロセスがそれを使用しているかを確認できます
Ubuntu 15.10以降を使用している場合、これは実際には バグ の結果である可能性があります。特に、システムがスワップパーティションのない仮想マシン(AWS EC2など)の場合はそうです。問題 他のディストリビューションに存在する ですが、執筆時点では、同じ修正が普遍的に機能するかどうかは不明です。
一時的な回避策:
Sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules
Sudo reboot
これにより、XenおよびHyper-V仮想マシンのRAM/CPUのホットアドが無効になります。
kswapd
のどこかにバグがあるようですが、古いカーネルでのみうまくいくと思います。
ほぼ毎日、kswapdは(ただし、現在のカーネルではない)より大きなクラスターの一部のマシンでランダムにbeserkします。両方のkswapdプロセスで100%CPU。他の実行中のプロセス(sshシェルを除く)はなく、十分な空きRAM(700 MB以上))およびSWAPはまったく使用されていません。スワップインもスワップアウトもありません。
特定のマシンがヒットし、別のマシンがヒットしない理由はまだ説明されていません。通常は短期間に複数のマシンにヒットするため、完全にランダムではないようです。アイドル状態のマシンや高圧下にあるマシンは、効果の影響を受けにくい(!)ようです。したがって、ワークロードで何かを行う必要があり、マシンがアイドル状態でもビジー状態でもない場合にのみヒットします。
問題が発生しても、何も解決しません。すべてのプロセス(強制終了できなくなったわけではありません)を強制終了し、すべてのファイルシステムをアンマウントします。 kswapd
は依然として100%CPUのままです。私はSMPカーネルのスピンロックレースを疑っていますが、私が間違っている可能性もあります。
おそらく私の答えを見てください serverfault.com/questions/316995/#493257
ノート: