cannot create temp file for here-document: No space left on device(内存爆满)

发布时间 2023-03-29 12:00:53作者: 程序员没有头发

《磁盘满了导致不能创建临时文件》

首先说明一般内存占满的情况:

  • /tmp目录满了(/tmp/tmp/这个目录下一般存着coredump文件;一般重启会删除;或者3天后会自动清除;但是如果短时间内太多临时文件占满内存时,就需要手动删除/tmp/tmp)
  • /var/log目录满了(存放日志文件,当日志太多时,没有及时清理也会导致)
  • /media/nvme挂载满了(需要卸载挂载,再重新挂载到硬盘;一般是/media/nvme目录没有成功挂载到硬盘,而使用了Debian系统自带的内存满了导致)

说正事:

今天发现软件运行失败,于是查看原因,在使用cd自动补全文件名的时候,发现报错:

-bash: cannot create temp file for here-document: No space left on device

0

使用df命令查看系统内存占用情况,大概意思是没有内存空间去创建临时文件了:

0

使用du -sh命令,查看到底是哪一个目录占用内存这么多!!!!

经过du命令查看目录占用内存调试

//首先在/tmp目录下查看每个文件内存占用
du -h
    
//进入/tmp/tmp文件夹,查看当前文件夹的总占用
du -sh /tmp

发现是/tmp/tmp临时文件目录下占用了6G内存(上面图片是我清理完后,所以占用小;没清理前是占用了6G),此文件夹存着一些打印信息、coredump文件,一般是软件产生;

解决方案:

将/tmp/下占用最大的tmp删除即可(由于我们需要找原因,所以需要分析/tmp/tmp文件夹里的临时文件到底是什么)

建议:

先把/tmp/目录下所产生的coredump文件分析一遍(gdb executable_file coredump_file),为什么会产生、哪里产生的,这样就可以避免下次发生同样情况!


还有一种情况是/media/nvme满了,是通过挂载的卸载解决的,/media/nvme/videos一般是这个目录下的视频占用太多,使用了系统的本身内存,这是因为没有成功挂载到硬盘上,所以需要重新挂载硬盘。