显示内存信息的shell脚本

show_mem.sh

#!/bin/bash

PROC_MEM=/proc/meminfo
show_summary_mem()
{
    printf "\t\t\t-----------------------\n"
    printf "\t\t\t|   MEMORY SUMMARY    |\n"
    printf "\t\t\t-----------------------\n"

    used_rat=$(echo $1 $2 | awk '{printf("%-2.2f",($1-$2)*100/$1)}')
    printf "  -----------------------------------------------------------------------\n"
    printf " |  total mem: %-8dKB  | free mem: %-8dKB  | used ratio: %-2.2f%%  |\n" $1 $2 $used_rat     
    printf "  -----------------------------------------------------------------------\n"

    used_mem=$(($1-$2)) #占使用内存的比值
    slab_rat=$(echo $used_mem $3 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    stack_rat=$(echo $used_mem $4 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    table_rat=$(echo $used_mem $5 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    vmalloc_rat=$(echo $used_mem $6 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    other_rat=$(echo $used_mem $7 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    printf "  -----------------------------------------------------------------------\n"
    printf " |                             KERNEL SPACE                              |\n"
    printf "  -----------------------------------------------------------------------\n"
    printf " |    slab    | kernel stack | page table | vmalloc used |    other+X    |\n"
    printf " | %-8dKB |  %-7dKB   | %-7dKB  |  %-8dKB  | %-6dKB +X   |\n" $3 $4 $5 $6 $7
    printf " |   %-2.3f%%  |     %-2.3f%%   |   %-2.3f%%   |    %-2.3f%%    |     %-2.3f%%    |\n" $slab_rat $stack_rat $table_rat $vmalloc_rat $other_rat
    printf "  -----------------------------------------------------------------------\n"

    task_rat=$(echo $used_mem $8 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    unmap_rat=$(echo $used_mem $9 | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    buff_rat=$(echo $used_mem ${10} | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    huge_rat=$(echo $used_mem ${11} | awk '{printf("%-2.3f",$2*100/$used_mem)}')
    printf "  -----------------------------------------------------------------------\n"
    printf " |                              USER SPACE                               |\n"
    printf "  -----------------------------------------------------------------------\n"
    printf " |   ALL Process   |   Cached - Mapped   |   Buffers   |    Huge page    |\n"
    printf " |    %-8dKB   |     %-8dKB      |  %-8dKB |    %-8dKB   |\n" $8 $9 ${10} ${11}
    printf " |      %-2.3f%%    |       %-2.3f%%       |   %-2.3f%%   |     %-2.3f%%      |\n" $task_rat $unmap_rat $buff_rat $huge_rat
    printf "  -----------------------------------------------------------------------\n"

}
#系统内存使用情况
total_k=$(grep MemTotal $PROC_MEM | awk '{print $2}')
free_k=$(grep MemFree $PROC_MEM | awk '{print $2}')

#内核空间内存分布
slab_k=$(grep -i slab $PROC_MEM | awk '{print $2}')
kerStack_k=$(grep KernelStack $PROC_MEM | awk '{print $2}')
pageTables_k=$(grep PageTables $PROC_MEM | awk '{print $2}')
vmallocUsed_k=$(grep vmalloc /proc/vmallocinfo | awk 'BEGIN {vm_sum=0} {vm_sum+=$2} END {print vm_sum/1024}')
hdCrpt_k=$(grep HardwareCorrupted $PROC_MEM | awk '{print $2}')
bounce_k=$(grep Bounce $PROC_MEM | awk '{print $2}')
otherX=$(($hdCrpt_k + $bounce_k + $bounce_k))

#用户空间内存分布
task_all=$(grep -w Pss /proc/[1-9]*/smaps | awk 'BEGIN {sum=0} {sum+=$2} END {print sum}')
cached_k=$(grep -w Cached $PROC_MEM | awk '{print $2}')
mapped_k=$(grep -wi mapped $PROC_MEM | awk '{print $2}')
buffer_k=$(grep -wi buffers $PROC_MEM | awk '{print $2}')
hugepage_total_k=$(grep -w HugePages_Total  $PROC_MEM | awk '{print $2}')
hugepage_size=$(grep -w Hugepagesize $PROC_MEM | awk '{print $2}')
hugepage_k=$(expr $hugepage_total_k \* $hugepage_size) 
unmapped=$(($cached_k - $mapped_k))

show_summary_mem $total_k $free_k $slab_k $kerStack_k $pageTables_k $vmallocUsed_k $otherX $task_all $unmapped $buffer_k $hugepage_k 

get_mem_info.sh

#!/bin/sh

TMP_FILE=$(mktemp tmp.XXXX)
for dir in `ls /proc | grep [1-9]*`
do
    if [ -e /proc/$dir/comm ];then
        tmp_comm=$(cat /proc/$dir/comm)
		if [ $tmp_comm == "get_mem_info.sh" ];then
			continue
		fi
        cat /proc/$dir/smaps > tmp_smaps
        TEXT=$(head -n 5 tmp_smaps | grep -w "Size" | awk '{print $2}')
        Rss=$(cat tmp_smaps | grep -w "Rss" | awk 'BEGIN { sum=0 } { sum+= $2 } END{print sum}')
        if [ $Rss == "0" ];then
			rm tmp_smaps
            continue
        fi
        USS=$(cat tmp_smaps | grep -e "Private_Clean" -e "Private_Dirty" | awk 'BEGIN { sum=0 } { sum+= $2 } END{print sum}')
        Pss=$(cat tmp_smaps | grep -w "Pss" | awk 'BEGIN { sum=0 } { sum+= $2 } END{print sum}')
        Anonymous=$(cat tmp_smaps | grep -w "Anonymous" | awk 'BEGIN { sum=0 } { sum+= $2 } END{print sum}')
        Swap=$(cat tmp_smaps | grep -w "Swap" | awk 'BEGIN { sum=0 } { sum+= $2 } END{print sum}')

        printf "%-10s%-18s%10s%10s%10s%10s%14s%10s\n" "$dir" "$tmp_comm" "$TEXT" "$Rss" "$USS" "$Pss" "$Anonymous" "$Swap" >> $TMP_FILE
        rm tmp_smaps
    fi
done
printf "%-10s%-18s%10s%10s%10s%10s%14s%10s\n" "PID" "ELF_name" "TEXT(KB)" "Rss(KB)" "Uss(KB)" "Pss(KB)" "Anonymous(KB)" "Swap(KB)"
cat $TMP_FILE | sort -k 6 -nr 
rm $TMP_FILE


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举世无双勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值