Results 1 to 4 of 4
  1. #1
    Join Date
    Jun 2011
    Location
    Woodbridge, NJ
    Posts
    840

    memtop: bash script to find which processes are using the most memory

    Here is a little script I wrote that will show processes with the highest memory usage in human-readable form (sizes in KB/MB/GB), sorted from largest to smallest.

    Code:
    #!/bin/bash
    
    # memtop v1.0 Oct 16 2012
    # Author: Justin L. Franks (justin.franks@gmail.com)
    # http://justinfranks.com
    
    # memtop shows processes with the highest memory usage in human-readable form
    # (sizes in KB/MB/GB), sorted from largest to smallest.
    #
    # By default, memtop shows all processes, but this can be changed via the "-n"
    # parameter.
    #
    # For example, to show the top 20 processes by memory usage:
    #
    # memtop -n 20
    
    # Copyright (c) 2012 Justin L. Franks
    #
    # This program is free software; you can redistribute it and/or modify it under
    # the terms of the GNU General Public License as published by the Free Software
    # Foundation; either version 2 of the License, or (at your option) any later
    # version.
    #
    # This program is distributed in the hope that it will be useful, but WITHOUT
    # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
    #
    # The GNU General Public License is available at:
    # http://www.gnu.org/copyleft/gpl.html
    
    while getopts n: option
    do
      case "${option}" in
        n)
          COUNT=${OPTARG}
          ;;
      esac
    done
    
    printf "%$(tput cols)s\n" | tr ' ' '=';
    printf "Memory%-6sPID%-5sUser%-7sCommand\n";
    printf "%$(tput cols)s\n" | tr ' ' '-';
    
    ps -eo size,pid,user,command | sed "1 d" | sort -rn | if [[ -n $COUNT ]]; then head -n $COUNT; else cat; fi | \
    awk '
      {
        units[1024**2] = "GB";
        units[1024]    = "MB";
        units[1]	   = "KB";
        for (x = 1024**3; x >= 1; x /= 1024) {
          if ($1 >= x) {
            if (x < 1024) {
              printf ("%-6.0f %-4s ", $1/x, units[x]);
            }
    	else {
              printf ("%-6.2f %-4s ", $1/x, units[x]);
            }
    	break;
          }
        }
      }
      {
        printf ("%-7s %-10s ", $2, $3);
      }
      {
        for (x = 4; x <= NF; x++) {
          printf ("%s ", $x);
        }
      print ("\r");
      }
    ';
    
    printf "%$(tput cols)s\n"|tr ' ' '=';
    Sample output of "memtop -n 5" (shows the top 5 processes with the highest memory usage):

    PHP Code:
    ================================================================================================================================================================================================================================================================================
    Memory      PID     User       Command
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    315.90 MB   9322    mysql      /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/mysql-error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
    67.32  MB   24422   root       
    /usr/bin/python /usr/bin/fail2ban-server --/var/run/fail2ban/fail2ban.sock
    54.06  MB   1707    nobody     
    /usr/bin/memcached --m 64 -p 11211 -u nobody -l 127.0.0.1
    30.41  MB   1433    root       
    /usr/sbin/rsyslogd -c4
    9.18   MB   24318   root       
    /usr/bin/monitorix -/etc/monitorix.conf -/var/run/monitorix.pid
    ================================================================================================================================================================================================================================================================================ 

  2. #2
    Join Date
    Jun 2011
    Location
    Woodbridge, NJ
    Posts
    840
    (reserved for more info and a download link)

  3. #3
    Join Date
    Jun 2011
    Location
    Woodbridge, NJ
    Posts
    840
    You can download this script at:

    http://justinfranks.com/code/scripts/memtop

    To install, copy it to /usr/local/bin, and set it as executable (chmod 755 memtop).

    The you can run it from the command line like normal.

    To see all processes:

    memtop

    To see the top 10 processes:

    memtop -n 10

    To see the top 25 processes:

    memtop -n 25

  4. #4
    Join Date
    Jun 2011
    Location
    Woodbridge, NJ
    Posts
    840
    Please ignore this thread; it will soon be deleted.

    An updated thread with additional information about memtop can be found at http://www.webhostingtalk.com/showthread.php?p=8641657.
    Last edited by VectorVPS; 04-12-2013 at 04:29 AM.

Similar Threads

  1. bash - running multiple processes
    By ti_nhatrang in forum Programming Discussion
    Replies: 6
    Last Post: 07-14-2012, 08:56 PM
  2. Bash script error (No such file or directory/find)
    By ZKuJoe in forum Programming Discussion
    Replies: 6
    Last Post: 07-05-2009, 12:39 PM
  3. Bash script to monitor 3 or more processes via cron ?
    By WebHostDog in forum Hosting Security and Technology
    Replies: 6
    Last Post: 01-21-2008, 08:02 PM
  4. [SH/Bash] - Script to find all accounts by reseller (cpanel)
    By NixMaster in forum Programming Discussion
    Replies: 5
    Last Post: 08-03-2007, 09:10 PM
  5. bash comman/bash script
    By getbusy in forum Hosting Security and Technology
    Replies: 2
    Last Post: 12-25-2004, 06:50 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •