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で実行され、次にこれを開始します。そして、プログラムの起動時にスワップ領域を構成していないのに、swapon
RAMを食べて食べることもできることを発見して追加しました。
何が起こっているのかを説明できる人はいますか?
修正する
私は今このプロセスにメモリが不足していると確信しています。私が考慮していないのは、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がマシンの使用可能なtop
RAMより少ないときにこの動作が開始された理由です。私はまだLinuxがメモリを管理する方法を理解していません。RES
buff/cache