#! /Bin/bash
#*************************************** *************************#
# ScriptName: pm
# Author: osdba
# Create Date: 2010-01-31
# Modify Author:
# Modify Date: 2010-01-31
# Function: show processes memory used
#*************************************** ************************#
Function getpidmem ()
{
Cat/proc/$1/smaps 2>/dev/null | awk/
'In in {
Total_size = 0;
Total_rss = 0;
Total_shared_clean = 0;
Total_shared_dirty = 0;
Total_private_clean = 0;
Total_private_dirty = 0;
Total_swap = 0;
Mem_size = 0;
Mem_rss = 0;
Mem_shared_clean = 0;
Mem_shared_dirty = 0;
Mem_private_clean = 0;
Mem_private_dirty = 0;
Mem_swap = 0;
}
{
If ($1 ~ /^ Size :/)
{
Mem_size = $2;
}
Else if ($1 ~ /^ Rss :/)
{
Mem_rss = $2;
}
Else if ($1 ~ /^ Shared_Clean :/)
{
Mem_shared_clean = $2;
}
Else if ($1 ~ /^ Shared_Dirty :/)
{
Mem_shared_dirty = $2;
}
Else if ($1 ~ /^ Private_Clean :/)
{
Mem_private_clean = $2;
}
Else if ($1 ~ /^ Private_Dirty :/)
{
Mem_private_dirty = $2;
}
Else if ($1 ~ /^ Swap :/)
{
Mem_swap = $2;
}
Else
{
If (ipcmem_start = 1)
{
Ipc_size = mem_size;
Ipc_rss = mem_rss;
Ipc_shared_clean = mem_shared_clean;
Ipc_shared_dirty = mem_shared_dirty;
Ipc_private_clean = mem_private_clean;
Ipc_private_dirty = mem_private_dirty;
Ipc_swap = mem_swap;
}
Else
{
Total_size = total_size + mem_size;
Total_rss = total_rss + mem_rss;
Total_shared_clean = total_shared_clean + mem_shared_clean;
Total_shared_dirty = total_shared_dirty + mem_shared_dirty;
Total_private_clean = total_private_clean + mem_private_clean;
Total_private_dirty = total_private_dirty + mem_private_dirty;
Total_swap = total_swap + mem_swap;
};
If ($6 ~ /^ // SYSV /)
{
Ipcmem_start = 1;
}
Else
{
Ipcmem_start = 0;
};
};
}
END {
Printf ("% 15d % 15d % 15d % 15d % 15d % 15d/n", total_rss, total_private_clean, total_private_dirty, total_shared_clean, total_shared_dirty, total_swap );
}
'
}
Function show_all_process_mem ()
{
TMPFILE = '/bin/mktemp-Q'
Echo "pid RSS (KB) PRIV_DIRTY PRIV_CLEAN SHR_DIRTY SHR_CLEAN swap pagetable wrong line"
Echo "-----------------------------------------------------------------------------------------------"
Ls-ld/proc/[0-9] * | awk '{printf ("% s/n", $ NF)}'> $ TMPFILE
While read LINE
Do
PID = 'basename $ Line'
Export line = 'ps-o command-p $ PID | tail-1 | cut-B 1-26'
Pagetablesize = 'cat/proc/$ PID/status | grep "VmPTE:" | awk '{print $2 }''
If ["$ pagetablesize" = ""]; then
Pagetablesize = 0
Fi
Meminfoline = 'getpidmem $ PID'
Rss = 'echo $ meminfoline | awk '{print $1 }''
Private_clean = 'echo $ meminfoline | awk '{print $2 }''
Private_dirty = 'echo $ meminfoline | awk '{print $3 }''
Shared_dirty = 'echo $ meminfoline | awk '{print $4 }''
Shared_clean = 'echo $ meminfoline | awk '{print $5 }''
Swap = 'echo $ meminfoline | awk '{print $6 }''
Total_rss = $ (total_rss + rss ))
Total_private_clean = $ (total_private_clean + private_clean ))
Total_private_dirty = $ (total_private_dirty + private_dirty ))
Total_shared_dirty = $ (total_shared_dirty + shared_dirty ))
Total_shared_clean = $ (total_rss + shared_clean ))
Total_swap = $ (total_swap + swap ))
Total_pagetablesize = $ (total_pagetablesize + pagetablesize ))
If ["$1" = "-a"]; then
Echo $ PID $ meminfoline "$ pagetablesize" "$ receivline" | awk/
'{
Printf ("% 9d % 10d % 10d % 10d % 10d % 10d % 10d % 10d %-26 s/n", $1, $2, $3, $4, $5, $6, $7, $8, $9 );
}'
Fi
Done <$ TMPFILE
/Bin/rm $ TMPFILE
Echo $ total_rss $ total_private_clean $ total_private_dirty $ total_shared_dirty $ total_shared_clean $ total_swap $ total_pagetablesize | awk/
'{
Printf ("ALL % 10d % 10d % 10d % 10d % 10d % 10d % 10d % 10d/n", $1, $2, $3, $4, $5, $6, $7 );
}'
}
Function print_usage ()
{
Echo "usage :"
Echo "pm. sh-a: display all process memory info"
Echo "pm. sh-s: display total memory info"
Echo "pm. sh-p <pid>: display pid memory info"
}
Total_rss = 0
Total_private_clean = 0
Total_private_dirty = 0
Total_shared_dirty = 0
Total_shared_clean = 0
Total_swap = 0
Total_pagetablesize = 0
If [$ #-lt 1]; then
Print_usage;
Exit 1
Fi
If ["$1" = "-a"]; then
Show_all_process_mem $1;
Exit 0
Fi
If ["$1" = "-s"]; then
Show_all_process_mem $1;
Exit 0
Fi
If ["$1" = "-p"]; then
If [$ #-ne 2]; then
Print_usage;
Exit 1
Fi
Meminfoline = 'getpidmem $2'
Export line = 'ps-o command-p $2 | tail-1 | cut-B 1-26'
Pagetablesize = 'cat/proc/$2/status | grep "VmPTE:" | awk '{print $2 }''
If ["$ pagetablesize" = ""]; then
Pagetablesize = 0
Fi
Echo "pid RSS (KB) PRIV_DIRTY PRIV_CLEAN SHR_DIRTY SHR_CLEAN swap pagetable wrong line"
Echo "-----------------------------------------------------------------------------------------------"
Echo $2 $ meminfoline "$ pagetablesize" "$ receivline" | awk/
'{
Printf ("% 9d % 10d % 10d % 10d % 10d % 10d % 10d % 10d %-26 s/n", $1, $2, $3, $4, $5, $6, $7, $8, $9 );
}'
Exit 0
Fi