php session 效率,大量php session临时文件带来的服务器效率问题
早上流量有點(diǎn)大,網(wǎng)站出口流量大概5M左右,訪問質(zhì)量卻不太好,Web響應(yīng)比較慢,切系統(tǒng)負(fù)載很高。
檢 查了下各web節(jié)點(diǎn),所有web服務(wù)器的httpd線程均達(dá)到滿負(fù)荷,很奇怪。因?yàn)樗衱eb節(jié)點(diǎn)都通過nfs來共享session目錄來達(dá)到session的一致性,檢查了下nfs文件服務(wù)器,IO讀寫比較大,檢查了session_tmp目錄,發(fā)現(xiàn)session目錄臨時文件達(dá)到 70000多個,初步判斷也許是因?yàn)橐患壞夸浵挛募^多帶來的IO性能下降。
以前沒有想過session存放的效率問題,今天由此想到了session多級存放的問題,來解決一個目錄下session文件過多帶來的讀寫效率問題,查了下PHP.net其實(shí)php在配置中已經(jīng)給出了有關(guān)選項(xiàng)。
php.net上的說明:http://cn.php.net/manual/zh/ref.session.php
session.save_path 定義了傳遞給存儲處理器的參數(shù)。如果選擇了默認(rèn)的 files 文件處理器,則此值是創(chuàng)建文件的路徑。默認(rèn)為 /tmp。參見 session_save_path()。 此指令還有一個可選的 N 參數(shù)來決定會話文件分布的目錄深度。例如,設(shè)定為 '5;/tmp' 將使創(chuàng)建的會話文件和路徑類似于
/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If。 要使用 N 參數(shù),必須在使用前先創(chuàng)建好這些目錄。在 ext/session 目錄下有個小的 shell 腳本名叫 mod_files.sh 可以用來做這件事。此外注意如果使用了 N 參數(shù)并且 N 大于 0,那么將不會執(zhí)行自動垃圾回收,更多信息見 php.ini。另外如果用了 N 參數(shù),要確保將 session.save_path 的值用雙引號 "quotes" 括起來,因?yàn)榉指舴痔? ;)在 php.ini 中也是注釋符號。
session.save_path string
在定義session.save_path中可以定義多級存放的路徑,修改php.ini
session.save_path = "2;/data/session_tmp"
將session文件分成兩級存放,即/data/session_tmp/4/b/sess_4b1e384ad74619bd212e236e52a5a174If,取前兩位字符,但是php并不生成目錄,需要自己手工生成,所以寫了個腳本來生成初始的目錄。
引用
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
for($i = 0; $i < $length; $i++) {
for($j = 0; $j < $length; $j++) {
func_mkDir('/session_tmp/'.$string[$i].'/'.$string[$j]);
}
}
?>
session目錄分級處理之后,IO處理值增加,http進(jìn)程降低,web處理效率明顯好轉(zhuǎn)
總結(jié)
以上是生活随笔為你收集整理的php session 效率,大量php session临时文件带来的服务器效率问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。