疑難排解Adobe Commerce的/tmp掛載已滿
本文提供當/tmp
掛載已滿、網站可能已關閉,且您無法透過SSH連線至節點時的解決方案。
受影響的產品和版本
- 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-Hant)
- 無法透過SSH存取節點:
bash:無法在此建立暫存檔 — 檔案:裝置上已無空間 - errno: 28 「裝置上已無空間」
- mysqld:磁碟正在寫入'/tmp'
- [錯誤] mysqld:磁碟已滿(https://experienceleague.adobe.com/tmp?lang=zh-Hant)
- SQLSTATE[HY000]:一般錯誤: 1無法建立/寫入檔案'/tmp/'
- SQLSTATE[HY000]:一般錯誤:開啟檔案'/tmp/' 時資源不足23
- 錯誤碼: 24「開啟的檔案過多」
- 發生錯誤: 23:開啟檔案時資源不足
要再現的步驟:
若要檢查/tmp
掛載的滿度,請在CLI切換至/tmp
並執行下列命令:
df -h
預期結果:
低於80%。
實際結果:
大約100%。
原因
/tmp
掛載有太多檔案,原因可能是:
- 產生大型和/或太多臨時資料表的錯誤SQL查詢。
- 服務正在寫入
/tmp
目錄。 - 資料庫備份/傾印保留在
/tmp
目錄中。
解決方案
您可以做一些事來釋放一些空間,有一些最佳實務可防止\tmp
用完。
檢查並釋出inode
確保有足夠的可用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棧積傾印
使用系統殼層移除棧積傾印(*.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
:code language-bash sudo find /tmp -type f -atime +10 -delete
相關閱讀
在我們的支援知識庫中,雲端基礎結構上的Adobe Commerce 🔗的MySQL磁碟空間不足。