Tomcat Session 持久化

jopen 9年前發布 | 18K 次閱讀 Tomcat 應用服務器

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!