我有一台运行 ubuntu 20.04 的服务器
如果我运行df
第一行是:
/dev/root 35511052 3512708 31981960 10% /
运行 2 秒后我得到
/dev/root 35511052 3512900 31981768 10% /
问题是几周后硬盘就满了。如果我重新启动系统,它会回到大约 10% 满。有什么想法可以让我的空间被占用,或者如何找到它?
我还应该提到,我在系统上安装了几个驱动器,因此诸如sudo du -a / | sort -n -r | head -n 20
返回其他驱动器上的大文件而不是不应该写入任何内容的根分区之类的命令。
更新 1: 另一个问题建议做以下事情:
sudo du -hsc /tmp
返回 56kb,清除后降至 4kb 并停留在那里
sudo du -hca --time / | grep -E "^[0-9\.]*[G]"
这返回
1.7G 2021-01-04 20:23 /snap
1.6G 2021-01-08 06:19 /usr
两次都是几个小时/几天前的事了。不过我会继续监控,也许当硬盘越来越满时,就会出现一个额外的文件。
我发现的另一个问题是,也许挂载实际上并没有被挂载,但我已经仔细检查过,mysql 和程序工作目录都已正确挂载。
更新 2:
从更新 1 开始再次运行相同的测试:
sudo du -hsc /tmp
返回 4K
sudo du -hca --time / | grep -E "^[0-9\.]*[G]"
1.7G 2021-01-04 20:23 /snap
1.6G 2021-01-08 06:19 /usr
有趣的是,在两种情况下,由多个驱动器组成的 / 文件夹都返回 105GB,但df
返回的空间比昨天我的根分区多 3GB。
更新 3:
找到了使用的建议sudo ncdu -rx /
有趣的是df
返回 6.0GiB 但sudo ncdu -rx /
返回 3.2GiB
这有帮助吗?我认为问题与 crontab 运行的一个应用程序有关,该应用程序向控制台写入了大量内容。
更新 4: 找到问题了。确实有一个 2.8GB 的临时文件,但它已被应用程序删除但未关闭,因此仍然占用空间。如果我杀死 pid,空间就会被清除。有什么好方法可以自动杀死进程并在计时器上重新启动它?
更新 5: 服务是一个从 crontab 运行的加密钱包,使用它来获取链数据。我确实设法大大减缓了内存泄漏,但无法阻止它。此外,钱包来自一个旧的死项目,代码不再可构建,或者需要修改代码。