Linux 使用shell脚本实现监测指定进程占用情况

本文介绍了如何在Linux中编写脚本,对指定程序进行实时资源占用和I/O监测,包括安装必要的工具如top、iotop和nethogs,并提供不同系统的安装指令。脚本会持续循环监测并记录数据。
摘要由CSDN通过智能技术生成

实现对指定程序实施监测功能,在使用前需要在Linux中检测是否安装了top命令

如果你的Linux系统中没有安装top命令,可以使用以下命令来安装:
Ubuntu/Debian系统:
sudo apt-get update
sudo apt-get install procps
CentOS/RHEL系统:
sudo yum install -y procps-ng

1、初始版本

#!/bin/bash
  
# 检查参数是否为空
if [[ -z $1 ]]; then
  echo "Please provide the process software name as an argument."
  exit 1
fi

# 获取软件的进程 ID
process_pid=$(pgrep "$1")

# 检查软件是否在运行
if [[ -z $process_pid ]]; then
  echo "process software is not running."
  exit 1
fi
# 获取当前时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# 获取资源占用情况
resource_usage=$(top -b -n 1 -p $process_pid | grep $process_pid)

# 保存带有时间戳的资源占用情况到文件
echo "$timestamp $resource_usage"

运行效果:

在这里插入图片描述

2、修改设置循环监测时间 示例中为2s监测一次

#!/bin/bash

# 检查参数是否为空
if [[ -z $1 ]]; then
  echo "Please provide the process software name as an argument."
  exit 1
fi

# 获取软件的进程 ID
process_pid=$(pgrep "$1")

# 检查软件是否在运行
if [[ -z $process_pid ]]; then
  echo "process software is not running."
  exit 1
fi

# 循环执行
while true; do
  # 获取当前时间戳
  timestamp=$(date +"%Y-%m-%d %H:%M:%S")
  # 获取资源占用情况
  resource_usage=$(top -b -n 2 -p $process_pid | grep $process_pid)

  # 保存带有时间戳的资源占用情况到文件
  echo "$timestamp $resource_usage" >> resource_usage.log

  # 等待2秒,可自己修改
  sleep 2
done

运行效果:

在这里插入图片描述

3、添加磁盘IO和网络IO的监测

使用 iotop 和 nethogs 来实现对指定进程的监测。使用前需要先安装
Ubuntu 或者 Debian 系统:
sudo apt-get update
sudo apt-get install iotop nethogs
CentOS 或者 RHEL 系统:
sudo yum install epel-release
sudo yum install iotop nethogs

脚本

#!/bin/bash

# 检查参数是否为空
if [[ -z $1 ]]; then
  echo "Please provide the process software name as an argument."
  exit 1
fi

# 获取软件的进程 ID
process_pid=$(pgrep "$1")

# 检查软件是否在运行
if [[ -z $process_pid ]]; then
  echo "process software is not running."
  exit 1
fi

# 获取当前时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# 获取资源占用情况
resource_usage=$(top -b -n 1 -p $process_pid | grep $process_pid)

# 输出带有时间戳的资源占用情况
echo "$timestamp $resource_usage"

# 获取磁盘IO
disk_io=$(iotop -b -n 1 -p $process_pid | grep $process_pid)

# 获取网络IO
network_io=$(nethogs -t -c 1 -p $process_pid)

# 输出带有时间戳的磁盘IO和网络IO
echo "$timestamp Disk IO: $disk_io"
echo "$timestamp Network IO: $network_io"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值