4
ユーザーごとの合計CPU時間を監視する最も公平な方法は何ですか?
マルチユーザーシステムでは、各ユーザーのCPU使用率をCPU時間の秒単位で測定します。この測定のために、PIDがユーザーに属している場合、このユーザーがCPU時間を引き起こしていると想定します。つまり、デーモンとカーネルを無視しています。 現在、5秒ごとにこれを行っています。 各ユーザーと彼らが実行しているPIDを取得する ps aux 各PIDについて、get xからutime、cutime、stime、cstimeの合計/proc/[pid]/stat 計算t = x / interval(高負荷の場合、間隔は常に正確に5秒とは限りません) これを実行すると、賢明な見た目の値が得られます。たとえば、このシステムのユーザーはpython(while True: pass)で回転しており、システムは毎秒約750ミリ秒のCPU時間を示していました。システムが少しハングしたとき、1秒のインバーバルにつき1600ミリ秒を報告しました。これはほぼ正しいように思えますが、特にこれらの値が本当に理解されていないことを考えると、これらの値が欺くことができることはわかりません。 だから私の質問はこれです: ユーザーごとにCPU負荷を測定する公正で正しい方法は何ですか? メソッドはかなり正確でなければなりません。このシステムには何百人ものユーザーが存在する可能性があるためps aux、特に多くのソフトウェアが生成する短命スレッドの場合、パーセンテージを抽出することは十分に正確ではありません。 これは複雑かもしれませんが、それが可能であることは絶対に知っています。これが私の出発点でした: カーネルは、プロセスの作成時間と、その存続期間中に消費するCPU時間を追跡します。クロックティックごとに、カーネルは現在のプロセスがシステムモードとユーザーモードで費やした時間を一瞬で更新します。—(Linux Documentation Projectから) 後の値は、ユーザーがCPUに費やした秒数(またはjiffies)であり、システム負荷やCPU使用率のパーセンテージではありません。 プロセスの実行中にCPU時間を測定することが重要です。プロセスのなかには0.5秒しか続かないものもあれば、数か月続くものもあります。両方の種類をキャッチして、ユーザーのCPU時間をきめ細かく把握できるようにする必要があります。