本文转载自:http://blog.163.com/zhangjunbiao_12_/blog/static/205669720082219544092/
日常管理 WebLogic Platform 8.1 永不过期的开发版license
下载地址为:
http://dev2dev.bea.com.cn/bbs/servlet/D2DServlet/download/81-8992-44196-240/license.bea
使用方式:
替换c:/bea目录下的这个文件,这样就可以使WebLogic Platform用不过期
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=8992&tstart=0&quint=true
如何远程启动WebLogic服务?
用telnet远程控制服务器,远程启动WEBLOGIC服务,启动后关闭telnet,WebLogic服务也跟着停止,这是因为使用telnet启动的进程会随着telnet进程的关闭而关闭。所以我们可以使用一些UNIX下的命令来做到不关闭。
使用如下命令:
nohup startWeblogic.sh&
如果想要监控标准输出可以使用:
tail -f nohup.out
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=7709&tstart=0&quint=true
控制台左边的树结构看不见?
这是因为浏览器没有安装合适版本的JRE插件来支持Applet。
可以到http://java.sun.com/products/plugin/ 下载相应浏览器的插件来解决这个问题。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=5233&tstart=0&quint=true
WebLogic 配置出来的各种域有什么区别?
请看这个链接中的Table 16-1 Configuration Template Summary ,说的很明白
http://e-docs.bea.com/platform/docs81/confgwiz/tempref.html
Table 16-1 Configuration Template Summary
Template
Required WebLogic Platform Component
Filename
Description
Avitek Medical Records Sample Domain
WebLogic Server
medrec.jar
Creates the Avitek Medical Records domain outside the installed kit. This domain is a WebLogic Server sample application suite that concisely demonstrates all aspects of the J2EE platform.
Basic WebLogic Integration Domain
WebLogic Integration,
WebLogic Workshop,
WebLogic Server
wli.jar
Creates a domain that supports the development of WebLogic Integration solutions.
Note: To create a domain that supports the development of WebLogic Server Process Edition solutions, use the Basic WebLogic Integration Domain template. If you have an existing WebLogic Server-based domain, you can extend it to include the resources required for WebLogic Server Process Edition by using the WebLogic Integration Extension Template.
Basic WebLogic Platform Domain
WebLogic Platform (all components must be installed)
platform.jar
Creates a domain that supports the development of applications using all WebLogic Platform components.
Basic WebLogic Portal Domain
WebLogic Portal,
WebLogic Workshop,
WebLogic Server
wlp.jar
Creates a domain that supports the development of WebLogic Portal solutions.
Basic WebLogic Server Domain
WebLogic Server
wls.jar
Creates a simple WebLogic Server domain without any sample applications.
Basic WebLogic Workshop Domain
WebLogic Workshop,
WebLogic Server
wlw.jar
Creates a domain that supports the development of WebLogic Workshop solutions.
WebLogic Server Examples Domain
WebLogic Server
examples.jar
Creates the WebLogic Server Examples domain outside the installed kit. This domain contains a collection of examples that illustrate best practices for coding individual J2EE APIs.
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=9188&tstart=0&quint=true
Too many open files错误的处理
在有些Linux下由于操作系统的限制,单一进程可以打开的文件数有限制,引起WebLogic报告错误,解决这问题需要编译内核并且调节一些限制参数。
在Linux 内核2.4.x中需要修改源代码,然后重新编译内核才生效。编辑Linux内核源代码中的 include/linux/fs.h文件,将 NR_FILE 由8192改为65536,将NR_RESERVED_FILES 由10 改为 128。编辑fs/inode.c 文件将MAX_INODE 由16384改为262144。一般情况下,系统最大打开文件数比较合理的设置为每4M物理内存256,比如256M内存可以设为16384,而最大的使用的i节点的数目应该是最大打开文件数目的3倍到4倍。另外,对每个进程的设置:
ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
ulimit -m 4096 限制每个进程使用的内存数。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=2461&tstart=0&quint=true
Apache2和weblogic7实现虚拟主机
选择apache2,是因为目前wls7只支持apache2的结合.
1.首先,正确安装apache2,这里我们假设安装在C:/apache group,安装完毕,需要测试apache2是否支持动态加载模块功能,这样测试,到命令
提示符下运行:
c:/>apache group/apache2/bin/apache -l
如果列出:
mod_so.c
则表示支持,然后将本篇文章附件中的mod_wl_20.so拷贝到apache group/apache2/modules下面,运行:
c:/>apache group/apache2/bin/apache -t
如果输出:
Syntax Ok
表示WebLogic Server plug-in安装成功。
2.正确安装weblogic7.0。这里我们假设wls7的安装路径是:c:/bea。然后用域配置向导配置一个域,我们假设域
的名称为amjn,路径是c:/bea/user_projects/amjn,然后在amjn下面分别建立两个站点web1,web2,修改
c:/bea/user_projects/amjn/config.xml文件,在
Path="./applications" StagedTargets="" TwoPhase="false">
下面添加:
StagedTargets="" TwoPhase="false">
StagedTargets="" TwoPhase="false">
在文件最下面的
的上面添加
,然后重新启动运行/amjn/startWebLogic.cmd,一定要运行正常。到这里,weblogic算是配置完成了。
3.现在开始配置apache多个虚拟主机,首先我们先打开c:/winnt/system32/drivers/etc/hosts文件,在其中添加:
10.1.3.30 www.web1.com
10.1.3.30 www.web2.com
这里面的10.1.3.30是你的weblogic服务器绑定的ip,然后打开apache2/conf/httpd.conf文件,在174行,注意是174行加入如下语句:
#WebLogic Server Proxy Settings-------该行是174行
LoadModule weblogic_module modules/mod_wl_20.so
WebLogicHost www.synnex-china.com
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.do
然后修改httpd.conf文件中的Listen:80为Listen:10.1.3.30:80,在文件section 3部分添加:
NameVirtualHost 10.1.3.30
ServerName www.web1.com
DocumentRoot "c:/bea/user_projects/amjn/applications/web1"
ErrorLog logs/web1.com.log
ServerName www.web2.com
DocumentRoot "c:/bea/user_projects/amjn/applications/web2"
ErrorLog logs/web2.com.log
启动apache,如果没有问题(可以通过logs/error.log查看),那就一切ok了
4.现在你可以分别敲入www.web1.com/index.jsp,访问的将是web1/index.jsp,敲入www.web2.com/index.jsp访问的将是web2/index.jsp
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=6326&tstart=0&quint=true
如何限制公网用户访问WebLogic的控制台呢?
我们的weblogic(版本6.1)应用部署在内部网上,通过防火墙映射到公网上,但公网用户通过键入域名:www.xxx.com/console,就可进入weblogic的登陆页面,用户可猜测管理员的密码,如何屏蔽公网用户对weblogic控制台的访问呢?
方法1:
在控制台上点击左边的你那个domain,将Console Enabled这个选项去掉,这样就完全不能使用console了
方法2:
将“console”改名,改“Console Context Path”的“console”为一个希奇古怪的名字就可以了
方法3:
不要给WebLogic公网ip,通过一个有公网ip的apache等proxy来访问WebLogic
方法4:
启动Administration Port
方法5:
应用不发布在Admin Server上,Admin Serve在外网不可见
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=2230
开机自动启动oracle和weblogic
我的机器是5L,oracle9i,weblogic6.1,HTTPServer
由于给别人装的机器,对方水平有限,为了省心,还是让系统起来自动运行各项应用比较好:)
首先自动启动oracle9i,9i装在oracle文件系统下,在/oracle下建立文件startdb,
文件内容
echo "begin to start oracle"
lsnrctl start
sqlplus /nolog <
startup
exit
exit
echo "oracle have started"
给startdb执行权限
自动关闭oracle9i,在/oracle下建立文件stopdb
sqlplus /nolog <
shutdown immediate
好了启动和关闭oracle脚本完成还要加到系统的启动和关闭文件里,另外还要在启动oracle后启动weblogic
在/etc下建立文件rc.startdb,脚本如下
su - oracle "-c /oracle/startdb" #启动oracle
cd /weblogic/wlserver6.1/config/mydomain #转到weblogic启动目录,必须
./startWebLogic.sh #启动weblogic
给文件执行权限
注意由于weblogic在启动后如果用户退出telnet 就自动关闭,所以要把weblogic放在后台执行,所以在startWebLogic.sh文件中启动weblogic的命令行改为可以在后台运行,用 nohup (启动命令行) >/home/weblogic.log &
把weblogic的运行信息存到/home/weblogic.log文件中
下面要把启动信息放到inittab中,加入一行
startdb:2345678:wait:/etc/rc.startdb
这样系统启动后会自动启动oracle9i
系统关机自动关闭oracle9i
在/etc下建立脚本文件rc.stopdb
su - oracle "-c /oracle/stopdb"
给执行权限
由于5L中安装完成后没有/etc/rc.shutdown文件,需要手工创建一个
内容如下
#!/bin/ksh
rc.stopdb
给执行权限
这样当系统关机时会自动寻找rc.shutdown并执行,系统可以自动关闭oracle9i
当然可以把一些命令行直接写入inittab或rc.shutdown中,看自己的喜好了:)
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=8415&tstart=25&quint=true
如何测试虚拟主机
在本机配置了虚拟主机,没有DNS Server,如何进行测试呢?
C:/WINNT/system32/drivers/etc/hosts加入一行:127.0.0.1 test.project.com.cn
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=9776&tstart=25&quint=true
WebLogic的Startup Class应该放在那个目录里
WebLogic 在启动的时候可以指定Startup Class,它在任何一个应用的类被加载之前调用,所以应该加到启动时的系统类路径下,可以修改startWebLogic.cmd或 commEnv.cmd文件相应的CLASSPATH部分,加入Startup Class的类路径。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=9119&tstart=25&quint=true
如何停止WebLogic服务?
直接杀死进程不是标准的做法,应该使用如下Java命令:
java -classpath weblogic.jar;%CLASSPATH% weblogic.Admin -url
例如:
java -classpath weblogic.jar;%CLASSPATH% weblogic.Admin -url 192.168.0.1:7001
SHUTDOWN -username system -password password
其中如果SHUTDOWN管不掉,可以使用FORCESHUTDOWN代替SHUTDOWN来强制关掉服务器。
另外也可以直接使用stopWebLogic.cmd。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=5519&tstart=25&quint=true
应用管理 JNDI里面加和不加java:comp/env/前缀有什么区别?
java:comp/env是标准的J2EE环境查找规则,使用这种方式必须做一次环境名到JNDI名的映射,这种隔离使得在写程序时不必关注真正的JNDI名字,其实说白了跟把JNDI名放到配置文件里是一样的,用法如下:
如把java:comp/env/my/datasource映射到my.ora.dataource
web.xml
weblogic.xml
………………….
而不使用这个前缀的,其实就是直接的JNDI名
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=17074&tstart=0&quint=true
如何更改默认打开主页?如何设置虚拟目录?
设置默认打开主页:
web.xml增加
虚拟目录的配置方法:
在weblogic.xml中添加如下的类似配置
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=16333&tstart=0&quint=true
WebLogic Builder使用简介
在DEV2DEV 论坛上有网友会问类似于这样的问题“如何为EJB写那些部署描述文件如ejb-jar.xml以及WebLogic-ejb- jar.xml呢?”,对初学EJB的朋友来说,是一个比较困难的问题,如果不想手写的话,可以采用BEA提供的WebLogic Builder工具或是JBuilder等工具来自动生成。本文就WebLogic Builder的使用进行一个简单的介绍,权且当一个入门的指引,同时欢迎各位朋友就你的经验对这篇文章进行补充完善。使用步骤如下:
一、准备。
例子就用WebLogic安装完后的example中statelessSession EJB的例子,给个路径参考
C: /bea/weblogic700/samples/server/src/examples/ejb20/basic/statelessSession 将这个目录下的.java文件全部拷贝出来放到一个临时目录中比如C:/temp/WebLogic_Builder_Test来做这个实验,拷贝的文件有Client.java,Trader.java,TraderBean.java,TradeResult.java, TraderHome.java。
二、对java原文件进行编译
命令行中进入C:/temp/WebLogic_Builder_Test,键入 javac -d . *.java,
三、打jar包
命令行中,C:/temp/WebLogic_Builder_Test目录下,键入jar -cvf test.jar *.*,生成test.jar包。
四、打开WebLogic Builder工具,选择并打开我们在步骤三中创建的test.jar包,这时WebLogic Builder给出一个提示“Unable to locate deployment descriptors. C:/temp/WebLogic_Builder_Test/test.jar. Would you like new descriptors created for you?”,这意思明白了吧,WebLogic Builder要为你创建基本的部署描述符文件了,当然点击是咯,然后选择保存,这样你的C:/temp/WebLogic_Builder_Test目录下的test.jar文件就有那两个部署描述文件了,可以通过WebLogic Builder工具中的View-->XML Source进行查看。
恭喜你,对WebLogic Builder这个工具的使用入门了,至于该工具的其它的一些使用功能比如BEAN属性配置、server部署什么的,就请大家自己研究吧!^Q^
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=2683
WebLogic部署应用的方式简明列表
1、WebLogic中应用可分三种,分别对应不同的描述文件及扩展名或目录结构:
(1)*.JAR: 是EJB的压缩包(有3个描述文件ejb-jar.xml,WEBLOGIC*.0-ejb-jar.xml,WEBLOGIC*.0-cmp-rdbms-jar.xml)
(2)*.WAR: 是只包含JSP和SERVLET的WEB APPLICATION压缩包(有2个描述文件web.xml,weblogic.xml)
(3)*.EAR: 是包含EJB和WEB APPLICATION 的J2EE Enterprise Application压缩包(有1 个描述文件,application.xml)
注意:它们不能混用,如WEB APPLICATOIN不能打包成.EAR文件。
2、WebLogic的应用用两种发布方式:
(1)以目录形式存放在WEBLOGIC的APPLICATIONS目录下,适用于开发阶段
(2)以一个压缩包形式存放在WEBLOGIC的APPLICATIONS目录下,适用于运行阶段,可用JAR 打包,如D:/test >jar cf testwar.war *
把TEST目录下的所有文件打包成一个testwar.war文件。
3、WebLogic应用的布置方式有2种
(1)静态布置:即把应用在CONFIG.XML中登记,可通过WEBLOGIC的控制台进行添加,WEBLOGIC会自动把该应用对应的压缩包拷到APPLICAITONS目录下,如果对该应用修改,需要重新布置才行。
(2)动态布置:没有在config.xml中登记,可直接把压缩包或目录拷到APPLICATIONS目录下,WebLogic会自动检测到. WebLogic每次启动时会自动对APPLICATIONS目录下没有进行静态布置的应用,进行动态布置。
4、一个例子:
如果一个应用中有EJB,JSP,SERVLET,其布置步骤如下:
(1)生成EJB的JAR文件,最好一个JAR文件对应一个EJB
(2)生成WEB APPLICATION的WAR文件,在web.xml,weblogic.xml中登记,配置SERVLET,JSP等。
(3)创建一个application.xml文件,设置该应用的属性.把application.xml,*.JAR, *.WAR,打包成一个*.EAR
(4)WebLogic的控制台中登记该应用或把该EAR文件拷到application目录下。到此处就完成了部署。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=8766&tstart=25&quint=true
WebLogic如何设置session超时时间
1 web.xml
设置WEB应用程序描述符web.xml里的
单位,并覆盖weblogic.xml中的TimeoutSecs属性
此例表示Session将在54分钟后过期
当
TimeoutSecs这个属性值。
当
weblogic.xml中设置的TimeoutSecs属性值。
该属性值可以通过console控制台来设置
2 weblogic.xml
设置WebLogic特有部署描述符weblogic.xml的
TimeoutSecs属性。这个值以秒为单位
默认值是3600秒
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=1972&tstart=25&quint=true
监控调优 理解JVM的垃圾收集机制
简述
GC即垃圾收集机制是指JVM用于释放那些不再使用的对象所占用的内存。java语言并不要求JVM有GC,也没有规定GC如何工作。不过常用的JVM都有GC,而且大多数GC都使用类似的算法管理内存和执行收集操作。
在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如,实时应用程序主要是为了避免垃圾收集中断,而大多数OLTP应用程序则注重整体效率。理解了应用程序的工作负荷和JVM支持的垃圾收集算法,便可以进行优化配置垃圾收集器。
垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。GC首先要判断该对象时候可以收集。两种常用的方法是引用计数和对象引用遍历。引用计数存储对特定对象的所有引用数,也就是说,当应用程序创建引用以及引用超出范围时,JVM必须适当增减引用数。当某对象的引用数为0时,便可以进行垃圾收集。
早期的JVM使用引用计数,现在大多数JVM采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,GC必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。
下一步,GC要删除不可到达的对象。删除时,有些GC只是简单的扫描堆栈,删除未标记的对象,并释放它们的内存以生成新的对象,这叫做清除(sweeping)。这种方法的问题在于内存会分成好多小段,而它们不足以用于新的对象,但是组合起来却很大。因此,许多GC可以重新组织内存中的对象,并进行压缩(compact),形成可利用的空间。
为此,GC需要停止其他的活动活动。这种方法意味着所有与应用程序相关的工作停止,只有GC运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的GC不断增加或同时运行以减少或者清除应用程序的中断。有的GC使用单线程完成这项工作,有的则采用多线程以增加效率。
下面列举一些JVM使用的GC
标记-清除收集器:这种收集器首先遍历对象图并标记可到达的对象,然后扫描堆栈以寻找未标记对象并释放它们的内存。这种收集器一般使用单线程工作并停止其他操作。
标记-压缩收集器:有时也叫标记-清除-压缩收集器,与标记-清除收集器有相同的标记阶段。在第二阶段,则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。
复制收集器这种收集器将堆栈分为两个域,常称为半空间。每次仅使用一半的空间,JVM生成的新对象则放在另一半空间中。GC运行时,它把可到达对象复制到另一半空间,从而压缩了堆栈。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率降低。
增量收集器增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。有多种方法可以定义实际的GC。
分代收集器 这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。JVM生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。
并发收集器 并发收集器与应用程序同时运行。这些收集器在某点上一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低。
并行收集器 并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显著的提高java应用程序的可扩展性。
Sun Hotspot 1.4.1 JVM堆大小的调整
Sun Hotspot 1.4.1使用分代收集器,它把堆分为三个主要的域:新域、旧域以及永久域。JVM生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。在永久域中JVM则存储class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分。下面介绍如何控制这些域的大小。
可使用-Xms和-Xmx控制整个堆的原始大小或最大值。比如,下面的命令是把初始大小设置为128M:
java –Xms128m –Xmx256m
为控制新域的大小,可使用-XX:NewRatio设置新域在堆中所占的比例。比如下面的命令把整个堆设置成128m,新域比率设置成3,即新域与旧域比例为1:3,新域为堆的1/4或32M:
java –Xms128m –Xmx128m –XX:NewRatio =3
可使用-XX:NewSize和-XX:MaxNewsize设置新域的初始值和最大值。比如,下面的命令把新域的初始值和最大值设置成64m:
java –Xms256m –Xmx256m –Xmn64m
一般不把永久域当作堆的一部分。永久域默认大小为4m。运行程序时,JVM会调整永久域的大小以满足需要。每次调整时,JVM会对堆进行一次完全的垃圾收集。使用-XX:MaxPerSize标志来增加永久域搭大小。在WebLogic Server应用程序加载较多类时,经常需要增加永久域的最大值。当JVM加载类时,永久域中的对象急剧增加,从而使JVM不断调整永久域大小。为了避免调整,可使用-XX:PerSize标志设置初始值。比如,下面把永久域初始值设置成32m,最大值设置成64m。
java –Xms512m –Xmx512m –Xmn128m –XX:PermSize=32m –XX:MaxPermSize=64m
默认状态下,HotSpot在新域中使用复制收集器。该域一般分为三个部分。第一部分为Eden,用于生成新的对象。另两部分称为救助空间,当Eden充满时,收集器停止应用程序,把所有可到达对象复制到当前的from救助空间,一旦当前的from救助空间充满,收集器则把可到达对象复制到当前的to救助空间。From和to救助空间互换角色。维持活动的对象将在救助空间不断复制,直到它们获得使用期并转入旧域。
使用-XX:SurvivorRatio可控制新域子空间的大小。同NewRation一样,SurvivorRation规定某救助域与Eden空间的比值。比如,以下命令把新域设置成64m,Eden占32m,每个救助域各占16m:
java –Xms256m –Xmx256m –Xmn64m –XX:SurvivorRation=2
如前所述,默认状态下HotSpot对新域使用复制收集器,对旧域使用标记-清除-压缩收集器。在新域中使用复制收集器有很多意义,因为应用程序生成的大部分对象是短寿命的。理想状态下,所有过渡对象在移出Eden空间时将被收集。如果能够这样的话,并且移出Eden空间的对象是长寿命的,那么理论上可以立即把它们移进旧域,避免在救助空间反复复制。
但是,应用程序不能适合这种理想状态,因为它们有一小部分中长寿命的对象。最好是保持这些中长寿命的对象并放在新域中,因为复制小部分的对象总比压缩旧域廉价。
为控制新域中对象的复制,可用-XX:TargetSurvivorRatio控制救助空间的比例。该值是一个百分比,默认值是50。当较大的堆栈使用较低的sruvivorratio时,应增加该值到80至90,以更好利用救助空间。
用-XX:maxtenuring threshold可控制上限。为放置所有的复制全部发生以及希望对象从eden扩展到旧域,可以把MaxTenuring Threshold设置成0。设置完成后,实际上就不再使用救助空间了,因此应把SurvivorRatio设成最大值以最大化Eden空间,设置如下:
java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=5000
从JVM中获取信息以助于调整方案
-verbose.gc开关可显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。
打开-xx:+ printgcdetails开关,可以详细了解GC中的变化。
打开-XX: + PrintGCTimeStamps开关,可以了解这些垃圾收集发生的时间,自JVM启动以后以秒计量。
最后,通过-xx: + PrintHeapAtGC开关了解堆的更详细的信息。
为了了解新域的情况,可以通过-XX:=PrintTenuringDistribution开关了解获得使用期的对象权。
BEA JRockit JVM的使用
Bea WebLogic 8.1使用的新的JVM用于Intel平台。在Bea安装完毕的目录下可以看到有一个类似于jrockit81sp1_141_03的文件夹。这就是Bea新JVM所在目录。
不同于HotSpot把Java字节码编译成本地码,它预先编译成类。JRockit还提供了更细致的功能用以观察JVM的运行状态,主要是独立的GUI控制台或者WebLogic Server控制台。Bea JRockit JVM支持4种垃圾收集器:
分代复制收集器:它与默认的分代收集器工作策略类似。对象在新域中分配,即JRockit文档中的nursery。这种收集器最适合单CPU机上小型堆操作。
单空间并发收集器:该收集器使用完整堆,并与背景线程共同工作。尽管这种收集器可以消除中断,但是收集器需花费较长的时间寻找死对象,而且处理应用程序时收集器经常运行。如果处理器不能应付应用程序产生的垃圾,它会中断应用程序并关闭收集。
分代并发收集器:这种收集器在护理域使用排它复制收集器,在旧域中则使用并发收集器。由于它比单空间共同发生收集器中断频繁,因此它需要较少的内存,应用程序的运行效率也较高,注意,过小的护理域可以导致大量的临时对象被扩展到旧域中。这会造成收集器超负荷运作,甚至采用排它性工作方式完成收集。
并行收集器:该收集器也停止其他进程的工作,但使用多线程以加速收集进程。尽管它比其他的收集器易于引起长时间的中断,但一般能更好的利用内存,程序效率也较高。
默认状态下,JRockit使用分代并发收集器。要改变收集器,可使用-Xgc:
java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m…
尽管JRockit支持-verbose:gc开关,但它输出的信息会因收集器的不同而异。JRockit还支持memory、load和codegen的输出。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&threadID=19031&tstart=0
WebLogic Server Hang产生的一般原因
系统内存不足
系统CPU忙,系统文件描述符数目不足,线程死锁,JVM有GC方面的bug,对于一些特定的情况可以使用truss命令跟踪系统调用来进行分析。可以打开 JVM的gc log,在java命令行上加上-verbose:gc,GC的log输出在java进程的标准输出里,在hp的JVM上,可以通过在java命令行上加 -Xverbosegc:file=gcfilename来将gc log写到指定的文件其输出类似:[GC 15639K->13700K(65280K), 0.0068439 secs]。解决办法是调整JVM的内存设置和gc算法,升级jvm或是os patch。
出现OutOfMemoryError或是观察到内存吃紧,操作系统本身的剩余内存,通过top或是vmstat观察,操作系统的swap区,Swap区太小可能导致编译jsp时报“Not enough space”的错,操作系统kernel参数中maxsize的大小,如果观测到数据库连接池里的连接泄漏,极可能是内存泄漏的先兆
JVM 的heap区大小,通过java命令行中的-Xms,-Xmx指定,建议最小值和最大值设成一样,可以通过WebLogic console上server/monitor/performance来观察其使用情况,建议生产系统最256M,一般情况下可以设置为系统剩余物理内存的80%,Heap size太大在一些JVM上会有问题,对于sun和hp的JVM,permanent size太小也会出OutOfMemoryError,在java命令行上加-XX:MaxPermSize=128m
尽量减少内存消耗,Session中不要放大的数据,并尽量在不再需要的时候remove掉,如果可以调整session timeout到较小的值,避免在J2EE server端应用里边调用AWT/swing作图,调整ejb的cache/pool设置
内存泄漏,可以通过WebLogic console来观察JVM的heap memory使用情况来获知是否有内存泄漏情况,采用第三方辅助工具来获取更详细信息,如Jprobe/OptimizeIt;有可能是weblogic 的bug,但绝大部分情况是由用户的应用引起的,最常见的代码问题是数据库连接没正常关闭。
系统CPU忙
如果用户访问量很大,CPU占用很高(user态)并不是异常
如果是kernel态很多,需要OS厂商调整操作系统
采用top找到占用CPU很多的进程,如果是非weblogic进程,应该考虑将其移到另外的server上运行,如果是运行weblogic的java进程,通过做thread dump(详细信息后边会介绍到)来确认是那段代码导致了这么高的CPU使用(也有可能是os/jvm本身不正常)
系统文件描述符数目不足
Log中有“too many open files”的错误,表示达到了系统对一个进程能同时打开的文件数的限制:
ulimit –a –H 可以查看当前限制
ulimit –n number可以来更改当前环境的设置,建议至少设到4096
Solaris上可以通过/usr/proc/bin/pfiles pid来查看指定进程的限制和当前使用的file descriptor数目
Solaris上root用户可以通过/usr/proc/bin/plimit -n soft,hard pid 来动态更改进程的文件描述符的限制
线程死锁
对于原因不明的hang或是响应慢,最根本的方法就是获取thread dump信息,对于windows系统,在运行java的窗口按Ctrl+Break,对于UNIX系统,首先用ps找到运行weblogic的java 进程的pid,然后执行kill –3 pid,JVM将负责将所有java进程的状态、执行堆栈dump到其标准输出,为了方便获取thread dump信息,在weblogic启动的时候,最好将其标准输出重定向到一个文件,为了反映线程状态的动态变化,需要接连多次做thread dump,每次间隔10-20s。
对于thread dump信息,主要关注的是线程的状态和其执行堆栈,线程的状态一般为三类
Runnable(R):当前可以运行的线程
Waiting on monitor(CW):线程主动wait
Waiting for monitor entry(MW):线程等锁
一般关注的都是第一和第三种状态的线程
CPU很忙则关注runnable的线程
CPU闲则关注waiting for monitor entry的线程
一种典型的死锁是由于在server端应用(比如servlet)中请求由同一weblogic实例serve的资源,解决办法就是将该servlet放到另外的执行队列里去执行。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=4525&tstart=0&quint=true
"指定的网络名不再可用"错误
wl6.1和wl7.0部署应用后都在后台抛出“java.net.SocketException: ReadFile failed: 指定的网络名不再可用”,这不是一个致命的错误,只会在中文Window上。如Hilaser和linstone提出了办法:
如果你是自己随便玩玩,将你的JDK升级到jdk1.3.1_06
用wls6.1 sp4,到如下位置下载
http://commerce.bea.com/SoftwareProductDetailWLS?SWName=WebLogic+Server+Evaluation+Software&SWVersion=Version+6.1+SP4&SWPlatform=Microsoft+Windows+NT%2F2000
运行cmd,打开窗口菜单(点击左上角窗口图标),选择默认值,将默认代码页改为437。
原文地址:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=9393&tstart=0