记一次tmp目录被写满导致服务器崩溃的产线事故

本文讲述了由于服务器tmp目录被大量临时文件填满导致服务失去响应的问题。作者通过排查定位到定时任务生成的大文件是问题根源,并提出通过修改`java.io.tmpdir`系统属性来指定其他大容量目录,以防止类似问题再次发生。解决方案包括设置环境变量或启动参数,以确保服务器稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在产线报警群报出了我们某个服务失去响应的情况,打开跳板机登录发现果然登录不上了。

开始排查问题,这个问题已经不是第一次了,时间也很固定,每天9点多开始,初步定位是定时任务引起,看xxl-job面板,发现确实有两个定时任务是9点开始执行的。经过与运维沟通,确定是tmp目录(我们只有3.6G写满导致),开始检查代码,发现的确有很多指定了/tmp目录的代码,而且定时任务产生的文件非常大且多,最终导致服务器失去了响应。

在我们开发过程中,我们应该尽量少用tmp目录,在开发过程中我们指定其他位置。

当我们用

File file = File.createTempFile("1111", "txt");创建临时文件时,文件一般放在java.io.tmpdir指定的位置,如果量很大,就会导致tmp目录占满,最终导致服务器失去响应。

因为tmp目录比较小,我们可以改成其他位置,我们可以采用如下两种方式:

System.setProperty("java.io.tmpdir", "/opt/work");

或者:

java -Djava.io.tmpdir=/path/to/tmpdir 

### 服务器上 `tmp` 文件夹的删除及其影响 #### 安全性和风险评估 在Linux操作系统中,`/tmp`是一个临时存储区域,用于存放程序运行时生的临时文件。如果直接手动删除整个`/tmp`目录而不是其中的内容,则可能导致系统不稳定甚至崩溃[^1]。 为了确保系统的正常运作,在考虑清理或修改此目录之前应当充分理解其作用: - `/tmp`中的数据通常不具备持久性,重启后会丢失; - 许多应用程序依赖于这个位置保存短期使用的资源; - 不当操作可能会中断正在执行的任务或者破坏某些服务的状态。 因此,建议不要简单地移除整个`/tmp`文件夹而是按照正确的方法来进行必要的维护工作。 #### 正确的操作方式 对于希望调整`/tmp`内文件清除策略的情况,可以在Ubuntu 16.10及以上版本利用`/etc/tmpfiles.d`下的配置文件来设定具体的规则。例如,通过创建自定义配置使得只有超过一定时间未访问过的项目才会被自动清理掉,从而减少误删有用资料的风险[^2]。 具体来说,可以通过编辑位于`/etc/tmpfiles.d/custom.conf`这样的文件并加入如下内容实现更精细的时间管理: ```bash # /etc/tmpfiles.d/custom.conf v /tmp 1777 root root 20d ``` 上述命令表示任何存在于`/tmp`下超过20天的文件将会被定期处理工具(如由`systemd-tmpfiles-clean.timer`触发的服务)所移除[^4]。 #### 自动化解决方案 除了手工编规则外,还可以借助系统自带的功能完成周期性的整理任务。比如基于Systemd定时器(`timer`)机制安排例行检查与清理作业;或者是针对特定环境采用对象存储服务(OSS)提供的生命周期管理特性来自动化归档和淘汰过期的对象[^5]。 总之,在决定如何处置服务器上的临时文件前应权衡利弊,并优先选用官方推荐的安全途径实施变更。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值