如何找出 Linux 中哪些进程正在使用交换空间?

新手上路,请多包涵

在 Linux 下,如何找出哪个进程使用的交换空间更多?

原文由 Shameem 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 351
2 个回答

运行 top 然后按 O p Enter 。现在应该按照它们的交换使用对进程进行排序。

这是一个更新,因为我的原始答案没有提供评论中指出的问题的确切答案。从 htop 常见问题解答

无法获得进程已用交换空间的确切大小。 Top 通过设置 SWAP = VIRT - RES 来伪造此信息,但这不是一个好的指标,因为其他东西(例如视频内存)也计入 VIRT(例如:top 说我的 X 进程正在使用 81M 的交换,但它也报告我的系统整体只使用了2M的swap。因此,我不会在htop中添加类似的Swap列,因为我不知道获取此信息的可靠方法(实际上,我认为无法获取)一个确切的数字,因为共享页面)。

原文由 David Holm 发布,翻译遵循 CC BY-SA 3.0 许可协议

我找到的最好的脚本在这个页面上:http: //northernmost.org/blog/find-out-what-is-using-your-swap/

这是脚本的一种变体,不需要根:

 #!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
# Modified by Marc Methot 2014-09-18
# removed the need for sudo

SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`
    for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done
    if (( $SUM > 0 )); then
        echo "PID=$PID swapped $SUM KB ($PROGNAME)"
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "Overall swap used: $OVERALL KB"

原文由 lolotux 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题