Tomcat Session 持久化
Session的主要數據被存儲在服務器內存中,而服務器會為每個在線用戶創建一個Session對象,當在線用戶很多時,例如同時有幾萬或是幾十萬在線的情況下,Session內存的開銷將會十分巨大,會影響Web服務器性能。而Session的鈍化機制剛好可解決此問題。Session鈍化機制的本質就在于把服務器中不經常使用的Session對象暫時序列化到系統文件系統或是數據庫系統中,當被使用時反序列化到內存中,整個過程由服務器自動完成。
實現:
要完成session持久化,存放在session里的對象必須要實現java.io.Serializable 接口。
Tomcat通過兩個session管理類實現session持久化,StandardManager (默認),PersistentManager
StandardManager:不使用任何的Store,當Tomcat正常關閉,重啟或Web應用重新加載時,它會將內存中的session序列化到Tomcat目錄下
/work/Catalina/host_name/webappname/SESSIONS.ser文件中。當Tomcat重啟或應用加載完成后,tomcat會將文件中的session重新還原到內存中。
注:如果突然終止該服務器,則所有會話都將喪失,因為StandardManager沒有機會實現存盤處理。
PersistentManager: 通過使用Store,將內存中的session備份到文件或數據庫中。當備份一個session對象時,該session對象會被復制到存儲器中,而原對象仍然留在內存中。因此如果服務器崩潰,就可以從存儲器中獲取活動的session對象。當session被換出時,他會被移動到存儲器中,因為當前活動的session對象超過了上限值,或者session對象閑置了過長時間。換出session節省內存空間。
配置:
Tomcat默認是已經啟用持久化配置,若要禁用持久化功能,則只需要在<Context>節點里配置
<Manager pathname="" />;
持久化配置可進行全局配置和針對某一站點進行配置。全局配置需要在cof文件夾context.xml的
<Context>節點中配置<Manager>,若要針對某一站點配置則需要在cof文件夾server.xml的<Host><Context>
節點中添加<Manager>配置。
StandardManager:
<Manager
className=”org.apache.catalina.session.StandardManager”
debug=”0”
maxInactiveInterval=”-1″
/>
PersistentManager:
方式1:
<Manager
className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="0"
maxIdleSwap="30"
maxIdleBackup="0"
>
<Store
className="org.apache.catalina.session.FileStore"
checkInterval=”60”
directory="../session"/>
</Manager>
方式2:
和方式1的區別:
<Store
calssName="org.apache.catalina.JDBCStore"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password="
sessionTable="tomcat_session"
sessionIdCol="session_id"
sessionDataCol="session_data"
sessionValidCol="session_valid"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access"
sessionAppCol="app_name"
checkInterval="60"
debug="99" />
參數說明:
maxActiveSessions-可處于活動狀態的session數,default -1 不限制
checkInterval - 檢查session是否過期的時間間隔,default 60s
saveOnRestart-服務器關閉時,是否將所有的session保存到文件中;
minIdleSwap/maxIdleSwap-session處于不活動狀態最短/長時間(s),sesson對象轉移到File Store中;(-1表示沒有限制)
maxIdleBackup-超過這一時間,將session備份。(-1表示沒有限制)
directory-文件存儲位置work\Catalina\host name\web app\session\文件名.session