linux 查看哪些进程用了swap

如果系统的物理内存用光了,则会用到swap。系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。所以要高度重视。

swap查看有很多种方法,一一介绍下:

free

 

free -m

就能看出当前系统所使用的swap了。那么如何查看哪些进程使用了swap呢,这样好针对性的做出优化。

 

top

Centos(6.0之前):

top只能看到swap总使用量

网上很多人说top+f+p能显示出来swap。可是按完f查看的时候,man top里面swap的解释是:

并不是实际的使用swap。而是VIRT-RES得来的。用我蹩脚的英文翻译就是,虚拟内存中所使用过的swap部分

 

Centos(6.0之后):

man top

这样就明显看出是取出的每个进程的swap,能很方便的查看哪些进程使用了swap。从中也能看到一个信息。那就是读取了/proc/#/status

 

vmstat

vmstat -n 1也能查看到

仍旧无法查看到哪些进程使用了。但是能看到si、so

 

Memory(内存):

swpd: 使用虚拟内存大小

free: 可用内存大小

buff: 用作缓冲的内存大小

cache: 用作缓存的内存大小

Swap:

si: 每秒从交换区写到内存的大小

so: 每秒写入交换区的内存大小

 

shell

在Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下的smaps文件中 ,一看内容发现是进程内存映像信息,比同一目录下的maps文件更详细些。

cat /proc/1/smaps

这里解释下samps里面的内容:

bfdca000-bfddf000 是该虚拟内存段的开始和结束位置

rw-p 内存段的权限,rw是指可读写,p是指私有,如果是s则为共享

bffea000 该虚拟内存段在对应的映射文件中的偏移量

00:00 文件的主设备和次设备号

0 被映射到虚拟内存的文件的索引节点号

[stack] 被映射到虚拟内存的文件名称

Size 是进程使用内存空间,并不一定实际分配了内存(VSS)

Rss是实际分配的内存(不需要缺页中断就可以使用的)

Shared_Clean 和其他进程共享的未改写页面

Shared_Dirty 和其他进程共享的已改写页面

Private_Clean 未改写的私有页面页面

Private_Dirty 已改写的私有页面页面

Swap 存在于交换分区的数据大小(如果物理内存有限,可能存在一部分在主存一部分在交换分区)

Pss是平摊计算后的使用内存(有些内存会和其他进程共享,例如mmap进来的)

 

这里能显示出swap

那么查看你想要看的进程所使用的swap只需要:

awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps


也可以写shell统计所以进程的:

 
  1. #!/bin/bash

  2. # Get current swap usage for all running processes

  3. # writted by xly

  4.  
  5. function getswap {

  6. SUM=0

  7. OVERALL=0

  8. for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do

  9. PID=`echo $DIR | cut -d / -f 3`

  10. PROGNAME=`ps -p $PID -o comm --no-headers`

  11. for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`

  12. do

  13. let SUM=$SUM+$SWAP

  14. done

  15. echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"

  16. let OVERALL=$OVERALL+$SUM

  17. SUM=0

  18.  
  19. done

  20. echo "Overall swap used: $OVERALL"

  21. }

  22.  
  23. getswap

  24. #getswap|egrep -v "Swap used: 0"


既然知道了原理,大家各自发挥,什么语言都可以统计

 

iotop

 

官网http://guichaz.free.fr/iotop/,详细说明了:


Iotop is a Python program with a top like UI used to show of behalf of which process is the I/O going on. It requires Python ≥ 2.5 (or Python ≥ 2.4 with the ctypes module) and a Linux kernel ≥ 2.6.20 with the TASK_DELAY_ACCT CONFIG_TASKSTATS, TASK_IO_ACCOUNTING and CONFIG_VM_EVENT_COUNTERS options on.

不过达到内核、python版本要求后,iotop还是非常好用的,能看到哪些进程使用了swap

 

Python

python2.7之后有了psutil模块。也可以查看swap,学习中。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值