Adobe Commerce的/tmp mount full故障诊断
本文提供了一个解决方案,用于解决/tmp装载已满、站点可能已关闭以及无法通过SSH连接到节点的问题。
描述 description
受影响的产品和版本
Adobe Commerce 2.3.0 - 2.3.6-p1, 2.4.0 - 2.4.2
问题
/tmp装载已满可能会导致一系列可能的症状,其中包括以下错误:
-
SQLSTATE
[HY000]:常规错误: 3写入文件时出错 -
错误代码: 28
-
设备(28)上没有剩余空间
-
error session_start(): failed:设备上已无剩余空间
-
错误1 (HY000):无法创建/写入文件“/tmp/*”
-
SQL错误: 3,SQLState: HY000
-
常规错误: 1021磁盘已满(https://experienceleague.adobe.com/tmp?lang=zh-Hans)
-
*无法通过SSH访问节点:
bash:无法为here-document创建临时文件:设备没有剩余空间*
-
errno: 28“设备上没有剩余空间”
-
mysqld:磁盘正在完全写入“/tmp”
-
[错误]mysqld:磁盘已满(https://experienceleague.adobe.com/tmp?lang=zh-Hans) -
SQLSTATE
[HY000]:常规错误: 1无法创建/写入文件“/tmp/” -
SQLSTATE
[HY000]:常规错误:打开文件“/tmp/”时资源不足23 -
错误代码: 24“打开的文件太多”
-
获取错误: 23:打开文件时资源不足
重现问题的步骤:
要检查/tmp装载的满度,请在CLI中切换到/tmp并运行以下命令: df -h
预期结果:
低于80%。
实际结果:
100%。
原因
/tmp装载包含的文件过多,原因可能是:
- 错误的SQL查询生成大型和/或过多临时表。
- 服务写入
/tmp目录。 - 数据库备份/转储保留在
/tmp目录中。
解决方法 resolution
您可以执行一些操作以一次性释放一些空间,并且有一些最佳做法可防止/tmp变得满满。
检查并释放索引节点
确保有足够的可用inode。 为此,请运行以下命令: df -i
输出将类似于以下内容: Filesystem Inodes Used Free Use% Mounted on /dev/nvme2n1 655360 1695 653665 1% /data/mysql
检查Use%是否为< 70%。 Inode与文件相关联。 如果从分区中删除文件,将释放inode。
检查并释放存储空间
有几个服务可能正在将文件保存到/tmp。
检查并释放MySQL空间
按照云基础架构上Adobe Commerce上的MySQL磁盘空间不足>中的说明检查并释放支持知识库中的存储空间。
检查Elasticsearch栈转储
警告
栈转储包含可能对调查问题有用的日志记录信息。 考虑将它们存储在单独的位置至少10天。
使用系统shell删除栈转储(*.hprof): find /tmp/*.hprof -type f -delete
如果您无权删除由其他用户(在本例中为Elasticsearch)创建的文件,但您看到文件很大,请创建支持工单来处理这些文件。
检查数据库转储/备份
警告
数据库备份通常是为了某种目的而创建的。 如果您不确定是否仍需要该文件,请考虑将其移动到单独的位置,而不是删除它。
检查/tmp中的.sql或.sql.gz文件并清理它们。 这些可能是在备份期间或使用mysqldump工具手动创建数据库转储时由ece-tools创建的。
最佳做法
要避免在/tmp已满时出现问题,请遵循以下建议:
- 请勿使用MySQL进行搜索。 Elasticsearch搜索功能通常无需创建大多数繁重的临时表。 请参阅我们的开发人员文档中的配置Adobe Commerce以使用Elasticsearch。
- 避免在没有索引的列上运行
SELECT查询,因为这会占用大量临时磁盘空间。 您还可以添加索引。 - 通过在CLI中运行以下命令来创建cron以清理
/tmp:sudo find /tmp -type f -atime +10 -delete