“vmstat”表示存在分页活动 - 如何识别交换过程?

“vmstat”表示存在分页活动 - 如何识别交换过程?

我有一个场景,我可以使用 .ubuntu 看到我的 Ubuntu 16.04 笔记本电脑上有分页活动vmstat 1 100

由于当前负载的巨大规模,预计进程或多或少会被换出到磁盘,这很好。但是,我想确定那些导致页面交换的因素每时每刻(如 所示vmstat),因为这可能表明内存分配可以改进。

我的系统管理技能有点生疏,但我在 root shell 中很舒服。

我应该使用哪些命令来识别导致交换活动的进程?

答案1

对于性能问题(例如 CPU iowait 时间较长),通常最好监视这些事情随着时间的推移而不是事后,特别是当短期进程可能是罪魁祸首时。在 Linux 上,您可以交互使用的一种工具是iotop(固定链接)(另请参阅以下问题的答案这个关于跟踪磁盘 I/O 的问题)。您可以编写此脚本(批处理模式)或以交互方式运行它top,例如使用光标键按 SWAPIN 排序,或使用该-o选项以使输出不那么混乱。您将需要 Python ≥2.7 并启用各种内核配置参数(请参阅iotop'sREADME或手册页)。

不是仅使用来自/proclike 的数据vmstat,而是iotop使用taskstats,这使用网联IPC有效地直接从内核到用户空间提供进程统计。

在大多数版本的 Linux 上,默认为“交换性“设置为 60,当系统适度繁忙时,看到分页活动是相当正常的:内核会先发制人地将很少使用的进程页面写入交换,而不是清除最近使用的磁盘缓存页面。(有一个相关参数vfs_cache_pressure需要调整一些缓存行为。)如果您观​​察到持续不断的分页,那么可能不仅仅如此。

否则,如果您担心交换使用现在而不是随着时间的推移:内核跟踪 中每个进程的交换使用情况/proc/PID/status。你可以使用gawk(≥v4.0)快速做一些事情:

gawk '/^Name:/{nm=$2} /^Pid:/{pid=$2} /^VmSwap:/{sw=$2} 
  ENDFILE{printf("%-24s %6i %6ikiB\n",nm,pid,sw)}' /proc/[0-9]*/status | 
sort -h -k 3

根据文档换出的 shmem(共享内存)此处不计算在内,但希望您不需要关心这一点。埃里克·永斯特罗姆的getswap.sh剧本也可以使用,有更高级的版本这个答案

答案2

尝试以下命令:

 ps -eo pid,cmd,vsz

这将以进程 ID、执行的命令和进程的虚拟内存大小(以 KiB 为单位)列出进程

相关内容