iT邦幫忙

0

請教如何刪除存放php session 的 /tmp 目錄

afgn 2013-02-20 11:18:378098 瀏覽

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 可是效果都不彰 >"<

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
16
slime
iT邦大師 1 級 ‧ 2013-02-20 18:23:37
最佳解答

afgn提到:
使用 Nginx + Php-fpm, 之前用 mod_files.sh 2 16 /tmp 建立了一個存放php session的陣列目錄, 但是要刪除或進入該目錄都非常慢, 想請教一下該如何處置會比較好?!
ps. 這台目前還是線上機, 我已經用同樣方法再建一個 /tmp2...(恕刪)

這邊有三個地方想要檢查:

  1. 磁碟機有沒有硬體壞軌或快滿了? 如果有, 系統會試著存取正常的磁區或頻繁寫入暫存資料, 而會造成 top 看起來負載很大.
  2. 有沒有被入侵? top 很大是否都是正常的服務?
  3. 為什麼程式會佔用很多 /tmp ? 而沒有離開後正常清除?

建議確認這些都沒問題, 再來想 /tmp 的東西, 甚至治標的話, 考慮:

&lt;pre class="c" name="code">
1. 暫時停止服務
2. 把 /tmp 改名
3. 建一個新 /tmp (或 mount 另一個磁區, ln -s 另一個磁區的目錄, 如果是這個磁碟有壞軌的話, 這樣可以減緩)
4. 重新啟動服務.
5. 回頭來找 /tmp 問題.
wiseguy iT邦超人 1 級 ‧ 2013-02-21 00:17:00 檢舉

CentOS 的 /tmp 是 tmpFS,也就是記憶體虛擬磁碟,理論上不會有 I/O 問題,但如果曾經把它砍了,自己在實體磁碟建出 /tmp,就有可能變龜速,如果寫入巨量檔案的話。

afgn iT邦新手 5 級 ‧ 2013-02-21 11:59:06 檢舉

我查看 /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 一次即可?

afgn iT邦新手 5 級 ‧ 2013-02-21 15:00:49 檢舉

到答案了, wiseguy大大提供的方法很好, 可是我不敢用, 有機會再試試.
先用 slime 大大的方法, 在/etc/fstab 建立 tmpfs /tmp tmpfs size=1024m 0 0
系統cpu負荷馬上降低, 網站讀取速度也變快 :p

10
willhomwtw
iT邦研究生 5 級 ‧ 2013-02-20 16:28:07

會不會裡面檔案數太多....確認一下...

afgn iT邦新手 5 級 ‧ 2013-02-20 18:00:28 檢舉

其實是檔案太多,進入該目錄後又超慢 >"<
例: cd /tmp/0/0
ls

就一直耗在那邊不出來 :(

willhomwtw iT邦研究生 5 級 ‧ 2013-02-21 09:10:22 檢舉

還是要定期去清理 才是辦法 不然就寫個 crontab ..離峰時間定期去刪

14
wiseguy
iT邦超人 1 級 ‧ 2013-02-21 00:24:06

你要考慮用資料庫來 handle PHP session,不能再用 file。因為流量一大,session 就變多,而且 file session 不會過期就自動砍掉,你得定時清,要不然就會像現在一樣很慢很慢。

可以考慮 ADOdb 內含的 adodb_session2,加掛之後,php 的 session 就會自動存向資料庫,過期也會自動清掉,上千筆 session 對資料庫根本是小 case,但是對檔案系統就是大麻煩了。

silly iT邦好手 2 級 ‧ 2013-02-21 11:26:41 檢舉

iT邦幫忙MVPwiseguy提到:
file session 不會過期就自動砍掉

可以將session.gc_probability 這個值調大,
預設的情況下最大值是100,這樣過期的session file在下一個request進來時一定會被清除。

afgn iT邦新手 5 級 ‧ 2013-02-21 15:00:23 檢舉

找到答案了, wiseguy大大提供的方法很好, 可是我不敢用, 有機會再試試.
先用 slime 大大的方法, 在/etc/fstab 建立 tmpfs /tmp tmpfs size=1024m 0 0
系統cpu負荷馬上降低, 網站讀取速度也變快 :p

ted99tw iT邦高手 1 級 ‧ 2013-02-21 15:15:16 檢舉

afgn提到:
可是我不敢用

是用了地球會停止自轉,洋流不再循環,狂派會大舉入侵嗎?疑惑

我要發表回答

立即登入回答