1. 下載解壓的版本:沒有安全設置,開發設置全開(熱部署等),生產版本須要修改
2. probe.sh?
3. jboss根目錄:
client用於遠程客戶端;
lib用於啓動jboss核心,不該該放入任何其餘lib;
server下的每一個目錄都叫一個server配置,每一個配置包含一套服務和應用
4. server配置目錄下的四個主目錄:conf/deploy/deployers/lib 啓動後新建目錄:data log tmp work
conf:只在啓動時掃描一次,修改後須要重啓server
bootstrap.xml: 核心的microcontainser服務
jboss-service.xml: 核心JMX服務
jboss-log4j.xml:
login-config.xml:驗證受權模塊
standerjboss.xml: 各類ejb容器
deploy:應用與服務的部署目錄
deployers:存放全部的jboss服務(用於分辨、部署不一樣的應用)
lib:一個server配置裏全部服務、應用都共享的lib
新建的目錄:
data:服務和應用用於存放臨時文件 而向文件系統寫入的數據
log:boot.log(log服務啓動前的日誌), server.log, audit.log
tmp:各類服務用的臨時文件夾
work:web server使用的存放編譯後的jsp和其餘臨時數據
5. -c命令改變啓動配置 ./run.sh -c all,使用all配置啓動
管理配置
1. 早期使用JMX(Java Management Extension),service以MBean方式提供 能夠容易的插入/移出JMX kenel
從JBoss4.0.3開始使用microcontainer,可使用POJO代替MBean,可是如今MBean仍然起着十分重要的做用
2. microcontainer:相似spring的依賴注入系統,能夠作以下工做
聲明初始化對象
初始化時提供構造參數
設置屬性
對象依賴:對象A引用對象B,須要在B初始化後在初始化
並非全部service都移植到了microcontainer,因此JMX仍然很重要(JMS JNDI)
在server/default/config目錄配置,大部分*-jboss-beans.xml,profile.xml是一個例外
3. JMX: 初始化MBean經過jboss-service.xml及其餘*-service.xml
4. MBean name:domain:key,keyjava
除了基於JMX標準的mbean實現方案,JBoss還支持用一個xml文件描述的方式將普通的Java對象開放爲一個mbean,即 XMBean。在service描述文件裏能夠用xmbean-dd屬性指明一個外部的XMBean定義,或者將xmbean-dd屬性賦值爲"",在 mbean標籤中內嵌xmbean的內容說明。XMBean的優點在於a)不須要目標Java對象實現任何JMX有關的接口;b)相對Standard MBean能夠在xmbean-dd的xml內提供豐富的元數據描述信息。node
5. JMX kernel描述文件:server/xxx/conf/jboss-service.xml
6. 除了定義MBean的配置文件,也有Mbean使用的配置文件
bootstrap.xml:初始化POJO的主文件
jacorb.properties:用於配置Java Object Request Broker (JacORB)服務, 配置應用集羣會使用到
jax-ws-catalog.xml:將xml metadata名字映射到本地metadata描述文件,支持jax-ws須要
jbossjta-properties.xml:已過時,使用
jbossts-properties.xml:
jboss-log4j.xml:
jboss-minimal.xml:最小的應用配置,不會使用
jboss-service.xml:JMX kernel使用
jndi.properties:JNDI service用於定義默認屬性
login-config.xml:Security service用於定義login model
standardjboss.xml :ejb用於定義設置
standardjbosscmp-jdbc.cmp:當使用ejb2.x cmp,用於ejb爲各類數據庫定義類型映射
7. 配置目錄
jboss.home.dir
jboss.server.base.dir
run.sh -Djboss.server.log.dir=d:/log
若是同時有url/dir,兩個都要修改
8. 經常使用Mbean
jboss:type=Service,name=SystemProperties
jboss:service=JNDIView
jboss.system:type=Log4jService,service=Logging
!jboss.system:service=ThreadPool
jboss.system:type=Server, jboss.system:type=ServerConfig,jboss.system:type=ServerInfo
部署
1. 熱部署缺點:任何應用的狀態,包括session的狀態都會丟失,
如何熱部署deploy\hdscanner-jboss-beans.xml,HDScanner scanEnabled
2. 新的class loader基於VFS:Virtual File System:簡化、統一應用server的文件處理
3. 多class loader
應用服務器使用多CL,每一個load特定class,用於分隔部署的不一樣的應用
Server跟蹤CL,不只定義那個CL加載那個class,並且定義規則一個CL是否可以訪問其餘CL、是否對其餘CL可建
4. 數據源docs/examples/jca:*-ds.xml,部署後建立的Mbean:
DataSourceBinding:管理 javax.sql.DataSource
LocalTxCM:管理ConnectionManager,管理鏈接池,能夠管理本地分佈事務,好比定義timeout時間
XATxCM:同上 管理XA
NoTxCM:同上
ManagedConnectionFactory:管理connection factory,建立db 鏈接
ManagedConnectionPool:管理db 鏈接池,監控活動鏈接,修改最大最小鏈接數量
集羣
1. 添加節點不須要管理,節點之間相互發現(哪些屬性相同的節點能夠認爲是一個集羣?如何相互發現,僅限於局域網?)
2. jboss提供一個複雜的分佈式cache 實現有狀態組件在節點之間複製狀態信息
3. homogenous cluster:應用、服務都相同
heterogeneous cluster : 部署應用不一樣你
4. cluster不存在時,第一個啓動的節點創建cluster,並做爲協調者(coordinator),管理其餘節點加入cluster
5. 自動發現功能是基於組通知機制:multicast(發送者只發送消息一次,而且不須要知道接受者的list),只要接受者監聽channel,就能收到信息
多播的channel包含 地址和端口
6. jboss使用JGroups做爲點對點的通訊工具,JGroups是一個穩定的多播通訊工具
7. fault-tolerant: 一臺服務器down,用戶的狀態信息能保存在另外一臺服務器,繼續操做
8. state replication:jboss使用cluster cache複製各個node的狀態信息
須要犧牲性能,只有複製完成,才能給用戶回覆
9. TOTAL VERSUS BUDDY:前者集中,資源消耗大,後者環狀結對
10. Session passivation:用戶存儲長期沒響應的session,可能存於disk,db
11. JGroups的兩個組件:channel和protocal stack
12. 組成集羣須要:
多播地址:all\deploy\cluster\..\jgroups-channelfactory-stacks
多播端口:all\deploy\cluster\..\jgroups-channelfactory-stacks
clusterName/partitionName: all\deploy\cluster\hapartition-jboss-beans.xml
13. 各類j2ee組件對集羣和複製的須要
Load Balance StateReplication
JSP Y Y
slsb Y N
sfsb Y Y
entity N Y
MDB Y N
JNDI Y Y
14. 若是應用是無狀態的 沒有必要用集羣,只用load balance就行
即便有狀態,也不必定非要集羣,除非須要fault-tolerant
15. 軟件負載均衡能夠用tomcat 也能夠經過ajp協議使用本地web server
AJP協議是專門用於與相似jboss web app通訊的機遇TCP的二進制協議
16. apache有個插件mod_proxy:http ajp負載均衡都支持
17. 實現sticky-session:客戶端瀏覽器始終訪問同一個server:修改deploy/jbossweb.sar/server.xml
添加jvmRoute,名字在集羣中必須是惟一的
<Service name="jboss.web">
<Connector .../>
<Connector .../>
<Engine name="jboss.web"
defaultHost="localhost"
jvmRoute="node1">
session複製
18. session複製: WEB-INF/web.xml,http的session會加入到分佈式cache
<web-app>
<distributable/>
...
</web-app>
http session cache:standard-session-cache在這個文件中,有一些可配置的參數:
/all/deploy/cluster/jboss-cache-manager.sar/META-INF/jboss-cache-configs.xml
19. session複製的配置在應用程序的WEB-INF/jboss-web.xml:
<jboss-web>
<replication-config>
<replication-trigger>
SET_AND_NON_PRIMITIVE_GET
</replication-trigger>
</replication-config>
</jboss-web>
是整個sessin都複製 仍是隻複製修改的屬性
<jboss-web>
<replication-config>
<replication-granularity>SESSION</replication-granularity>
</replication-config>
</jboss-web>
可選session/attribute/field, standard-session-cache to field-granularity-session-cache默認field,還有replication-field-batch-mode表示是否當即複製,true的意思是request結束立刻執行
20. jboss-cache-configs.xml的CacheLoaderConfig
passivation:控制cache與cacheloader的相互關係,true僅當從內存刪除時才使用cacheLoader寫入二級存儲,false當即寫入
server的cacheLoader配置完,在應用的META-INF/jboss-web.xml 中配置以下才會啓用passivation
<max-active-sessions>20</max-active-sessions>
<passivation-config>
<use-session-passivation>TRUE</use-session-passivation>
<passivation-min-idle-time>5</passivation-min-idle-time>
<passivation-max-idle-time>10</passivation-max-idle-time>
</passivation-config>web
Jboss cachespring
HA Partition Cache:deploy/cluster/cluster-jboss-beans.xml
Stateful session bean cache:deploy/ejb3-interceptors-aop.xml
Entity bean cache :deployers/ejb3.deployer/META-INF/persistence.properties
HTTP session cache ;deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml
HTTP single-sign-on cache :Hardcoded to clustered-sso, which is aliased to ha-partition in the jboss-cache-manager-jboss-beans.xmlsql
21. SFSB的狀態複製
/all/deploy/cluster/jboss-cache-manager.sar/META-INF/jboss-cache-configs.xml:sfsb-cache
22. session bean client端得動態代理能夠實現負載均衡
23. jboss使用hibernate做爲其jpa實現
24. HA-JNDI service
負載均衡和fail-over
查詢每一個server的本地jndi
自動發現naming server
複製cache
每臺server同時有local和HA jndi服務,HA經過JGroups通訊
綁定到HA的對象纔會在server之間複製,綁定到local不會
配置文件/all/deploy/cluster/hajndi-jboss-beans.xml
jndi配置文件jndi.properties
調試
1. 32 or 64位
32:若是隻運行jboss,2GRAM足夠,能夠分配一個1.4G的heap;再打怕是也沒有,OS須要2G
64:一般4G足夠,越大的heap垃圾回收越慢,回收時應用程序可能長時間等待
2. OS
CPU最好50-80,80以上就過高了
3. processor affinity
processor affinity:大多數支持多cpu的系統都提供一個功能,限制一個給定的進程使用的cpu
緣由:cpu執行一個進程中的線程時,會將其數據和code緩存到cpu的cache,若是時間片斷用完或等待資源,cpu執行其餘線程,若是cpu cache夠大,原線程在從新執行時有很大可能性其code和數據還在cpu的cache中(若是不在須要從ram讀取,要慢不少)
並非說java不能用多cpu,有獨立線程的應用可能很好的使用64個甚至更多的cpu,可是App server中每一個線程的工做不是專門用於某個工做,因此很難使用4個以上的cpu
若是有8個cpu,能夠利用這個特性啓動4個server,每一個server使用兩個cpu
4. JVM參數
建議heap的最大最小值相同:-Xms -Xmx:不然每次GC以後都會花費時間判斷是否調整大小
建議young generation最大最小值相同:-XX:NewSize -XX:MaxNewSize=<size>
建議young generation爲heap的1/4到1/3
5. GC兩種:minor major
minor:the young generation
major:tenured generation and the young generation
收集YG的時候,沒有被回收的存於suvior space,收集結束,YG和suvivor space清空;過程當中YC滿了,
生產環境
1. 組件server:JBOSS web server;ejb server;messaging server;web service container
2. JBoss Enterprise Application Platform:收費的企業版,包含各類通過測試的service的打包
JBoss AS
JBoss Web Server
JavaServer Faces
JBoss Clustering
JBoss Cache
JBoss Messaging
JBoss Transactions JTA
Hibernate
JBoss Seam
3. 一臺機器運行多個instance
使用兩個配置,各自擁有本身的目錄
避免port衝突:server\default\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml;
可使用jboss.service.binding.set改變端口
虛擬ip地址:windows裏設置指定ip,高級裏新建ip
4. 刪除不須要的service
緣由:安全,刪除了一個對外的端口;消耗內存、cpu
能夠經過刪除file和目錄刪除的服務:
mail:mail-service.xml
Scheduler:scheduler-service.xml schedule-manager-service.xml
Monitoring:monitoring-service.xml
Messaging (JMS):/messaging jms-ra.rar
Unique ID key generator:uuid-key-generator.sar
Home page:ROOT.war
JMX Console:jmx-console.war
Web Console:management
Quartz:quartz-ra.rar
5. 應用安全: JMX Console, the Web Console, and the root web application
刪除
添加安全驗證
只容許本地訪問
6. 修改默認數據庫
Login modules : conf/login-config.xml
CMP-EJB 2.x: conf/standardjbosscmp-jdbc.xml
Timer service-ejb2 deploy/ejb2-timer-service.
Timer service-ejb3 deploy/ejb3-timer-service.xml
Schedule manager deploy/schedule-manager-service.xml
Messaging deploy/messaging/hsqldb-persistence-service.xml
deploy/messaging/messaging-jboss-beans.xml
UDDI deploy/juddi-service.sar/juddi.war/WEB-INF/jboss-web.xml
SNMP Adaptor deploy/snmp-adaptor.sar/attributes.xml
UUID deploy/uuid-key-generator.sar/META-INF/jboss-service.xml
刪除hsqldb-ds.xml,xxx/lib/hsqldb*.jar
7. jsp預編譯
不預編譯兩個缺點:第一個訪問者慢;一直檢查是否有更新
server/xxx/deployers/jbossweb.deployer/web.xml
development:若是true,檢查jsp修改的間隔爲modificationTestInterval
checkInterval:若是develop是false,這個值大於0,會啓動後臺編譯,單位秒 檢查jsp是否須要從新編譯
modificationTestInterval:0表示每次訪問都檢查是否有更新,默認值4數據庫