web-dev-qa-db-ja.com

kswapdは、スワップの使用中にCPUを100%使用することがよくあります。

ほとんどの場合、コンピューターがスワップを必要とするようになると、CPU使用率が大幅に上昇します(kswapd0は常に99%〜100%のCPUを使用しています)。 topによると、時間はsy(IO待機)ではなくwa(システム/カーネル)で費やされています。

Linux 4.0.4-2-ArchをC720上で2GBのRAMと6GBのスワップをSSDで実行しています。

廃棄ページ(TRIM)がオンになっているかどうかにかかわらず、この問題があるようです。

これを修正できるかどうかを確認または調整する必要のある設定はありますか?

問題をデバッグする方法はありますか?カーネルスレッドの場合、straceのようなものですか?


デフォルトのArch Linux設定で実行:

/proc/sys/vm/swappiness = 60
/proc/sys/vm/vfs_cache_pressure = 100
/sys/kernel/mm/transparent_hugepage/enabled = [always] madvise never

7
Zaz

比較的commonproblem のようです

問題が発生しているときに、次のコマンドを発行して問題が停止するかどうかを確認できます:echo 1 > /proc/sys/vm/drop_caches

機能する場合は、回避策として定期的なcronジョブとしてスケジュールできます。

9
shodanshok

Ubuntu 14.04.1 LTSでLinuxカーネル4.4.0を実行しているC720に2 GB RAMおよび2 GBのスワップを搭載しています。

Chrome/Chromiumの使用量が多い場合を想定して、システムのパフォーマンスを向上させる方法をいくつか紹介します。

  1. /etc/default/grubを編集し、次のカーネルパラメータをGRUB_CMDLINE_LINUX_DEFAULT行に追加します。
    • elevator=noop
    • zswap.enabled=1
    • transparent_hugepage=madvise
  2. Sudo update-grub2を実行します。
  3. /etc/sysctl.confを編集して、以下を追加します:
  4. リブート。

次のように変更を確認できます。

$ dmesg | grep -i noop
[    0.694680] io scheduler noop registered (default)
$ dmesg | grep -i zswap
[    0.724855] zswap: loaded using pool lzo/zbud
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
$ sysctl vm.swappiness
vm.swappiness = 25
$ sysctl vm.vfs_cache_pressure
vm.vfs_cache_pressure = 1000

更新

手順3でvm.min_free_kbytesを増やすと効果的です。 131072(128 MB)の値を試してください。最後の要点は、デスクトップ上のLinuxがメモリ不足の状況では十分に機能しないことです。 Chrome/Chromiumをcgroupに配置することを提案している人もいますが、それはこの回答の範囲を超えています。

2
Matthew M

kswapカーネルは、メモリページの割り当てと解放に使用されます。スワップが使用されている場合、このカーネルスレッドがCPU時間を多く使用していることがわかります。つまり、kswapカーネルスレッドがメモリページをスキャンして、一部のページをスワップし、メモリ割り当て要求を処理します。 。

この場合は、OSのメモリが自動的に不足しているときにカーネルがキャッシュを再利用するため、キャッシュを削除しても役に立たないと思います。

メモリに問題がなく、freeコマンドを使用すると、キャッシュとして使用されるメモリが多くなりますが、メモリに問題がある場合、Linuxはメモリ割り当てリクエストを処理するためにキャッシュを減らします。キャッシュを削除する必要がある

sar -Bおよびmajftpgscankの値を探し、他の値はman sar

1
c4f4t0r

これは準回答です-コメントするには長すぎますが、すぐに回答することはできません

1)6Gではなく1Gb以下の使用についてはどうですか(mkswapでサイズを設定できますが、スワップパーティションのサイズ変更はありません)—試しましたか?どんな結果?

2)sysctl vm.swappinesssysctl vm.vfs_cache_pressureとは何ですか?

3)cat /sys/kernel/mm/transparent_hugepage/enabledとは何ですか?

N. B.そのような設定では、SSDが大幅に消耗することに気づいていますか(RAMはそれほど多くなく、大規模なスワップ)。

P. S. UltraKSMを使用することをお勧めしますが、カーネルにパッチを適用する必要があります。私は自分のビルドをいくつか持っています( -realtime および [〜#〜] bfs [〜#〜] ベース)が、それらは.deb用ですベースのシステムである一方で、それらはさまざまなシステムで非常に簡単に使用できます(通常、.debsを解凍して対応するinitrd/initramfsを作成するだけでよく、Linuxのその側面に慣れていない人にとっては面倒かもしれません) )

(つづく)

0
poige

Puppeteer(chrome headless api)などのdockerの内部でサービスを実行している場合、dockerfile内に dumb-init を追加します。

Docker> = 1.13.0を実行している場合は、docker runの--init argを使用してゾンビプロセスを取得します

docker run container --init

Dockerで<= 3.0を実行している場合は、dumb-initを使用します。これをDockerfileに追加します。

ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_AMD64
/usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init
ENTRYPOINT ["dumb-init", "--"]
0
TheBetterJORT