zoukankan      html  css  js  c++  java
  • weblogic 的应用 常见问题处理 db2 链接不上(转载)

    weblogic10之Failed to initialize the application 'wss-1-1' due to error weblogic.

    错误信息:('wss-1-1' 是配置的jndi)
    <Jan 14, 2011 3:42:09 PM CST> <Error> <Deployer> <BEA-149205> <Failed to initialize the application 'wss-1-1' due to error weblogic.application.ModuleException: .
    weblogic.application.ModuleException:
    at weblogic.jdbc.module.JDBCModule.prepare(JDBCModule.java:290)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:391)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:59)
    Truncated. see log file for complete stacktrace

    Caused By: weblogic.common.ResourceException: Io exception: Connection reset
    at weblogic.jdbc.common.internal.XAConnectionEnvFactory.makeConnection(XAConnectionEnvFactory.java:472)
    at weblogic.jdbc.common.internal.XAConnectionEnvFactory.createResource(XAConnectionEnvFactory.java:166)
    at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1180)
    at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1104)
    at weblogic.common.resourcepool.ResourcePoolImpl.start(ResourcePoolImpl.java:244)
    Truncated. see log file for complete stacktrace
    >
    提示:错误信息表示访问数据库异常,创建链接池失败。
    因此肯定的是jndi配置有问题(即使配置的时候 测试连接成功)

    解决:进入console/服务/JDBC/数据源/wss-1-1/配置/连接池/高级
    其中有个“重试创建连接的频率:0(默认值)”需要修改成大于0的任意值。
    weblogic对此值注释:尝试建立数据库连接的间隔秒数。

    如果不设置此值,则在数据库不可用的情况下,创建数据源的操作将失败。如果已设置此值且在创建数据源时数据库不可用,则在您指定的秒数之后,WebLogic Server 将重新尝试在池中创建连接,并会不断尝试创建连接,直到创建成功。

    如果设置为 0,则将禁用连接重试。

    MBean 属性 (不适用于应用程序模块):
    JDBCConnectionPoolParamsBean.ConnectionCreationRetryFrequencySeconds

    最小值:0

    最大值:2147483647
     
     

    http://hi.baidu.com/wa0362/home

    提供Oracle技术支持、故障排除、性能优化,IBM小机和存储、Linux、Netbackup技术支持
    Weblogic 10.3配置db2连接池Cannot load driver: COM.ibm.db2.jdbc.app.DB2Driver
     

    共两步

    1)先要从下面目录
    [db2inst@linux01 Java]$ pwd
    /home/db2inst/sqllib/java

    复制db2java.jar  ,db2jcc.jar  ,db2jcc_license_cu.jar 到
    /weblogic/user_projects/domains/test_domain/lib 

    这个目录里的README.txt说的很清楚,这个目录里的.jar文件会在weblogic启动时自动加到CLASSPATH的最后。

    这样,在Weblogic启动时可以看到下面的日志:
    <Jan 25, 2011 1:56:07 AM CST> <Notice> <WebLogicServer> <BEA-000395> <Following extensions directory contents added to the end of the classpath:
    /weblogic/user_projects/domains/test_domain/lib/db2java.jar:/weblogic/user_projects/domains/test_domain/lib/db2jcc.jar:/weblogic/user_projects/domains/test_domain/lib/db2jcc_license_cu.jar>


    2)这个完了之后,按照标准做法仍然不行。在Test Configuration时会收到下面的错误提示:
    Connection test failed.
    Cannot load driver: COM.ibm.db2.jdbc.app.DB2Driver
    很误导人的一个提示

    如果创建JDBC时采用Other,来手动指定Driver Class Name等设定之后在Test Configuration时会提示
    找不到 db2jcct2云云...

    其实时找不到libdb2jcct2.so   can't load db2jcct2(windows为db2jcct2.dll)

    需要做的就是
    ]# export LD_LIBRARY_PATH=/home/db2inst/sqllib/lib:$LD_LIBRARY_PATH

    然后重起Weblogic,再创建JDBC就没有任何问题了,无论Database Driver用DB2的还是Oracle(weblogic)的。

    看来还是没有把/home/db2inst/sqllib/lib加到LD_LIBRARY_PATH里造成的。


    针对不同操作系统

    On Windows?:
    Add the path that includes the db2jcct2.dll file to the PATH variable. By default, the db2jcct2.dll file is located in %DB2HOME%in.

    On UNIX:
    DB2 Content Manager V8.4 and its APIs load libdb2jcct2.so from DB2 instance library path defined in LD_LIBRARY_PATH or LIBPATH variable.

    32-bit DB2 Instance:
    Make sure that the DB2 instance library path exists in LD_LIBRARY_PATH (Solaris? or Linux) or LIBPATH (AIX?). For example:
    For Solaris: export LD_LIBRARY_PATH=/export/home/db2inst1/sqllib/lib:$LD_LIBRARY_PATH 
    For Linux: export LD_LIBRARY_PATH=/home/db2inst1/sqllib/lib:$LD_LIBRARY_PATH
    For AIX: export LIBPATH=/home/db2inst1/sqllib/lib:$LIBPATH

    64-bit DB2 Instance:
    For 64-bit DB2 instance, [DB2 Instance Dir]/sqllib/lib links to 64-bit library directory. The following is the link relationship of the DB2 library directory on UNIX:
    [DB2 Instance Dir]/sqllib/lib -> [DB2 Instance Dir]/sqllib/lib64 -> [DB2 Product Installation Dir]/lib64
    [DB2 Instance Dir]/sqllib/lib32 -> [DB2 Product Installation Dir]/lib32

    But DB2 Content Manager V8.4 supports only the 32-bit libdb2jcct2.so. To make DB2 Content Manager V8.4 and its APIs work correctly, the path to 32-bit libraries must be listed before the path to the 64-bit libraries in LD_LIBRARY_PATH or LIBPATH.
    For example:
    For AIX?: export LIBPATH=/opt/IBM/db2/V9.1/lib32:$LIBPATH 

    weblogic热部署的几个疑问
    首先感谢各位关注这个帖子。我的问题是这样的:
         据我所知,Weblogic能实现热部署功能,而且有自己的热部署机制,我看到在Weblogic的控制台中有如下三个配置的页面:
    servlet-reload-check-secs
    resource-reload-check-secs
    JSP  page-check-seconds


    然后在edocs.bea.com网站上查找到了weblogic.xml对于这三个设置选项的参数介绍:
    servlet-reload-check-secs
    <servlet-reload-check-secs> 元素定义 WebLogic Server 是否执行 servlet 检查以查看 servlet 是否已更改,如果已更改,是否重新加载。
            值 -1 表示永不检查 servlet。该值为生产环境中的默认值。
            值 0 表示总是检查 servlet。
            值 1 表示每秒检查一次 servlet。该值为开发环境中的默认值。


    resource-reload-check-secs
    使用 <resource-reload-check-secs> 元素针对 Web 应用程序范围内资源路径中发现的缓存资源执行元数据缓存。该参数标识 WebLogic Server 检查资源是否发生修改的频率,如果已修改,则重新加载。
            值 -1 表示元数据进行缓存,但从不对磁盘进行检查以便找出所做的更改。建议在生产环境中使用该值,以提升性能。
            值 0 表示不执行元数据缓存。持续更改文件的客户必须将该参数设置为大于或等于 0 的一个值。
            值 1 表示每秒重新加载一次。该值为开发环境中的默认值。


    JSP  page-check-seconds
    设置 WebLogic Server 检查 JSP 文件的时间间隔(秒),以便查看 JSP 文件是否已更改以及是否需要重新编译。如果已发生更改,还会检查依赖关系并递归重新加载。
            值 -1 表示永不检查页面。该值为生产环境中的默认值。
            值 0 表示总是检查页面。
            值 1 表示每秒检查一次页面。该值为开发环境中的默认值。



    就我的理解,应该是分别配置Servlet、Resource和Jsp的来控制对应三类所控制的内容的热部署时间间隔,如果设置为-1的话那么这一项就不支持热部署。

    我这边的问题是:
    因为开发方在项目开发中,使用了开发方的框架产品AB对自己控制范围之内的内容也支持热部署,由于weblogic也支持热部署,担心两者的热部署功能同时启用,特别是对同样的内容进行热部署控制时,可能会造成冲突,所以开发方希望搞清楚Weblogic对三类热部署设置分别的控制范围是什么?也就是servlet、jsp、resource这三类,每一类下面可以包含哪些内容?!
     
     
     
    weblogic内存占用过大调优
     
    WebLogic Server Hang产生的原因一般为:
    系统内存不足
    系统cpu忙
    系统文件描述符数目不足
    线程死锁
    JVM有GC方面的bug
    对于一些特定的情况可以使用truss命令跟踪系统调用来进行分析


    系统内存不足
    出现OutOfMemoryError或是观察到内存吃紧
    操作系统本身的剩余内存
    通过top或是vmstat观察
    操作系统的swap区
    Swap区太小可能导致编译jsp时报“Not enough space”的错
    操作系统kernel参数中maxdsiz的大小
    如果观测到数据库连接池里的连接泄漏,极可能是内存泄漏的先兆


    系统内存不足
    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,但绝大部分情况是由用户的应用引起的
    最常见的代码问题是数据库连接没正常关闭
    比较好的写法是:
    Connection conn = null;
    Statement stmt = null;
    ResultSet rset= null;
    try
    {
    conn = getConnection()…
    }
    catch(SQLException sqle)
    {
    }
    finally
    {
    try{rset.close();}catch(Exception e){}
    try{stmt.close();}catch(Exception e){}
    try{conn.close();}catch(Exception e){}
    }



    系统cpu忙
    如果用户访问量很大,cpu占用很高(user态)并不是异常
    如果是kernel态很多,需要OS厂商调整操作系统
    采用top找到占用cpu很多的进程
    如果是非weblogic进程,应该考虑将其移到另外的server上运行
    如果是运行weblogic的java进程,通过做thread dump(详细信息后边会介绍到)来确认是那段代码导致了这么高的cpu使用(也有可能是os/jvm本身不正常)


    系统文件描述符数目不足
    Log中有“too many open files”的错误
    表示达到了系统对一个进程能同时打开的文件数的限制
    ulimit ?Ca ?CH 可以查看当前限制
    ulimit ?Cn 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 ?C3 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放到另外的执行队列里去执行


    JVM有GC方面的bug
    打开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


    mit ?Cn 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 ?C3 pid
    JVM将负责将所有java进程的

    java.net.SocketException: Too many open files
     
    java.net.SocketException: Too many open files

    linux tomcat socket
    java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
    at java.net.ServerSocket.implAccept(ServerSocket.java:450)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)

    tomcat""

    http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html

    1ulimit -a
       [root@test security]# umlimit -a
    -bash: umlimit: command not found
    [root@test security]# ulimit -a
    core file size        (blocks, -c) 0
    data seg size         (kbytes, -d) unlimited
    file size             (blocks, -f) unlimited
    max locked memory     (kbytes, -l) unlimited
    max memory size       (kbytes, -m) unlimited
    open files                    (-n) 1024
    pipe size          (512 bytes, -p) 8
    stack size            (kbytes, -s) 8192
    cpu time             (seconds, -t) unlimited
    max user processes            (-u) 7168
    virtual memory        (kbytes, -v) unlimited
    [root@test security]#
    open files 1024

    2. ulimit -n 4096
    [root@test security]# ulimit -n 4096
    [root@test security]# ulimit -a
    core file size        (blocks, -c) 0
    data seg size         (kbytes, -d) unlimited
    file size             (blocks, -f) unlimited
    max locked memory     (kbytes, -l) unlimited
    max memory size       (kbytes, -m) unlimited
    open files                    (-n) 4096
    pipe size          (512 bytes, -p) 8
    stack size            (kbytes, -s) 8192
    cpu time             (seconds, -t) unlimited
    max user processes            (-u) 7168
    virtual memory        (kbytes, -v) unlimited
     
    weblogic 9 生产模式

    这两天在用weblogic 9 发布应用,有些体会。

    在创建domain的时候,开发模式下,启动和发布服务是没有问题的。但是如果是生产模式,就遇到了一点问题。

    当然如果是windows版本应该是没有什么太大问题的,我测试得还是比较顺利。这次应用是发布在HPUnix上的,选择生产模式,在启动服务的时候,提示输入用户名,输入默认的weblogic, 回车,不知道为什么就是不出来提示输入密码,而是直接shutdown了。原以为是版本的问题,特地从9.0升级到9.2,结果还是不行。于是查看了一下 startWebLogic.sh的教本,增加了两个环境变量WLS_USER和WLS_PW,其值就是用户名和密码,再启动服务就可以了。

    在unix端启动服务,当然最好是放入后台运行,几年没有使用unix,有些命令都忘记了,问了之后才想起nohup命令。

    nohup startWebLogic.sh >xxx.log &

    停止weblogic最好使用stopWebLogic.sh,当然如果实在不行,就使用kill -9了,呵呵。

    其实早些年,自己是写一个针对一个进程进行启动、停止、查看状态的脚步,还是不错的。

    //----------------------------------------

    今天和bea的支持做了接触,学到了一些weblogic的使用。

    前面提到生产模式,输入用户名后就shutdown,是因为安装weblogic的时候,没有按照安装指南超作。其实只要完整地照着安装步骤来安装,应该是没有问题的。

    主要是修改一个目录的可执行权

    chmod -R +x ./bea/weblogic92/server/native

    如果后台启动,还是要指定用户名和口令的,所以在应用的目录(startWebLogic.sh所在的目录),增加boot.properties文件,内容为:

    username=weblogic

    password=weblogic

    启动weblgoic后,这个文件会被加密的。同时加密后的文件会被cache到servers/AdminServer/security目录,所以如果修改口令后,记得要先清空一下cache的文件。

    还有一个比较重要的是,使用weblogic,最好到bea的网站上查看当前版本对应的操作系统的补丁信息,不打上操作系统的补丁,使用weblogic就有一定的不稳定性了。

    内存管理:如果是4G内存的服务器,建议按如下配置。

    修改 setDomainEnv.sh 文件

    MEM_ARGS="-Xms1536m -Xmx1536m -Xss1m"
    export MEM_ARGS

    修改 MaxPermSize=256m

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/jjzd/p/6269244.html
Copyright © 2011-2022 走看看