使用从 USB 记忆棒运行的 Kubuntu 20.04。因此,/cow
上面安装了一个覆盖文件系统/
。 USB 记忆棒的总容量为 32 GB,但cow
只分配给覆盖文件系统 16 GB。我的计算机的 RAM 大小为 32 GB(如实用程序“免费”总计所示)。
我当前状态的原因是我忘记禁用互联网连接。
之前我也用过aptitude来搜索,但是并没有刻意去下载什么东西。一夜之间,“牛”中的 16 GB 大约已使用了 2 GB。df -Th -a
显示“已使用”从 21% 增长到 33%。
现在我正在调查,谁做了什么。
为此,我运行了(几个小时)一个自己编写的程序wels_fullpath
(基于 bash globstar 和**
)/
,将输出通过管道传输到sort
(用于按时间排序),然后从 sort 传输到less
。当它运行时,我必须注意哪些内存用于sort
和 的缓冲区less
。 (我现在忽略了排序)。
为此,我不断运行该实用程序来观察和 的watch
变化:df
free
watch -d "df -T -a >/tmp/WEx_df__2; diff -U0 /tmp/WEx_df__1 /tmp/WEx_df__2; free -w -h"
strace
表明wels_fullpath
正在发挥作用。
但无论是在df
还是在都free
没有报告变化。
那么问题来了,df
一些不断增长的缓冲区应该出现在列表的什么位置呢?
我已经阅读了文档,less
并且在互联网上进行了长时间的谷歌搜索。有一些关于 less 和 buffers 的好文章。但没有任何地方描述在 FHS 中哪里应该看到较少的缓冲区以及使用什么名称。
- 附录:
一个新问题出现了。
我已经改变了我的调用顺序,不再在这里使用“less”。
尽管如此,我的问题对我来说仍然很重要。
也许对于 less 的缓冲区所在的地方,我还没有写出适当的术语“存储”。我已经“在内存或磁盘上”。较少的缓冲区应该对“free”或“df”产生影响。这应该在一些文档中注明。
现在我的命令链是:
/.../wels_fullpath -d / 2>/dev/null | grep -v -e "^fd1" | grep -v -e "^fd1" | grep -v -e "^fd1" |排序-s -r -k7,8 >/tmp/WEx01
正如我在“top”(默认情况下未安装“htop”)中看到的那样,执行尚未开始:
顶部 -p <PID>
显示:
PID 用户 PR NI VIRT RES
2159985 根 20 0 242132 235816
SHR S %CPU %MEM 时间+
3160 R 99.3 0.7 1634:33
命令
wels_完整路径
在我的程序中我使用了一个数组。并且在读取源“/”中的文件时,将它们写入数组中。因此 VIRT 和 RES 不断增长,好吧。
但我永久运行的“df”和“free”的“手表”并没有显示这些变化。 “免费”中的值上下变化很小。
因此,我的附加问题是:
为什么我的程序不断增长的内存使用量没有反映在“空闲”中?
Linux、Kubuntu 中是否有一个实用程序可以分析和显示内存的各个方面(如“df”、“du”)?
问候 Antandhidh
哦,对不起。我记住并发现:
/proc/meminfo 给出了很好的概述。 pmap 给出每个进程的内存使用情况。
抱歉打扰您了。
问候 Antandhidh
答案1
less
不在文件系统中的任何位置存储缓冲区。它的缓冲区可使用--buffers
和--auto-buffers
选项进行配置,保存在内存中(可能在交换区中)。