How to find out which processes are using swap space in Linux?

后端 未结 18 1963
终归单人心
终归单人心 2020-11-27 09:11

Under Linux, how do I find out which process is using the swap space more?

18条回答
  •  情深已故
    2020-11-27 09:30

    Another script variant avoiding the loop in shell:

    #!/bin/bash
    grep VmSwap /proc/[0-9]*/status | awk -F':' -v sort="$1" '
      {
        split($1,pid,"/") # Split first field on /
        split($3,swp," ") # Split third field on space
        cmdlinefile = "/proc/"pid[3]"/cmdline" # Build the cmdline filepath
        getline pname[pid[3]] < cmdlinefile # Get the command line from pid
        swap[pid[3]] = sprintf("%6i %s",swp[1],swp[2]) # Store the swap used (with unit to avoid rebuilding at print)
        sum+=swp[1] # Sum the swap
      }
      END {
        OFS="\t" # Change the output separator to tabulation
        print "Pid","Swap used","Command line" # Print header
        if(sort) {
          getline max_pid < "/proc/sys/kernel/pid_max"
          for(p=1;p<=max_pid;p++) {
            if(p in pname) print p,swap[p],pname[p] # print the values
          }
        } else {
          for(p in pname) { # Loop over all pids found
            print p,swap[p],pname[p] # print the values
          }
        }
        print "Total swap used:",sum # print the sum
      }'
    

    Standard usage is script.sh to get the usage per program with random order (down to how awk stores its hashes) or script.sh 1 to sort the output by pid.

    I hope I've commented the code enough to tell what it does.

提交回复
热议问题