虛擬主機空間概念跟你想的不一樣

如果我們購買的主機是每月5美元,提供12G的空間(LINODE),可以儲存70萬個檔案到底夠不夠呢?以安裝一個wordpress加上一堆外掛程式+themes來說,wp主體的程式大約4000個左右,其他的plugins+themes,再加個2倍於wp主體程式約8,000個好了,也不過12,000個,70萬可以安裝多少個wp呢?用於基本用途上,應該不會有不夠的疑慮。那麼到底的我的inode空間被誰吃掉了?在找出這個問題前,讓我們先來看看無限空間虛擬主機的迷思~

無限空間的虛擬主機迷思?

每個月只要美金5.95,大約NT.180元,每年只要NT.2160,就可以享有無限空間和流量的虛擬主機,只是天下沒有白吃的午餐,更沒有賠錢的生意,後面藏著更多的貓膩,是你不知道的,如果一開始沒有仔細看清楚相關TOS(Teams of Service),但我不知道有多少人會為了每個月180元,去仔細看這些英文的條款。

接著我們從knowledge base可以裡面可以查到inode limits,真正的細節恐怕是在這裡了,一般的分享式主機,基本上擁有50000個inodes,最高可以到20萬,不過一旦到達20萬,這個帳號會直接被停權了。

甚到還有限制CPU使用率的,只要超過限制的3%或5%,直接停權。

別再相信枱面上的口號了,連我們日常的購買的泡麵都寫圖片僅供參考了,購買基金悠關消費者權益最重要的事,都用最小號的字體呈現,用最快的語速播報,似乎就害怕你仔細聽到什麼不對勁的地方。

虛擬主機商絕對不是笨蛋,虧本的生意不會有人作的,只在於你懂不懂,「因為內行看門道,外行看熱鬧」,對於一些剛入門的使用者來說,會覺得花一樣的錢,擁有無限空間似乎很爽,但深一層的思考,其實虛擬主機空間計算方式跟你想的不一樣。

磁碟明明還有很多空間,但是偏偏無法建立新檔案,Email也發送不出去,系統明明可以正常運作,例如:後台可以正常的新增資料到資料庫,但就是無法處理上傳檔案或新增檔案等相關的動作,到底發生了什麼問題呢?

虛擬主機推薦VPS

如果可以的話,強烈推薦直接使用VPS,最算用最低的等階,所享有的空間、CPU和流量等資源,都遠遠高於shared hosting;而且以 LINODE VPS虛擬主機 來說,每個月只要5元美金。

管理主機最難的不是安裝,而是解決莫名的問題

曾經在銀行的資訊部門工作過的我,以前對於主管為什麼偏好天價的IBM公司,心理總OS,真的要需要花大錢請這些神花費等級的人員和顧問嗎?離開銀行以後,漸漸有些體會,這些神級的顧問,別人處理問題找答案可能要48小時,但IBM他可能在1小時內,可以準確的判斷問題並保證處理好,光這一點,一切都值得了;因為對銀行而言,對主管而言,錢能解決的問題,通常就不是大問題,因為如果系統的停機不是常態性的維護而是突發,又沒有直正找出問題點,就猶如芒刺在背一樣,彷彿一顆不定時炸彈,不知道什麼時候會突然引爆,小則記個缺點像少一塊肉,大則傷筋動骨被調職或下台一鞠躬;業界甚至盛傳要在主機上放乖乖或主機一整年都不敢重新開機,除非當機,為什麼?不怕一萬只怕萬一,一重開機要是哪一個環結出了狀況,一定人仰馬翻。

往常,只要到服務系統的後台,填寫並送出客服單,就會收到Email提醒信件,但突然之間沒有收到,像這樣的突發的問題,解決的思維模式,就先從源頭找起就對了,先查看mail log,一查之下,結果竟然發現,空間不足,但不可能吧!

2019-06-17 15:24:28 1hc0D4-0001xC-4b Couldn't open journal file /var/spool/exim4/input//1hc0D4-0001xC-4b-J: No space left on device

查詢主機剩餘空間

空間不足,再立馬查詢主機空間

# df -h

-h 是指顯示為人類使用的單位,像Mega or Giga Bytes

空間明明還有33%,3.8G,明明空間很足夠啊!到底怎麼一回事呢?

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        12G  7.5G  3.8G  67% /
devtmpfs        483M     0  483M   0% /dev
tmpfs           486M     0  486M   0% /dev/shm
tmpfs           486M   50M  437M  11% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           486M     0  486M   0% /sys/fs/cgroup
tmpfs            98M     0   98M   0% /run/user/0

答案揭曉,磁碟空間是還有很多,但另一個限制檔案數量的老大叫inode,inode卻滿了

inode滿了怎麼辨?

先查出整個系統inode的使用狀況,其實inode已經用爆了,這會造成一個非常嚴重的問題,系統的Email寄不出去,客戶該收到的Email沒收到嚴不嚴重!請自行想像~

查詢inode使用狀況

# df -i

這時如果只是依照網路上的建議刪除一些cache暫存或清除舊安裝檔,可以清出來的inode數量其實非常有限,沒有找出真正的原因,其實很快又要爆了。

接著再透過一層一層的資料夾找出哪些是占用了最多的inode,我們可以使用底下指令協助我們快速的查出該資料夾中,下一層哪些資料夾占用了最多的inode。

# sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

找出元兇,接著就是清理的動作了。

接著當我們要使用 rm 想要刪除這數十萬的session垃圾時,竟然又出現了一個錯誤,是老天爺要懲罰我嗎?考驗我的能力嗎?沒關係有Google大神,一切搞定

/bin/rm: Argument list too long
# find . -name "*.tmp" -delete

清完垃圾,inode多出76%

有發現一件很扯的事情嗎?清完php session以後,inode空間竟然多出了57萬,整整多出76%。

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/root      746496 176717 569779   24% /
devtmpfs       123564    393 123171    1% /dev
tmpfs          124268      1 124267    1% /dev/shm
tmpfs          124268    585 123683    1% /run
tmpfs          124268      3 124265    1% /run/lock
tmpfs          124268     17 124251    1% /sys/fs/cgroup
tmpfs          124268      4 124264    1% /run/user/0

找出讓inode爆了的主因

接下來如果只是這樣清完就了事的話,那就有點隨便了,因為這其實就是隱藏性的資訊安全管理問題,沒有找出問題點,下次一定會再爆發。

根據經驗如果程式語言是使用php的話,有很大的可能性是因為session太多,系統又沒有自動清理,這時候只要清理了session,馬上就可以把inodes使用數量清出來囉!但後續呢?請將底下的指令安排到cron job中吧!

cron job定期自動清理

# find /home/air/tmp -type f -name 'sess_*' -ctime +5 -delete

程式品質好壞指標之一

為什麼有些程式要價不菲,有些卻只便宜到一個不行,分享一個小故事,買了無限主機空間的小明,有一天突然發現空間爆了,一般正常使用之下,除非使用者大增,不然可能性極低,因此問題通常不在於表面上看的見的問題,通常在於問題背後的問題,你確定你知道除了空間容量之外,原來主機商還會用inode來限制檔案數嗎?

有二套程式都包含原始程式碼,一個售價5000,一個售價50萬,表面上看起來功能很像,但是先別高興的太早,一旦稍懂程式的你看了原始程式碼,才知道吐血,這種程式可以用嗎?除了架構一團亂之外,程式和html直接混搭,沒有任何的程式說明,混搭就算了,還耍帥,把程式碼壓縮空間,去掉所有的段行,更不用說想要看到有縮排了;不用解釋,這個程式碼是無法後續自行維護的,出了Bug,無法解決,就算要解決所需的費用一定遠比5000元還要更高的成本;回到正題,除了程式碼之外,你確定你什麼都可以掌握了嗎?如果程式的資料庫沒設計好,SQL語法沒優化,10個人同時上線沒問題,但是一旦同時50或100個人在線上,資料庫可能就鎖死了;再來Session處理,你確定你的能力可以一眼看出系統不會混亂的產生session嗎?結果造成主機出現慢性疾病,這個疾病不會造成馬上死亡,但會潛伏在系統的安全控管上面,直到有一天突然爆了,可能只是因為這些session檔案是空的幽靈檔案,把正常位置都占滿了。

回覆留言

Please enter your comment!
Please enter your name here