[转帖]weblogic常见问题汇总_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4659 | 回复: 0   主题: [转帖]weblogic常见问题汇总        下一篇 
zxl1990
注册用户
等级:上尉
经验:663
发帖:59
精华:1
注册:2012-12-19
状态:离线
发送短消息息给zxl1990 加好友    发送短消息息给zxl1990 发消息
发表于: IP:您无权察看 2012-12-20 9:54:48 | [全部帖] [楼主帖] 楼主

bea\user_projects\domains\mydomain下可以查看日志,如果出现关闭的连接错误,可以在配置连接池的时候设置,选中测试返回的连接和请求的连接. 

如果经常出现内存溢出的问题话查看日志,如果出现Executethread: '7' for queue:'weblogic.kernel.default'

这样类似Executethread开头的可能是线程资源耗尽的问题,如果是24说明是对象锁没释放

怎样查看weblogic 目前可用的线程数 ?

console控制台上myserver-下面的Monitoringtab-Performance 中的Idle Threads显示的数目就是(下面有)

    WebLogic Server 性能及调整:

    查看使用 WebLogic 8.1 线程缓冲池模型

性能查看:

调整weblogic的使用内存 

修改对应的domain下面的启动脚本,比如:weblogic安装目录下对应domain的启动脚本:startWeblogic.sh,追加

Windows:
set MEM_ARGS=-Xms2045m -Xmx2560m
Unix:
MEM_ARGS="-Xms1024m -Xmx2048m"


注:Xms表示最小内存,Xmx表示最大内存。 

主要内容

?      1WebLogic服务的监控

?      2WebLogic性能优化

?      3UNIX操作命令介绍

WebLogic服务的监控

?      WebLogic的控制台console对内存的监控

?      Console  -->  server  -->   myserver   -->    右边窗口Mornitoring  -->  Performance


WebLogic服务的监控

?      Idle Threads 空闲线程数

    这个值不能为0,否则意味着系统无线程可用,有死机的危险.

?      Queue Length 等待队列的长度

    当Idle Threads的值为0时,Queue Length会出现数值。如果Queue Length维持在较高位置,且不下降时,有死机危险。但只要值在变,就说明系统还在运行.

WebLogic服务的监控

?      Memory Usage 内存的使用情况

    主要看垃圾回收是否频繁,在系统高负载的情况下,内存是否能达到8090%的使用率。

WebLogic服务的监控

?      查看线程的运行情况

    线程是否都为空闲null状态。如不为空闲,看看是什么样的请求在占用线程。

Console  -->  server  -->   myserver    -->    右键菜单View Execute Threads


如下图所示:

WebLogic服务的监控

?      Current Request 当前线程正在处理的请求

?      被占用的线程的情况:464849

    占用内容:Socket Reader Request

WebLogic性能优化——内存

    一般建议正式的域(Domain)设置为-Xms1024m -Xmx1024m,表示堆的初始大小和最大值都是1024M

    1、修改文件:UnixstartWebLogic.shstartManagedWebLogic.sh(集群用);Windows系统为startWebLogic.cmdstartManagedWebLogic.cmd(集群用)。

?      2、修改位置:为保证我们修改的参数生效,最好将内存参数命令行放在启动Java虚拟机之前。示例如下: 

WebLogic性能优化——内存

? export CLASSPATH
? MEM_ARGS="-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m"
? # Call WebLogic Server
? echo "."
? echo "CLASSPATH=${CLASSPATH}"
? echo "."
? echo "PATH=${PATH}"
? echo "."
? echo "***************************************************"
? echo "* To start WebLogic Server, use a username and *"
? echo "* password assigned to an admin-level user. For *"
? echo "* server administration, use the WebLogic Server *"
? echo "* console at http://[hostname]:[port]/console *"
? echo "***************************************************"
? ${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS} -Dweblogic.Name=${SERVER_NAME} -Dweblogic.ProductionModeEnabled=${PRODUCTION_MODE} -Djava.security.policy="${WL_HOME}/server/lib/weblogic.policy" weblogic.Server


WebLogic性能优化——内存

?      3、注意UnixWindows的参数差别。AIXLinux的参数值要加上双引号,Windows则不需要加。如该加的没加,不该加的加了,就会导致设置的参数不起作用,影响应用系统的性能。 

?      4Unix系统下参数是否生效的检查。可以使用如下命令:

ps –ef grep java


    如果设置的参数生效,在显示的结果中会看到设置的值。如没有生效,会显示weblogic缺省的值-Xms32m Xmx200m

WebLogic性能优化——内存

?      5Windows下可以使用echo命令,在startWebLogic.cmd文件中查看

echo %MEM_ARGS%


    会在dos窗口中输出内存设置的信息。

WebLogic性能优化——线程数

?      线程数Thread Count

    weblogic服务在接收到请求后,会交给后台的线程来处理,线程数决定了并发处理能力的大小。

    一般以服务器的CPU个数为基准,每个CPU可负担25个线程,最好不要超过50个 

?      查看线程的运行情况,上面已经提到。

WebLogic性能优化——线程数

?      更改线程数Thread Count

    server  ——>  右键菜单  ——>  View Execute Queues”项查看,如下图:

点击“default”,进入修改页面:

WebLogic性能优化——线程数

?      修改了thread count的值后,要点击“应用(Apply)”按钮,并重启服务后,参数才能生效。

WebLogic性能优化——连接池

?      数据库连接池的初始连接数建议200或以上,如资源允许可设置得更大,但不能操作最大连接数,最大连接数设置800

?      Oracle的参数processes设置为1000或以上。

?      查看连接池:console>services >Connection Pools

1、 如何给weblogic指定大小的内存

在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增 

set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M 

2、 如何设定的weblogic的热启动模式(开发模式)与产品发布模式

可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务 

的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。 

3、 如何启动时不需输入用户名与密码

修改服务启动文件,增加 WLS_USERWLS_PW项。也可以在boot.properties文件中增加 

加密过的用户名和密码

4、 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jmsejb或 

连接池等相关信息进行配置后,实际保存在什么文件中

保存在此Domainconfig.xml文件中,它是服务器的核心配置文件。 

5、 说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp 

放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了又比如这其中用到了一个自己写的javaBean该如何办

Domain目录服务器目录applications,将应用目录放在此目录下将可以作为应用访问 

,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录 

中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应 

用将可以实现在浏览器上无需输入应用名。 

6、 如何查看在weblogic中已经发布的EJB? 

可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB 

7、 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置 

缺省安装中使用DemoIdentity.jksDemoTrust.jks KeyStore实现SSL,需要配置服务 

器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创 

identitytrust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向 

还是双向的。 

8、在weblogic中发布ejb需涉及到哪些配置文件 

不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括 

ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要 

weblogic-cmp-rdbms-jar.xml


9EJB需直接实现它的业务接口或Home接口吗,请简述理由

远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中 

对应实现类会作为对应接口类型的实例被使用。 

10、说说在weblogic中开发消息Bean时的persistentnon-persisten的差别 

persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服 

务器依然会将消息在此MDB可用的时候发送过来,而nonpersistent方式的消息将被丢 

弃。 

11、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法 

Session Facade Pattern:使用SessionBean访问EntityBean 

Message Facade Pattern:实现异步调用 

EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问 

Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性 

Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性 

Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致 

性 

EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及 

开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性 

问题描述

在出现以下情况时怀疑服务器挂起:

服务器不响应新的请求。 

请求超时。 

请求处理的时间越来越长(其最终结果可能是挂起)。 

通常,服务器挂起不会表现为服务器崩溃,但服务器挂起之后可能会崩溃。 

故障排除

请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。 

快速链接: 

为什么发生此问题? 

服务器挂起的可能原因 

基本步骤 

已知的 WebLogic Server 问题 

收集 Thread Dump 

Thread Dump 分析 

为什么发生此问题?

服务器挂起有多种原因(请参考服务器挂起的可能原因一节)。一般而言,服务器挂起是因为缺少某种资源。缺少资源会阻止服务器响应服务请求。例如,由于故障(死锁)或者大量请求的缘故,可能没有任何可用的执行线程来完成工作,所有执行线程都被占用或忙于处理以前的请求。 

返回页首 

服务器挂起的可能原因 

主题 模式名称 链接 

RMIRJVM 响应 - 所有绑定线程等待 RJVMRMI 响应。 EJB_RMI 服务器挂起 EJB_RMI 服务器挂起 

应用程序死锁 - 线程锁定资源 1,然后等待锁定资源 2。另一个线程锁定资源 2,然后等待锁定资源 1。 应用程序死锁导致服务器挂起 待定 

线程全部被占用,没有线程可用于新工作。 线程占用导致服务器挂起 待定 

垃圾回收花费太多时间。 垃圾回收导致服务器挂起 待定 

servlet 时间的 JSP 错误设置,比如 PageCheckSeconds。 JSP 导致服务器挂起 待定 

死锁造成 JDBC 挂起。 JDBC 中的服务器挂起 待定 

(代码优化)过程中的 JVM 挂起类似于服务器挂起。 代码优化中服务器挂起 待定 

在大量负载情况下 JSP 编译造成服务器挂起。 JSP 编译导致服务器挂起 待定 

SUN JVM 错误,比如轻量型线程库。 Sun JVM 错误导致服务器挂起 待定 

返回页首 

基本步骤

当服务器挂起时,首先使用 java weblogic.Admin t3://server:port PING 来 ping 该服务器。如果服务器能够响应此 ping,则可能是应用程序正在挂起而不是服务器自身。 

确保服务器确实正在挂起,而不是在做垃圾回收。若要验证挂起,启用 -verbosegc 重新启动服务器,然后将 stdout 和 stderr 重定向到一个文件中。当服务器停止响应时,可以判断它是正在收集无用信息还是确实挂起。 

WebLogic Server 使用“Default”线程队列响应客户端服务请求。这些是在发生服务器挂起时应当检查的线程。下面是其中一个线程在 Thread Dump 中的形式示例。Execute Thread 14 正在等待任务。该线程调用的最后方法是 Object.wait()。 

"ExecuteThread: '14' for queue: 'default'" daemon prio=5 tid=0x8b0ab30 nid=0x1f4 waiting on monitor [0x96af000..0x96afdc4]
at
java.lang.Object.wait(Native Method)
at
java.lang.Object.wait(Object.java:420)
at
weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:94)
at
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:118)


确定“DefaultExecuteThread 队列是否超载。利用控制台确定“Default”队列中的所有 ExecuteThreads 是否空闲。如果没有一个空闲,则应用程序可能需要一个更大的 ExecuteThread 数来配置。可以通过控制台更改该值,并将其保存在 config.xml 文件中。 

如果执行队列有空闲线程,则可能没有分配足够的 Socket Reader 线程。缺省情况下,WebLogic Server 实例在启动时创建三个 Socket Reader 线程。如果群集系统在高峰期使用的 Socket Reader 线程超过三个,则增加 Socket Reader 线程的数量。 

通常,Socket Reader 线程的数量应当较小。但是,如果 Weblogic Serve 充当正在挂起的服务器实例的客户端,则应当为每个 Weblogic Serve 配置一个线程。 

如果使用 JDBC 连接池,确保池中已经配置的 JDBC 连接数量与同时请求(即执行线程)的数量相等。

返回页首

Thread Dump 分析 

分析服务器挂起的最有用的工具是一系列 Thread DumpThread Dump 提供关于每个线程在特定时刻正在执行什么操作的信息。一系列 Thread Dump(一般每隔 到 10 秒进行三个或更多 Thread Dump)可以帮助分析每个线程从一个 Thread Dump 到另一个 Thread Dump 过程中的状态变化或所缺少的变化。挂起服务器 Thread Dump 一般显示线程状态从第一个 Thread Dump 到最后一个 Thread Dump 中变化很小。 

在 Thread Dump 中查看的内容 

所有请求都通过 ListenThread 进入 WebLogic Server。如果 ListenThread 丢失,就无法接收任何工作,因此也无法完成任何工作。确认在 Thread Dump 中存在 ListenThreadListenThread 应当在 socketAccept 方法中。下面示例说明监听线程 (Listen Thread) 的形式。 

"ListenThread.Default" prio=10 tid=0x00037888 nid=93 lwp_id=6888343 runnable [0x 1a81b000..0x1a81b530]at java.net.PlainSocketImpl.socketAccept(Native Method)
at
java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353)
- locked <0x26d9d490> (a java.net.PlainSocketImpl)
at
java.net.ServerSocket.implAccept(ServerSocket.java:439)
at
java.net.ServerSocket.accept(ServerSocket.java:410)
at
weblogic.socket.WeblogicServerSocket.accept(WeblogicServerSocket.java:24)
at
weblogic.t3.srvr.ListenThread.accept(ListenThread.java:713)
at
weblogic.t3.srvr.ListenThread.run(ListenThread.java:290)


Socket Reader 线程接受来自监听线程队列的传入请求,并将该请求放入执行线程队列。如果 Thread Dump 中没有 Socket Reader 线程,则在某个地方存在导致 Socket Reader 线程消失的错误。应当始终保持至少有三个 Socket Reader 线程。一个 Socket Reader 线程一般用于轮询功能,另外两个用于处理请求。下面是一个 Thread Dump 示例中的 Socket Reader 线程。 

"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" daemon prio=10 tid=0x00036128 nid=75 lwp_id=6888070 waiting for monitor entry [0x1b12f000..0x1b12f530]
at
weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:92)
- waiting to lock <0x25c01198> (a java.lang.String)
at
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
at
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)
"ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" daemon prio=10 tid=0x00035fc8 nid=74 lwp_id=6888067 runnable [0x1b1b0000..0x1b1b0530]at weblogic.socket.PosixSocketMuxer.poll(Native Method)
at
weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:99)
- locked <0x25c01198> (a java.lang.String)
at
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
at
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" daemon prio=10 tid=0x00035e68 nid=73 lwp_id=6888066 waiting for monitor entry [0x1b231000..0x1b231530]
at
weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:92)
- waiting to lock <0x25c01198> (a java.lang.String)
at
weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
at
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)


ThreadPoolPercentSocketReaders 属性设定要用于从 java Socket 中读取消息的执行线程的最大百分比。此属性的最佳值是针对应用程序设定的。缺省值为 33,有效范围是 到 99。 

分配执行线程充当 Socket Reader 线程可提高服务器接受客户端请求的速度和能力。必须平衡专门用于从 Socket 读取消息的执行线程和那些在服务器中执行实际运行任务的线程的数量。 

后续步骤 

后续步骤要求进一步分析 Thread Dump。检查 Thread Dump,了解每个线程在服务器挂起时正在执行的操作。这有助于分析下一个探查阶段。例如,如果 JSP 编译中涉及许多线程,参考服务器挂起的可能原因一节可了解进一步的诊断和测试操作。

weblogic忘记密码如何处理 

l 备份当前domain的config.xml、fileRealm.properties和SerializedSystemIni.dat
2. 新建一个叫fileRealm.properties.src的文件,其内容为:user.system=weblogic ,其中weblogic就是您想要的明文的密码
3. 打开dos窗口/控制台,cd到当前domain的目录,调用setEnv脚本设置相关的环境变量,然后执行:

java weblogic.security.acl.internal.FileRealm fileRealm.properties SerializedSystemIni.dat


4. 将原来的fileRealm.properties中acl、group相关的条目拷回到新生成的fileRealm.properties里边
5. 将config.xml里边加密过的密码(以{3DES}开头)改成明文的。
6. 启动weblogic 

运行java -cp /usr/local/bea/weblogic92/server/lib/weblogic.jar weblogic.security.utils.AdminAccount <新用户名> <新密码> .(注意最后有个点的) 
    * 执行完后在当前目录会生成一个新的DefaultAuthenticatorInit.ldift文件,然后替换原来的<Domain>/security/DefaultAuthenticatorInit.ldift文件。 
    * 从<Domain>/servers/AdminServer/data/ldap/子目录中删除初始化状态文件DefaultAuthenticatormyrealmInit.initialized。 
    * 修改<Domain>/servers/AdminServer/security/boot.properties中的用户密码为刚才新建的用户密码(明文),成功启动后,weblogic会加密用户密码的。 
    * 重新启动服务器。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论