由于在运行几天后大量使用交换,我正在对一台机器进行故障排除。系统有 16 GB 的 ram,一般应该没问题,除了大量的 ram 被缓存使用而不是在需要时释放。持续使用会使系统陷入停顿,而缓存中会占用多达 12 GB 的空间。
在你提到它之前,我很清楚Linux Ate My Ram。
运行 3 - 4 天后免费的典型显示是:
total used free shared buff/cache available
Mem: 15G 4.4G 184M 280M 10G 116M
Swap: 15G 7.8G 8.1G
Run Code Online (Sandbox Code Playgroud)
为了排除故障,我已将交换率降至零。
$ cat /proc/sys/vm/swappiness
0
Run Code Online (Sandbox Code Playgroud)
此外,我无法手动调用具有任何有意义效果的缓存刷新。
$ sudo su -c "free -h && sync && echo 3 > /proc/sys/vm/drop_caches && free -h"
total used free shared buff/cache available
Mem: 15G 4.4G 166M 280M 10G 104M
Swap: 15G 7.8G 8.1G
total used free shared buff/cache available
Mem: 15G 4.4G 186M 280M 10G 115M
Swap: 15G 7.8G 8.1G
Run Code Online (Sandbox Code Playgroud)
我想知道这是否与 Skylake 的车载视频有关。无论如何,我不确定如何继续分析这个问题,大多数互联网资源都说缓存使用是正常的,并且会根据需要免费 - 显然不是。我接下来应该看哪里?
要了解“内存缓存”使用slabtop,使用-s您可以对输出进行排序并c用于缓存大小,因此请使用:
sudo slabtop -s c
Run Code Online (Sandbox Code Playgroud)
对我来说,大部分缓存都与 inode_cache
关于“交换”,您可以使用status 每个进程目录中的文件/proc来找出其中哪个正在使用交换。
对于特定程序:
cd /proc/$(pgrep -x programname)
grep -i swap status
Run Code Online (Sandbox Code Playgroud)
要获取所有进程缓存大小的列表:
cd /proc
find -maxdepth 2 -iname status -exec grep -i -e name -e swap {} \; -exec echo "---" \;
Run Code Online (Sandbox Code Playgroud)
输出将类似于:
---
Name: atd
VmSwap: 0 kB
---
Name: rsyslogd
VmSwap: 0 kB
---
Name: cron
VmSwap: 0 kB
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12046 次 |
| 最近记录: |