如何在#linux OS下找到特定进程的交换空间使用情况?
原文链接: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/
top
和free
命令显示服务器中的剩余物理和交换内存的总量。
如何确定哪个进程使用Linux操作系统下的交换空间?我如何找出诸如memcached
之类的特定进程的交换空间使用情况?
您可以使用以下任何一种技术,但请记住,由于shared pages,没有可靠的方法来获取此信息[1]
-
/proc/meminfo
- 显示关系统内存使用的统计信息。free
使用它来报告系统上的free内存和使用的内存(物理和交换)的量以及内核使用的共享内存和缓冲区。 -
/proc/$ {pid}/smaps
,/proc/$ {pid}/status
和/proc/$ {pid}/stat/stat
:使用这些文件查找有关,使用其PID使用的查看内存,页面和交换的信息。 -
smem
- 此命令(Python脚本)报告了与共享内存分配的内存使用情况。
找出进程ID以及swap使用
pidof memcached
要查看Memcached使用的交换空间(PID#48440),请输入(#2):
grep --color VmSwap /proc/48440/status
或以下awk命令(#3):
awk '/VmSwap/{print $2 " " $3}' /proc/48440/status
## bash for loop ##
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done
## Get swap space in Linux using bash for loop ##
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
top命令
top
按照swap page使用(SWAP = VIRT – RES)
输入o(选项),然后是p(小p)和[enter]键:
SWAP = VIRT – RES
(1)top命令也可以查询到,最常用的内存指标
(2)将各个进程中的RSS值相加后,一般都会超出整个系统的内存消耗,这是因为RSS中包含了各个进程之间的共享内存
From the htop faq page:
不可能获得过程中用过的交换空间的确切大小。top命令通过进行swap = wirt - res来伪造此信息,但这不是一个好指标,因为其他内容(例如视频内存)也对virt进行了计数(例如:top说我的x进程使用了81m的交换,但是它还报告了我的整体系统仅使用2m的交换。因此,我不会在HTOP中添加类似的交换列,因为我不知道获取此信息的可靠方法(实际上,我认为这是不可能的要获得一个确切的数字,因为shared pages)。
Linux内存状态监测工具smem命令
下载地址:https://www.selenic.com/smem/
什么是smem
smem 是Linux系统上的一款可以生成多种内存耗用报告的命令行工具。与现有工具不一样的是 smem 可以报告 PSS【Proportional Set Size(按比例占用大小)】,这是一种更有意义的指标。可以衡量虚拟内存系统的库和应用程序所占用的内存数量。由于大部分的物理内存通常在多个应用程序之间共享,名为驻留集大小(RSS)的这个标准的内存耗用衡量指标会大大高估内存耗用情况。PSS这个参数而是衡量了每个应用程序在每个共享内存区中的「公平分配」,给出了一个切合实际的衡量指标。
smem命令报告物理内存使用情况,考虑了共享内存页面。
- PSS-(proportion set size)比例集大小
所有使用某共享库的程序均分该共享库占用的内存时,显然所有进程的PSS之和就是系统的内存的使用量,会更准确一些,他将共享内存的大小进行平均后,在分摊到各个进程上去.
PSS情况(实际使用的物理内存(PSS)
- USS-(unique set size): 进程独自占用内存
只计算进程独自占用的内存大小,不包含任何共享的部分。
USS和PSS仅包括物理内存使用。它们不包括swapped out to disk。
内存可以根据进程、用户、mapping、system-wide以文本或图形化输出。
安装smem
ubuntu
sudo apt-get install smem
centos
yum install epel-release
yum install smem python-matplotlib python-tk
或:
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
如何使用
Using smem
Show basic process information smem
Show library-oriented view smem -m
Show user-oriented view smem -u
Show system view smem -R 4G -K /path/to/vmlinux -w
Show totals and percentages smem -t -p
Show different columns smem -c "name user pss"
Sort by reverse RSS smem -s rss -r
Show processes filtered by mapping smem -M libxml
Show mappings filtered by process smem -m -P [e]volution
Read data from capture tarball smem --source capture.tar.gz
Show a bar chart labeled by pid smem --bar pid -c "pss uss"
Show a pie chart of RSS labeled by name smem --pie name -s rss
在输出时显示单位,方便查看实际内存占用大小
参数说明
-k 显示易读内存单位
-s #进行排序
smem -k -s
如果我们想要查看特定应用程序使用内存情况,例如 Firefox,那么我们可以配合 grep 命令使用,同时使用 -p 选项以百分比形式查看内存使用情况。
smem -m -p | grep firefox
指定查看谋个用户进程使用内存大小
smem -P mysql #(大写P)
smem -k -P mysql
smem 命令还可以显示每个用户的内存使用情况,需要使用 -u 选项:
[root@dev workspace]# smem -u -p
User Count Swap USS PSS RSS
daemon 1 N/A 0.00% 0.00% 0.01%
_rpc 1 N/A 0.00% 0.01% 0.02%
ntp 1 N/A 0.01% 0.01% 0.02%
systemd-network 1 N/A 0.01% 0.01% 0.03%
messagebus 1 N/A 0.01% 0.01% 0.03%
syslog 1 N/A 0.02% 0.02% 0.03%
systemd-resolve 1 N/A 0.03% 0.03% 0.05%
root 41 N/A 2.58% 3.51% 5.08%
minima 4 N/A 26.81% 26.99% 27.57%
[root@dev workspace]#
使用 -w 选项查看系统内存使用情况
[root@dev workspace]# smem -w -p
Area Used Cache Noncache
firmware/hardware 0.00% 0.00% 0.00%
kernel image 0.00% 0.00% 0.00%
kernel dynamic memory 29.97% 28.47% 1.50%
userspace memory 30.56% 1.69% 28.87%
free memory 39.47% 39.47% 0.00%
[root@dev workspace]#
命令包括内核代码的大小以及在系统范围内(-w)输出中的静态分配数据:
smem -K /path/to/kernel/image/on/disk [option]
物理内存总大小。这个命令让semem检测 固件和硬件使用的内存
smem -R REALMEMSIZE [option]
用户维度查看
smem -u
结果:
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 -t -p
结果:
PID User Command Swap USS PSS RSS
53369 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
53387 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
36227 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
36232 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
36233 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
46733 xxxxxxxy /usr/bin/php-cgi 0.05% 0.00% 0.00% 0.00%
46739 xxxxxxxy /usr/bin/php-cgi 0.05% 0.00% 0.00% 0.00%
3623 root ssh-agent 0.01% 0.00% 0.00% 0.00%
53378 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
53396 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00%
7855 root rpc.rquotad 0.00% 0.00% 0.00% 0.00%
7480 root ssh-agent 0.01% 0.00% 0.00% 0.00%
34832 root ssh-agent 0.01% 0.00% 0.00% 0.00%
7334 root /sbin/mingetty /dev/tty1 0.00% 0.00% 0.00% 0.00%
7336 root /sbin/mingetty /dev/tty2 0.00% 0.00% 0.00% 0.00%
7338 root /sbin/mingetty /dev/tty3 0.00% 0.00% 0.00% 0.00%
.....
..
...
65304 vivek /usr/bin/php-cgi 0.00% 0.16% 0.27% 0.61%
33931 vivek /usr/bin/php-cgi 0.00% 0.14% 0.28% 0.44%
47933 squid (squid) -f /etc/squid/squid 0.11% 2.69% 2.69% 2.71%
28410 mysql /usr/libexec/mysqld --based 0.01% 3.67% 3.67% 3.68%
48440 memcached memcached -d -p 11211 -u me 0.01% 4.41% 4.41% 4.41%
-------------------------------------------------------------------------------
191 24 5.36% 16.08% 19.43% 27.24%