首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linux /proc/pid/smaps比例交换(类似于Pss,但用于交换)

Linux /proc/pid/smaps比例交换(类似于Pss,但用于交换)
EN

Stack Overflow用户
提问于 2014-12-02 19:16:59
回答 3查看 1.2K关注 0票数 17

(从Linux内核source看) /proc/pid/smaps中的Swap:指标似乎是给定pid可访问的总交换。

在涉及共享内存的情况下,这似乎是对实际交换使用的过度近似。例如,当将父pid与其分叉的子pid的交换使用相加时,如果它们在交换中具有公共共享存储器,则该部分(交换的共享存储器)似乎被计数多次(每个pid一次)。

我的问题是,是否有一种方法可以根据共享它的进程的数量计算出一个公平的交换使用度量(类似于Pss:)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-30 20:48:32

您只需将Swap值除以共享此虚拟内存区的进程数即可。

实际上,我不知道如何获得共享VMA的进程数。但是,有时可以通过将RSS除以PSS来计算它。当然,它只有在PSS != 0的情况下才能工作。

最后,您可以使用下面的perl代码(将smap文件作为参数传递):

代码语言:javascript
复制
#!/usr/bin/perl -w
my ($rss, $pss);
my $total = 0;

while(<>) {
  $rss = $1 if /Rss: *([0-9]*) kB/;
  $pss = $1 if /Pss: *([0-9]*) kB/;
  if (/Swap: *([0-9]*) kB/) {
    my $swap = $1;
    if ($swap != 0) {
      if ($pss == 0) {
        print "Cannot get number of process using this VMA\n";

      } else {
        my $swap = $swap * $rss / $pss;
        print "P-swap: $swap\n";
      }
      $total += $swap;
    }
  }
}
print "Total P-Swap: $total kB\n"
票数 1
EN

Stack Overflow用户

发布于 2015-02-03 04:56:11

您可以从http://northernmost.org/blog/find-out-what-is-using-your-swap/改编此脚本

代码语言:javascript
复制
#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
#
## I've made some modifications to match my purposes.
## PIDs that don't use swap are printed to STDERR and not STDOUT...

OVERALL=0
PROGLIST=$(ps axw -o pid,args --no-headers)

while read PID ARGS; do
    SUM=0
    if [ -f "/proc/$PID/smaps" ]; then
        for SWAP in $(fgrep 'Swap' /proc/$PID/smaps 2>/dev/null | awk '{ print $2 }') ; do
            let SUM=$SUM+$SWAP
        done
    fi
    if [[ $SUM > 0 ]]; then
        printf "PID: %-6s | Swap used: %-6s KB   => %s\n" $PID $SUM "$ARGS"
    else
        printf "Not using Swap, PID: %-6s => %s\n" $PID "$ARGS" 1>/dev/stderr
    fi
    let OVERALL=$OVERALL+$SUM

done <<<"$PROGLIST"

echo "Overall swap used: $OVERALL"
exit 0;

This link could be helpful too.

票数 1
EN

Stack Overflow用户

发布于 2014-12-17 15:42:03

您可以使用工具smem的输出。它有多个输出和过滤选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27248065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档