このLinuxプロセスはなぜそんなに遅く実行されますか?

このLinuxプロセスはなぜそんなに遅く実行されますか?

Ubuntu 19.04システムにメモリが不足しているようには見えませんが、予想よりはるかに遅く実行されるPythonプロセスがあります。システムには96GBのRAMと96GBのスワップスペースがあります。このプロセスは計算集約的であり、システムで大量のメモリを消費する唯一のプロセスです。

top次のようになります。

top - 04:26:15 up 18 days,  6:26,  1 user,  load average: 1.00, 1.02, 1.23
Tasks: 328 total,   1 running, 327 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.6 sy,  0.0 ni, 96.1 id,  2.5 wa,  0.0 hi,  0.0 si,  0.0 st
GiB Mem :     94.3 total,      0.5 free,     86.1 used,      7.8 buff/cache
GiB Swap:    104.0 total,     97.5 free,      6.5 used.      7.4 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
15182 baccala   20   0  117.6g  85.2g   3736 D  20.3  90.3  32:06.77 python2

私が本当に理解していないのは、straceこれが私が聞いた内容とどのように当てはまるかです。

baccala@blade1:~/helium$ timeout 10s strace -cw -p 15182
strace: Process 15182 attached
strace: Process 15182 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.055781          86       645           brk
------ ----------- ----------- --------- --------- ----------------
100.00    0.055781                   645           total

10秒を超える間隔でシステムコールが55ミリ秒しかかかりませんが、CPU使用率が20%に過ぎず、「D」状態なのはなぜですか。

top私はこの内容をプログラムがカーネルで多くの時間を費やしましたが、straceその逆と言うように読んでいます。さらに、システムはほとんどスワップスペースを使用せず、まだ数GBのバッファ/キャッシュがあるため、多くの場合でもメモリが不足しているようには見えません。

プロセスは、常駐セットサイズが約80 GBに達するまで100%CPUで実行され、次にこれを開始します。そして、プログラムの起動時にスワップ領域を構成していないのに、swaponRAMを食べて食べることもできることを発見して追加しました。

何が起こっているのかを説明できる人はいますか?

修正する

私は今このプロセスにメモリが不足していると確信しています。私が考慮していないのは、straceシステムコールの待ち時間だけが表示され、ページフォールト中の待ち時間は表示されないことです。そして処理はい図のように交換してくださいiotop

 TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
15182 be/4 baccala  1409.08 K/s    0.00 B/s 92.57 %  0.00 % python2
15182 be/4 baccala  1649.00 K/s    0.00 B/s 91.62 %  0.00 % python2
15182 be/4 baccala  1245.74 K/s    0.00 B/s 94.78 %  0.00 % python2
15182 be/4 baccala  1904.57 K/s    0.00 B/s 90.60 %  0.00 % python2
15182 be/4 baccala  1904.63 K/s    0.00 B/s 88.55 %  0.00 % python2

私がまだ理解していないのは、フィールドがまだ10 GBとしてリストされている場合でも、16 GBがマシンの使用可能なtopRAMより少ないときにこの動作が開始された理由です。私はまだLinuxがメモリを管理する方法を理解していません。RESbuff/cache

関連情報