PHP日志写满磁盘后接口为什么异常

最近处理一个 PHP 项目时遇到一个挺隐蔽的问题:后台代码没有改动,数据库也能正常连接,但接口开始偶发 500,上传文件失败,部分页面甚至直接打不开。刚开始一直在查 PHP-FPM 和 Nginx 配置,最后登录服务器执行 df -h 才发现,网站所在磁盘已经被日志文件占满了。

继续排查发现,项目为了方便调试,把接口请求参数、第三方返回内容和异常信息全部写进了同一个日志文件。平时一天只有几十兆没什么感觉,后来接口调用量增加,再加上某个失败任务不断重试,日志每天增长几个 G,最终把磁盘空间全部吃完。

磁盘满以后,影响的不只是"不能继续写日志"。PHP Session、缓存文件、上传临时文件、数据库临时数据都可能因为无法写入而出问题,所以表面看到的报错会非常杂,很容易误判成程序突然坏了。

后来把日志按日期拆分,只保留固定天数,同时增加定时清理和磁盘空间监控。高频接口也不再记录完整请求,只保留必要字段和异常内容。

现在遇到服务器突然出现一批没有明显关联的异常,我通常都会顺手检查一次磁盘。很多时候代码没有问题,只是服务器已经没有空间继续正常工作了。

#PHP开发 #服务器运维 #日志管理 #接口排查

相关推荐
Sarvartha32 分钟前
对象创建与引用
java·开发语言
hasty1 小时前
限制写了却没生效:OpenTelemetry Go 的 Unicode 截断边界
开发语言·后端·golang
编码者卢布2 小时前
【App Service 】WebJobs 多实例实验:谁在运行,什么时候运行?
开发语言·python
kaixin_learn_qt_ing2 小时前
Qt抽屉窗体实现demo
开发语言·qt
quantdash_cc2 小时前
Python 获取实时行情后如何进行批量筛选?从全市场快照到策略候选池
开发语言·python·数据分析·量化交易·股票数据·quantdash
论文复现现场2 小时前
论文复现看到“RTX 3090 or higher”:显存、CUDA、batch size 与 OOM 怎么判断?
开发语言·pytorch·batch·cuda·rtx3090
智鸟科技GemeOpen开发者智能设备2 小时前
GemeOpen 智能音箱 GSSM0B - 播放控制(Java示例)
java·开发语言·智能音箱
m0_380743873 小时前
PHP 8.3 接口返回数据为空怎么排查
开发语言·php
谢亮_vipxieliang3 小时前
Java 21 新特性实战:Record、Sealed、模式匹配
java·开发语言
霸道流氓气质3 小时前
LLM 应用限流与熔断机制完全指南:从多层防护架构到Java生产级弹性实战
java·开发语言·架构