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,key
除了基于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内提供丰富的元数据描述信息。
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>
Jboss cache
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.xml
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
转载于:https://blog.51cto.com/yingtju/777857