Linux

由於 PHP 會話,磁碟 inode 已滿

  • November 6, 2020

我們已經為這個問題苦苦掙扎了 2 年多了。我們有一個電子商務商店,它使用 PHP 會話來儲存使用者購物籃和其他資訊。問題是一段時間後,即使伺服器磁碟上有足夠的可用空間,伺服器也會用完磁碟 inode。然後它將導致整個伺服器崩潰,因為我們無法在磁碟上寫入任何內容。

我們多次將此問題送出給我們的伺服器管理公司,但我們得到的答復是刪除一些會話以釋放 inode。問題是每次我們這樣做時,顧客都會失去他們的購物籃。

解決此問題的解決方案是什麼?將 PHP 會話寫入數據庫需要進行太多重大程式碼更改,而且如果不使用不同的伺服器重新開始,我們就無法增加 inode 數量。

我們已經有一個 cron 作業來刪除上個月沒有修改過的會話文件,但這還不夠,而且隨著網站的不斷增長,inode 問題發生的頻率越來越高。

Zebra Session 充當 PHP 的預設會話處理函式的包裝器,但不是將會話數據儲存在平面文件中,而是將它們儲存在 MySQL 數據庫中,從而提供更好的安全性和更好的性能

它是 PHP 的預設會話處理程序的插入式和無縫替代:PHP 會話的使用方式與使用該庫之前的方式相同;您無需更改任何現有程式碼!

https://github.com/stefangabos/Zebra_Session

正是我想要的。

另一個解決方案:https ://stackoverflow.com/questions/36753513/how-do-i-save-php-session-data-to-a-database-instead-of-in-the-file-system

從系統的角度來看,在真實硬體上,解決方案是創建一個新的文件系統,該文件系統具有不同的inode_ratio甚至是新的 FS 類型,它是圍繞大量小文件設計的。如果您是基於雲的還是託管硬體或“專用”VPS,您的託管服務提供商可能會或可能不會提供此功能。 請參閱下面的編輯

如果您可以將程式碼更改為購物系統,您應該將登錄使用者的購物車儲存在數據庫中,並讓會話正常到期並清理舊的會話文件。會話應該具有相對較短的生命週期,並且應該定期清理/刪除舊的非活動會話的會話文件。

在數據庫中儲存資訊有很多優勢 - 技術(更容易在 CDN 上拆分 Web 伺服器負載)和商業目的(“嘿,你的願望清單中有這個項目有一段時間了,它幾乎缺貨 -現在買!”電子郵件讓我不止一次打開我的錢包),這就是我要去的方向。但至少開始刪除舊的過期會話文件……

編輯添加 -

獲得新 FS 的一種巧妙方法是創建一個適當大小的稀疏文件,使用選擇的文件系統對其進行格式化,然後將其掛載到環回設置上。當然,您需要足夠的空間等來執行此操作….

引用自:https://serverfault.com/questions/978802