收集占用内存的进程(包括子进程) 发表于 2018-06-12 | 分类于 Linux-Basic , shell&shell脚本 | 收集占用内存的进程(包括子进程)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#!/bin/bashfile=/home/work/processors.logtotal_Mem=$(free -m|awk '{print $2}'|sed -n '2p')used_Mem=$(free -m | awk '{print $3}' | sed -n '2p')#内存使用率usedPerMemory=$(awk 'BEGIN{printf "%.0f",('$used_Mem'/'$total_Mem')*100}')#如果内存使用率大于等于90if [ $usedPerMemory -ge 90 ];then# 收集占用内存最高的top20个进程,包括子进程 processor=$(ps aux | sort -k4nr | head -20 | awk '{print $NF}' | uniq -c) echo "#######$(date +%F\ %T)########" > $file echo "当前内存使用率: $usedPerMemory%" >> $file echo "当前使用内存top20进程: " >> $file echo "$processor" >> $file# 计算进程(包括子进程)实际占用的物理内存量 #对每个进程,计算其(包括其子进程)占用的物理内存 for PerProcessor in $(ps aux | sort -k4nr | head -20 | awk '{print $NF}' | uniq);do # 获取每个进程的PID ProPid=$(ps aux | grep $PerProcessor | grep -v grep| awk '{print $2}') #计算该进程(包括子进程)消耗的物理内存总量 total_mem_each_pro=$(for pid in $ProPid; do cat /proc/$pid/smaps; done | awk '/Pss/ {mem += $2} END {print mem, "kB"}')#下面这条语句也可以计算出进程(包括子进程)占用的物理内存总量# ps aux | grep $PerProcessor | grep -v grep | awk '{sum += $6} END{print sum}' echo " $PerProcessor takes $total_mem_each_pro memory " >> $file done #将文件内容发送到邮箱 mail -s "hsq-cron占用内存过高" huangyong@doweidu.com < $filefifi 本文标题:收集占用内存的进程(包括子进程) 文章作者:Jesse 发布时间:2018年06月12日 - 22:06 最后更新:2020年06月30日 - 20:06 原始链接:https://jesse.top/2018/06/12/Linux-Basic/shell&shell脚本/收集占用内存最多的进程/ 许可协议: 禁止商业用途 转载请保留原文链接及作者。 坚持原创技术分享,您的支持将鼓励我继续创作! 打赏 微信支付 支付宝