【性能】Linux上查看占用内存/CPU/swap最多的进程

Linux /proc/pid/smaps各字段含义:


# cat  /proc/$PID/smaps



/proc//smaps中的Pss相加,Pss是私有内存+共享内存按比例属于自己计算的那一部分

比如私有内存是200k, 共享内存500k和4个其它进程共享,那么是Pss就是200k+(500/(1+4))=200k+100k=300k。

 这样所有进程的Pss相加就不会有重复相加的顾虑,因为Pss中已经将共享内存部分帮我们算好了。

参考命令: # awk '/Pss:/{ sum += $2 } END { print sum }' /proc/$$/smaps



在Linux服务器上查看内存占用前10的进程:

#  for i in $( ls /proc/ |grep "^[0-9]"|awk '$0 >100') ;do cmd="";[ -f /proc/$i/cmdline ] && cmd=`cat /proc/$i/cmdline`;[ "$cmd"X = ""X ] && cmd=$i;awk -v i="$cmd" '/Rss:/{a=a+$2}END{printf("%s:%d\n",i,a)}' /proc/$i/smaps 2>/dev/null; done | sort -t: -k2nr | head -10


这种方法,实际上导致不少地方会被重复计算。

RSS 表示常驻内存,把进程用到的共享内存也算了进去,所以直接累加会导致共享内存被重复计算,不能得到准确的答案。



查看使用内存最多的10个进程

# ps -aux | sort -k4nr | head -n 10



查看使用CPU最多的10个进程

#  ps -aux | sort -k3nr | head -n 10



(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)


关于文件系统与磁盘的区别

使用 grep 查找 Pss 指标后,再用 awk 计算累加值

#  grep Pss /proc/[1-9]*/smaps | awk '{total+=$2}; END {printf "%d kB\n", total }'



# yum -y install epel-release

# smem --help

# smem 

# smem| awk '{total+=$6};END{printf "%d KB\n",total}'







往磁盘写文件和往文件系统写数据:

# dd if=/dev/urandom   of=/dev/sdb1        bs=1M   count=2048

#  dd if=/dev/urandom  of=/tmp/test.file    bs=1M   count=2048


从磁盘读数据和从文件系统读数据:

#  dd  if=/tmp/test.file  of=/dev/null  bs=1M  count=1024

#  dd  if=/dev/sda1       of=/dev/null  bs=1M  count=1024



按VmSwap使用量对进程排序,输出进程名称、进程ID以及SWAP用量

# for file in /proc/*/status ; do awk '/VmSwap|Name|^Pid/ {printf $2 " " $3} END{print ""}' $file; done | sort -k 3 -n -r | head

# yum -y install smem

# smem  --sort  swap



参考


Linux性能优化实战

https://time.geekbang.org/column/article/74633


Linux监控工具介绍系列——smem

https://linux.cn/article-7681-1.html

https://www.cnblogs.com/kerrycode/archive/2015/12/26/5079319.html

你可能感兴趣的:(【性能】Linux上查看占用内存/CPU/swap最多的进程)