Tôi cần theo dõi việc sử dụng CPU của người dùng hai máy chủ (Ubuntu và CentOS). Ví dụ:
user1 5%
user2 10%
...
Có một công cụ tương tự top
hoặc htop
có thể làm điều đó?
Tôi cần theo dõi việc sử dụng CPU của người dùng hai máy chủ (Ubuntu và CentOS). Ví dụ:
user1 5%
user2 10%
...
Có một công cụ tương tự top
hoặc htop
có thể làm điều đó?
Câu trả lời:
Dưới đây là tập lệnh để in tổng mức sử dụng CPU cho mỗi người dùng hiện đang đăng nhập , showPerUserCPU.sh :
own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
for user in $(who | awk '{print $1}' | sort -u)
do
# print other user's CPU usage in parallel but skip own one because
# spawning many processes will increase our CPU usage significantly
if [ "$user" = "$own" ]; then continue; fi
(top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }') &
# don't spawn too many processes in parallel
sleep 0.05
done
wait
# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'
Và đây là một phiên bản sửa đổi một chút để in mức sử dụng CPU của tất cả người dùng có sẵn (nhưng bỏ qua những người có mức sử dụng CPU bằng 0), showAllPerUserCPU.sh :
own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
for user in $(getent passwd | awk -F ":" '{print $1}' | sort -u)
do
# print other user's CPU usage in parallel but skip own one because
# spawning many processes will increase our CPU usage significantly
if [ "$user" = "$own" ]; then continue; fi
(top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { if (sum > 0.0) print user, sum, sum/CPUS; }') &
# don't spawn too many processes in parallel
sleep 0.05
done
wait
# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'
Cột đầu tiên đại diện cho tên người dùng, cột thứ hai sử dụng CPU tổng hợp và cột thứ ba sử dụng CPU được chuẩn hóa theo số lượng lõi CPU.
Ngoài ra còn có một tập lệnh liên quan để hiển thị tổng mức sử dụng bộ nhớ cho mỗi người dùng: showPerUserMem.sh
Để giám sát trực tiếp, chỉ cần thực hiện các tập lệnh này định kỳ thông qua watch
lệnh.
Để sắp xếp theo cách sử dụng CPU, dẫn đầu ra sort -k2 -nr
.
$USER
là tên người dùng của bạn, vì vậy giống như id -nu
lệnh bạn đang sử dụng. Tôi đã chỉnh sửa bài đăng của mình để thay đổi điều này.
/etc/init.d/
thư mục của tôi cũng đang làm điều này. Ghi đè các biến môi trường hiện tại ngược lại nên tránh.
top -u user
và chuyển hướng kết quả đến một tệp, sau đó theo dõi người dùng khác. sau đó bạn sẽ có một màn hình sử dụng Proc cho người dùng của bạn trong một khoảng thời gian nhất định.