在我的系统上,我使用了一些交换:
undefine@uml:~$ free
total used free shared buffers cached
Mem: 16109684 15848264 261420 633496 48668 6096984
-/+ buffers/cache: 9702612 6407072
Swap: 15622140 604 15621536
Run Code Online (Sandbox Code Playgroud)
如何检查交换中的内容?
我尝试通过进程检查它,但是对于系统 VmSwap 上的每个 pid 都是 0:
undefine@uml:~$ awk '/VmSwap/ {print $2}' /proc/*/status |uniq
0
Run Code Online (Sandbox Code Playgroud)
还有什么可以交换?我想过 tmpfs - 但我重新阅读了 tmpfs-es 上的所有文件 - 它没有刷新交换大小。
KVM/qemu 支持各种类型的缓存——无、直写、回写。
当未指定 cache= 时,如何检查哪个是默认值并在系统上使用?
对于 RHEL6,我发现它是直写的 - 但例如对于 sles,有时它是写回。
在我的系统上,sar报告对磁盘的平均写入速度约为 5MB/s。使用dstat我发现它不是那么永久,但是有 30-50MB/s 的峰值,然后是睡眠。
使用iotop我发现大部分写作都是由一个应用程序完成的(但我不知道它有多确定)。
使用strace并且fatrace我看到该应用程序打开,在不同目录中创建文件,然后关闭/删除它们。有很多文件,但我没有看到strace太多的文字。我试图找出更多使用/proc/pid/fd来查看是否有任何文件不断增加(日志等),但我找不到任何文件。所以我的结论是,所有的写入都是通过应用程序创建的小临时文件完成的。
如何检查每个文件写入了多少?我想要一份报告,其中包含写入每个文件的字节数。
有什么办法吗?我考虑过重写系统调用open并write监视对每个文件的更改,或者使用systemtap但我希望有更简单的方法。