AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-821582

Assa Yeroslaviz's questions

Martin Hope
Assa Yeroslaviz
Asked: 2024-07-23 21:49:06 +0800 CST

在多个 cors/线程上运行脚本时如何监控系统使用情况?

  • 5

我在 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
...
monitoring
  • 1 个回答
  • 35 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve