我目前遇到一個關於性能更精確的巨大問題:通過大量的文件(+100.000)平坦會話文件夾上的大量I/O生成的負載。處理大量的會話文件與Apache2和PHP
sessionfiles/htdocs文件夾位於託管存儲上 - 兩個獨立的服務器(位於負載平衡器後面)通過nsf-mount使用這些文件(apache2),並且正在訪問相同的會話文件夾(以保持其持久性)一旦。
不幸的是,該項目是高度頻繁,併產生大量的會議文件。即使使用2小時的ans max_lifetime,我們也會生成+100.000個會話文件,這對於IO節點來說非常重要。
是否有可能動態地將這些會話拆分爲子文件夾?例如所有會話文件與sess_1 *到/ tmp/sessions/1,sess_2到/ tmp/sessions/2等等?採用這種方法,存儲/ IO節點只需要處理〜10.000個文件夾,這應該加速垃圾回收,並且應該防範IO負載。
,我發現,PHP(session.save_path的)文檔此摘錄:
http://de3.php.net/manual/en/session.configuration.php#ini.session.save-path
有一個可選的N參數來此指令決定了 數目錄級別的會話文件例如,設置爲'5;/tmp'可能最終創建會話 文件和位置,如 /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If。爲了 使用N,您必須在使用前創建所有這些目錄。在ext/session中存在一個小的 shell腳本來執行此操作,它被稱爲 mod_files.sh,其中一個名爲mod_files.bat的Windows版本。還請注意 ,如果使用N並且大於0,則自動垃圾收集 將不會執行,請參閱php.ini的副本以獲取更多信息。 另外,如果您使用N,請務必在「引號」 中環繞session.save_path,因爲分隔符(;)也用於php.ini中的註釋。
有沒有人已經實現了這之前在php中,並可以提供一些示例php代碼來處理使用此mod_files.sh子文件夾中的sessionfiles?
記錄不幸的是它很糟糕......
不要讓會議在文件中使用Redis的或Memcached的 – 2012-08-13 13:13:57
你引用很清楚的文檔解決了這個問題:。」設置到'5;/tmp'「,但是你可能想考慮使用除會話文件以外的其他東西, – Matthew 2012-08-13 13:14:24
是否需要將會話存儲在文件中?因爲你可以將它們保存到memcache中。 – pomaxa 2012-08-13 13:15:12