- 總結 tomcat實現多虛擬機器
vim ../conf/server.xml
<Host name="www.b.com" appBase="/data/website2/"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.a.com" appBase="/data/website3/"
unpackWARs="true" autoDeploy="true">
</Host>
- 總結 tomcat定製訪問日誌格式和反向代理tomcat
<Valve className="org.apache.catalina.valves.AccessLogValve" #類名
directory="logs" #儲存目錄
prefix="localhost_access_log"#可選,預設為空 localhost_access_log 將生成如 localhost_access_log.2024-08-05.txt 這樣的檔名。
suffix=".txt" #日誌字尾
pattern="%h %l %u %t "%r" %s %b %D" #日誌格式
fileDateFormat="yyyy-MM-dd" /> #可選 日誌檔名中的日期格式
日誌格式標記
%h - 遠端主機名
%l - 遠端邏輯使用者名稱(通常為-)
%u - 遠端使用者身份(透過 HTTP 認證)
%t - 請求時間
%r - 請求的第一行
%s - 響應狀態碼
%b - 傳送的位元組數(不包括 HTTP 頭)
%D - 請求處理時間,以毫秒為單位
nginx反向代理tomcat
upstream tomcat {
ip_hash; #排程演算法
server 10.1.1.111:8080;
server 10.1.1.111:8080;
}
location / {
proxy_pass http://tomcat;
}
- 完成 tomcat實現MSM叢集
ip | 服務 | 軟體 |
---|---|---|
192.168.1.130 | 排程代理 | rocky8 nginx |
192.168.1.132 | 伺服器 | rocky8 tomcat(9.0.75) jdk(8u371) memcached |
192.168.1.133 | 伺服器 | rocky8 tomcat(9.0.75) jdk(8u371) memcached |
排程器:
vim /etc/nginx/nginx.conf
http {
upstream tomcat-server {
server t1.org:8080;
server t2.org:8080;
}
server {
location / {
}
location ~* \.(jsp|do)$ {
proxy_pass http://tomcat-server;
}
vim /etc/hosts
192.168.1.132 t1.org t1
192.168.1.133 t2.org t2
伺服器:
vim /etc/sysconfig/memcached
#OPTIONS="-l 127.0.0.1,::1" #註釋
配置tomcat
vim conf/server.xml
##tomcat1
<Engine name="Catalina" defaultHost="t1.zz.org" jvmRoute="Tomcat1">
<Host name="t1.zz.org" appBase="/data/webapps" autoDeploy="true" >
</Host>
</Engine>
##tomcat2
<Engine name="Catalina" defaultHost="t2.zz.org" jvmRoute="Tomcat1">
<Host name="t2.zz.org" appBase="/data/webapps" autoDeploy="true" >
</Host>
</Engine>
vim conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.132:11211,n2:192.168.1.133:11211"
failoverNodes="n1" #tomcat則為n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFact
ory"
/> #寫入倒數第一行上
vim /data/webapps/ROOT/index.jsp #server.xml中的appbase位置
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> tomcat website </h1>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
##顯示伺服器名稱、伺服器的本地 IP 地址和埠號、會話 ID 以及當前的日期和時間。這些輸出將在每次請求頁面時動態生成。
將對應版本的jsp檔案放入tomcat/lib中;並重啟
檢視結果:
- 總結 JVM垃圾回收演算法和分代
JVM的垃圾確認機制是 Garbage 垃圾確定方法,每個使用的記憶體都有一個引用標記器,當記憶體沒有引用數後標記為垃圾。
回收演算法
-
標記-清除 Mark-Sweep
標記階段,找到所有可訪問物件打個標記。清理階段,遍歷整個堆清理未標記物件(無引用數)的記憶體。
優點:
演算法簡單
缺點:
標記-清除最大的問題會造成記憶體碎片,但是不浪費空間,效率較高(如果物件較多時,逐一刪除效率也會受到影響) -
標記-壓縮 (壓實)Mark-Compact
將上述的記憶體清理階段時,整理時將物件向記憶體一端移動,整理後存活物件連續的集中在記憶體一端。
特點:
標記-壓縮演算法好處是整理後記憶體空間連續分配,有大段的連續記憶體可分配,沒有記憶體碎片。
缺點:
記憶體整理過程有消耗,效率相對低下 -
複製 Copying
先將可用記憶體分為大小相同兩塊區域A和B,每次只用其中一塊,比如A。當A用完後,則將A中存活的物件複製到B。複製到B的時候連續的使用記憶體,最後將A一次性清除乾淨。
特點:
無碎片,效率高
缺點:
只有一半的記憶體使用率
JVM分代
Heap堆記憶體分為:
年輕代Young:Young Generation
伊甸園區eden: 只有一個,剛剛建立的物件
倖存區Servivor Space:有2個倖存區,一個是from區,一個是to區。大小相等、地位相同、可互換。
from 指的是本次複製資料的源區
to 指的是本次複製資料的目標區
老年代Tenured:Old Generation, 長時間存活的物件
永久代:JDK1.7之前使用, 即Method Area方法區,儲存JVM自身的類和方法,儲存JAVA執行時的環境資訊, JDK1.8後 改名為 MetaSpace,此空間不存在垃圾回收,關閉JVM會釋放此區域記憶體,此空間物理上不屬於heap記憶體,但邏輯上存在於heap記憶體。
年輕代垃圾處理:
eden生成物件,放滿之後將標記的放入倖存區,倖存區兩個區可以互相轉換(進行回收時標記物件相互轉移),而未標記則都回收。
當倖存區中有長期存在的物件則放入老年代(老年代不經常做回收),當老年代滿時,則將所有空間進行垃圾回收。
- 總結memcache使用,安裝和MSM原理
memcache是個記憶體資料庫
Memcache使用:
快取資料:
- 將資料存入記憶體,減少訪問延遲。
- 使用鍵值對的方式儲存資料,鍵是唯一的識別符號,值是需要快取的資料。
設定資料:
- 使用 set(key, value, expiration_time) 方法將資料快取到 Memcache 中。
- key 是資料的識別符號,value 是要快取的內容,expiration_time 是資料的過期時間。
獲取資料:
- 使用get(key)透過鍵獲取
刪除資料:
- 使用delete(key)刪除
資料更新:
- 再次呼叫set
memcache安裝:
使用yum倉庫安裝:
yum install memcached
編譯安裝(使用指令碼):
MEMCACHED=memcached-1.6.20
INSTALL_DIR=/apps/memcached
yum -y install gcc libevent-devel
tar xvf $MEMCACHED.tar.gz
cd $MEMCACHED/
./configure --prefix=$INSTALL_DIR
make && make install
echo PATH=$INSTALL_DIR/bin:'$PATH' > /etc/profile.d/memcached.sh
. /etc/profile.d/memcached.sh
useradd -r -s /sbin/nologin memcached
MSM原理
MSM 是 Memcache Session Management 的簡稱,用於在 Web 應用中管理使用者會話,通常與 Memcache 結合使用。
伺服器將使用者資料如(session等資訊)存入記憶體,透過memcache管理。而透過memcache實現多個伺服器的資訊遷移,保證使用者的會話資料一致性和快速讀寫。但非持久化,會自動過期,適合短期高效的儲存資料。