• Linux内存状态监测工具smem命令 | 如何在#linux OS下找到特定进程的交换(swap)空间使用情况?


    如何在#linux OS下找到特定进程的交换空间使用情况?

    原文链接: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/

    topfree命令显示服务器中的剩余物理和交换内存的总量。

    如何确定哪个进程使用Linux操作系统下的交换空间?我如何找出诸如memcached之类的特定进程的交换空间使用情况?

    您可以使用以下任何一种技术,但请记住,由于shared pages,没有可靠的方法来获取此信息[1]

    1. /proc/meminfo - 显示关系统内存使用的统计信息。free使用它来报告系统上的free内存和使用的内存(物理和交换)的量以及内核使用的共享内存和缓冲区

    2. /proc/$ {pid}/smaps/proc/$ {pid}/status/proc/$ {pid}/stat/stat:使用这些文件查找有关,使用其PID使用的查看内存,页面和交换的信息。

    3. smem - 此命令(Python脚本)报告了与共享内存分配的内存使用情况。

    找出进程ID以及swap使用

    pidof memcached
    
    • 1

    要查看Memcached使用的交换空间(PID#48440),请输入(#2):

    grep --color VmSwap /proc/48440/status
    
    • 1

    或以下awk命令(#3):

    awk '/VmSwap/{print $2 " " $3}' /proc/48440/status
    
    • 1

    在这里插入图片描述

    ## bash for loop ##
    for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done
    
    • 1
    • 2
    ## 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
    
    • 1
    • 2

    top命令

    top
    
    • 1

    按照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
    
    • 1

    centos

    yum install epel-release
    yum install smem python-matplotlib python-tk
    
    • 1
    • 2

    或:

    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
    
    • 1
    • 2
    • 3
    • 4

    如何使用

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在输出时显示单位,方便查看实际内存占用大小
    参数说明
    -k 显示易读内存单位
    -s #进行排序

    smem -k -s
    
    • 1

    如果我们想要查看特定应用程序使用内存情况,例如 Firefox,那么我们可以配合 grep 命令使用,同时使用 -p 选项以百分比形式查看内存使用情况。

    smem -m -p | grep firefox
    
    • 1

    指定查看谋个用户进程使用内存大小

    smem -P mysql  #(大写P)
    smem -k -P mysql
    
    • 1
    • 2

    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]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用 -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]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    命令包括内核代码的大小以及在系统范围内(-w)输出中的静态分配数据:

    smem -K /path/to/kernel/image/on/disk [option]
    
    • 1

    物理内存总大小。这个命令让semem检测 固件和硬件使用的内存

    smem -R REALMEMSIZE [option]
    
    • 1

    用户维度查看

    smem -u
    
    • 1

    结果:

    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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6


    查看所有进程和百分比占用情况:

    smem -t -p
    
    • 1

    结果:

     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% 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    题解 P8757 [蓝桥杯 2021 省 A2] 完美序列
    【学习笔记】数论-乘法逆元
    国赛练习(1)
    同源策略、跨域与JSONP
    2024.6.12 作业 xyt
    CSAPP datalab
    【德哥说库系列】-ASM管理Oracle 19C单实例部署
    数据治理系列:数仓建模之数仓主题与主题域
    我的第一个Spring Boot应用实现步骤以及遇到的问题
    Python 将两个三维模型(obj)合成一个三维模型(obj)
  • 原文地址:https://blog.csdn.net/inthat/article/details/127708199