我在 Ubuntu 22.04 中编写了一个特定的脚本(经过测试,我可以说它也可以在 24.04 上运行),用于在特定命令运行时监视某些系统参数。有问题的命令正在运行另一个工具,该工具分布在多个核心/线程上。我想监视内存的使用情况、特定文件大小以及使用了哪些核心和线程。脚本附在下面。
我对目前的结果很满意,但我想知道是否可以做得更好。
我无法监控的一件事是执行命令top
然后按 时可以看到的 %CPU 1
。我可以看到每个核心的命令的 %CPU 使用率。我似乎找不到以编程方式执行此操作的方法。我不确定这是否可行,但我想知道我的哪个进程在哪个线程上运行,如果可以的话,可以量化它。
我将非常感激任何使它更加优雅的建议或意见。
谢谢
阿萨
#!/bin/bash
process_name="dotnet"
folder_path="Output/combined"
log_file="usage_log.csv"
#Rename log file if exists
if [ -e "$log_file" ]; then
# Get the current timestamp
timestamp=$(date +"%Y%m%d_%H%M%S")
# Construct the new file name with the timestamp
new_log_file="${log_file%.*}_$timestamp.${log_file##*.}"
# Rename the log file
mv "$log_file" "$new_log_file"
echo "Log file renamed to $new_log_file"
else
echo "Log file does not exist."
fi
echo "Timestamp,PID,%MEM %CPU RSS_GB VSZ_GB,Threads,Folder_Size" > $log_file
while true; do
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# Get all PIDs for the process name
pids=$(pgrep -f $process_name)
if [ -z "$pids" ]; then
echo "Process not found"
break
fi
folder_size=$(du -sh $folder_path | cut -f1)
for pid in $pids; do
# Extract memory info and convert to GB
mem_info=$(ps -o %mem,%cpu,rss,vsz -p $pid --no-headers | \
awk '{printf "%s %s %.2f %.2f", $1, $2, $3/1048576, $4/1048576}')
# Extract number of threads
threads=$(ps -o nlwp -p $pid --no-headers)
# Extract CPU cores
cores=$(taskset -pc $pid | awk -F: '{print $2}' | tr -d ' ')
# Extract CPU cores allowed
allowed_cores=$(taskset -pc $pid | awk -F: '{print $2}' | tr -d ' ')
#interval after $pid removed
cores_used=$(pidstat -p $pid | awk -v pid="$pid" '
BEGIN { cores = 0; }
$4 == pid && $10 > 0 { cores++; }
END { print cores; }
')
echo "$timestamp, $pid ,$mem_info,$threads,$cores,$cores_used, $folder_size" >> $log_file
done
sleep 30
done
输出如下:
Timestamp,PID,%MEM %CPU RSS_GB VSZ_GB,Threads,Folder_Size
...
2024-07-23 13:42:40, 2798428 ,0.0 29.2 0.35 1018.40, 7,0-63,1, 2.7G
2024-07-23 13:42:40, 2798434 ,0.0 30.5 0.37 1018.40, 7,0-63,1, 2.7G
2024-07-23 13:42:40, 2798436 ,0.0 31.5 0.36 1018.40, 7,0-63,1, 2.7G
2024-07-23 13:42:40, 2798438 ,0.0 32.2 0.34 1018.40, 7,0-63,1, 2.7G
2024-07-23 13:42:40, 2798441 ,0.0 33.8 0.39 1018.40, 7,0-63,1, 2.7G
2024-07-23 13:42:40, 2798447 ,0.0 33.0 0.40 1018.40, 7,0-63,1, 2.7G
2024-07-23 13:42:40, 2798452 ,0.0 26.9 0.38 1018.40, 7,0-63,1, 2.7G
...