Linux找出哪些进程正在使用交换空间

时间:2020-01-09 10:42:28  来源:igfitidea点击:

top和free命令显示服务器中可用和已用物理内存和交换内存的总量。
如何确定Linux操作系统下哪个进程正在使用交换空间?
如何找出特定进程(例如memcached)的交换空间使用情况?
您可以使用以下任何一种技术

  • /proc/meminfo该文件报告有关系统内存使用情况的统计信息。免费使用它来报告系统上可用和已使用的内存(物理内存和交换内存)以及内核使用的共享内存和缓冲区的数量。您还可以使用免费的vmstat和其他工具来查找相同的信息。
  • /proc/${PID}/stats/proc/${PID}/status/proc/${PID}/stat:使用这些文件查找有关所使用的内存,页面和交换的信息通过每个进程使用其PID。
  • smem该命令(python脚本)报告内存使用情况,并按比例划分共享内存。

找出进程ID和交换使用情况

执行以下pidof命令,以找到正在运行的名为memcached的程序的进程ID:

# pidof memcached

或者,使用pgrep命令查找进程PID,执行:

# pgrep memcached

输出示例(记下PID号1):

48440

要查看memcached使用的交换空间(PID48440),请输入(数字#2):

# grep --color VmSwap /proc/48440/status

输出示例(编号4):

VmSwap:	     900 kB

或者以下awk命令(编号3):

# awk '/VmSwap/{print  " " }' /proc/48440/status

列出所有进程交换空间的使用

执行以下bash for loop命令以查看每个进程的交换空间使用情况:

## bash for loop ##
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf  " " }END{ print ""}' $file; done

执行以下命令以整理输出:

## Get swap space in Linux using bash for loop ##
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf  " " }END{ print ""}' $file; done | sort -k 2 -n -r | less

smem

smem命令报告物理内存使用情况,同时考虑共享内存页面。
未共享的内存报告为USS(唯一集大小)。
共享内存在共享该内存的进程之间平均分配。
未共享内存(USS)加上进程共享内存的比例报告为PSS(比例集大小)。

USS和PSS仅包括物理内存使用情况。
它们不包括已换出到磁盘的内存。
可以按进程,用户,映射或者系统范围报告内存。
文本模式和图形输出均可用。

安装smem

要安装smem [2],请在Debian/Ubuntu Linux下执行以下命令:

$ sudo apt-get install smem

RHEL/CentOS Linux用户执行以下命令:

$ wget https://www.selenic.com/smem/download/smem-1.4.tar.gz
$ tar xvf smem-1.4.tar.gz
# cp /tmp/smem-1.2/smem /usr/local/bin/
# chmod +x /usr/local/bin/smem

如何使用smem命令?

语法为:

smem [option]

## This lets smem include the size of the kernel's code and statically allocated data in the systemwide (-w) output ##
smem -K /path/to/kernel/image/on/disk [option]

## Amount of physical RAM.  This lets smem detect the amount of memory used by firmware/hardware in the systemwide (-w) output.   
## If  provided, it will also be used as the total memory size to base percentages on. 
smem -R REALMEMSIZE [option]

要查看基本过程信息,请执行:

# smem

要查看面向库的视图,请执行:

# smem -m

要查看面向用户的视图,请执行:

# smem -u

要查看系统范围内的内存使用情况摘要,请通过-w选项:

# smem -w

输出示例:

Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       5302144    5137920     164224 
userspace memory            2692196     240828    2451368 
free memory                  126228     126228          0

查看系统视图

# smem -R 8G -K /path/to/vmlinux/on/disk -w

要查看总数和百分比,请执行:

# smem -t -p

选项

执行以下命令以查看所有其他受支持的选项:

# smem --help

输出示例:

-h, --help            show this help message and exit
  -H, --no-header       disable header line
  -c COLUMNS, --columns=COLUMNS
                        columns to show
  -t, --totals          show totals
  -R REALMEM, --realmem=REALMEM
                        amount of physical RAM
  -K KERNEL, --kernel=KERNEL
                        path to kernel image
  -m, --mappings        show mappings
  -u, --users           show users
  -w, --system          show whole system
  -P PROCESSFILTER, --processfilter=PROCESSFILTER
                        process filter regex
  -M MAPFILTER, --mapfilter=MAPFILTER
                        map filter regex
  -U USERFILTER, --userfilter=USERFILTER
                        user filter regex
  -n, --numeric         numeric output
  -s SORT, --sort=SORT  field to sort on
  -r, --reverse         reverse sort
  -p, --percent         show percentage
  -k, --abbreviate      show unit suffixes
  --pie=PIE             show pie graph
  --bar=BAR             show bar graph
  -S SOURCE, --source=SOURCE
                        /proc data source

有关top的说明

以超级用户身份执行top命令:

# top

要按交换页使用情况对过程进行排序(SWAP = VIRT RES),请执行大写字母O(选项),然后按p(小写p)并按[Enter]键:
按交换使用情况对top命令进行排序点击放大)