OS: CentOS Linux 6.3 x86_64
AP: Nginx 1.2.7 + Php-fpm 5.2.17p1
php.ini 的設定 session.save_path = "2;/tmp2"
我使用 Nginx + Php-fpm, 之前用 mod_files.sh 2 16 /tmp 建立了一個存放php session的陣列目錄, 但是要刪除或進入該目錄都非常慢, 想請教一下該如何處置會比較好?!
ps. 這台目前還是線上機, 我已經用同樣方法再建一個 /tmp2 的目錄。
千萬不要告訴我 rm -rf /tmp 就ok, 因為用top檢查cpu負荷超高!!
我也試過 find /tmp/ -depth -type f -mmin +180 -exec rm -f {} \; &>/dev/null 可是效果都不彰 >"<
afgn提到:
使用 Nginx + Php-fpm, 之前用 mod_files.sh 2 16 /tmp 建立了一個存放php session的陣列目錄, 但是要刪除或進入該目錄都非常慢, 想請教一下該如何處置會比較好?!
ps. 這台目前還是線上機, 我已經用同樣方法再建一個 /tmp2...(恕刪)
這邊有三個地方想要檢查:
建議確認這些都沒問題, 再來想 /tmp 的東西, 甚至治標的話, 考慮:
<pre class="c" name="code">
1. 暫時停止服務
2. 把 /tmp 改名
3. 建一個新 /tmp (或 mount 另一個磁區, ln -s 另一個磁區的目錄, 如果是這個磁碟有壞軌的話, 這樣可以減緩)
4. 重新啟動服務.
5. 回頭來找 /tmp 問題.
CentOS 的 /tmp 是 tmpFS,也就是記憶體虛擬磁碟,理論上不會有 I/O 問題,但如果曾經把它砍了,自己在實體磁碟建出 /tmp,就有可能變龜速,如果寫入巨量檔案的話。
我查看 /etc/fstab
tmpfs /dev/shm tmpfs defaults 0 0
查看 df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 394G 200G 175G 54% /
tmpfs 5.9G 0 5.9G 0% /dev/shm
/dev/sda1 485M 118M 342M 26% /boot
/dev/sda3 513G 277G 211G 57% /www
怎麼看不到 tmp 是 tmpfs ? 還是真如 wiseguy 大大講的, 我以前有刪掉過?
要如何再產生呢? 是不是直接 umount /dev/shm
再修改 /etc/fstab 把 tmpfs 的掛載點改成 /tmp
最後再重 mount 一次即可?
到答案了, wiseguy大大提供的方法很好, 可是我不敢用, 有機會再試試.
先用 slime 大大的方法, 在/etc/fstab 建立 tmpfs /tmp tmpfs size=1024m 0 0
系統cpu負荷馬上降低, 網站讀取速度也變快 :p
會不會裡面檔案數太多....確認一下...
你要考慮用資料庫來 handle PHP session,不能再用 file。因為流量一大,session 就變多,而且 file session 不會過期就自動砍掉,你得定時清,要不然就會像現在一樣很慢很慢。
可以考慮 ADOdb 內含的 adodb_session2,加掛之後,php 的 session 就會自動存向資料庫,過期也會自動清掉,上千筆 session 對資料庫根本是小 case,但是對檔案系統就是大麻煩了。
iT邦幫忙MVPwiseguy提到:
file session 不會過期就自動砍掉
可以將session.gc_probability 這個值調大,
預設的情況下最大值是100,這樣過期的session file在下一個request進來時一定會被清除。
找到答案了, wiseguy大大提供的方法很好, 可是我不敢用, 有機會再試試.
先用 slime 大大的方法, 在/etc/fstab 建立 tmpfs /tmp tmpfs size=1024m 0 0
系統cpu負荷馬上降低, 網站讀取速度也變快 :p
afgn提到:
可是我不敢用
是用了地球會停止自轉,洋流不再循環,狂派會大舉入侵嗎?