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进程的

weblogic占用java_weblogic内存占用过大调优相关推荐

  1. linux nginx 内存占用,nginx内存占用过高

    nginx内存占用过高.md 现象 nginx运行一段时间后,内存占用非常高,超出系统最大内存后,开始使用SWAP,直至SWAP用尽,系统崩溃.内核参数vm.swappiness = 1. 如图: 监 ...

  2. filebeat实践-内存占用-最大内存占用

    https://yq.aliyun.com/articles/241161 filebeat作为日志采集agent, 是需要部署到生产服务器上的.不理解filebeat的工作机制,不了解filebea ...

  3. 解决Antimalware Service Executable CPU,内存占用高的问题

    from-csdner-Liu_Cabbage: https://blog.csdn.net/m0_37230651/article/details/80893639 1.win键+R键打开运行对话框 ...

  4. tomcat内存占用过高_Tomcat 性能调优之 JVM 调优

    Tomcat.Jetty.GlassFish 等等这系列 Web容器/应用服务器,虽然做为容器,提供的是一个 Java Web 的运行时环境,以支持Servlet/JSP 等等这些内容的运行,但我们都 ...

  5. java 查看堆外内存占用_如何监控和诊断JVM堆内和堆外内存使用?

    上一讲我介绍了 JVM 内存区域的划分,总结了相关的一些概念,今天我将结合 JVM 参数.工具等方面,进一步分析 JVM 内存结构,包括外部资料相对较少的堆外部分. 今天我要问你的问题是,如何监控和诊 ...

  6. mariadb 内存占用优化

    本文由云+社区发表 作者:工程师小熊 摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariad ...

  7. 简单又实用的pandas技巧:如何将内存占用降低90%

    pandas 是一个 Python 软件库,可用于数据操作和分析.数据科学博客 Dataquest.io 发布了一篇关于如何优化 pandas 内存占用的教程:仅需进行简单的数据类型转换,就能够将一个 ...

  8. nginx内存占用高---内存池使用思考

    nginx内存占用高-内存池使用思考 问题现象 nginx top 进程 虚拟内存 200G 实际内存5G 和 CDN 平台相比要高很多 排查思路 使用pmap -p 进程号,发现从系统角度确实 有分 ...

  9. 如何让手游内存占用更小?从内存消耗iOS实时统计开始

    一,问题 在之前的手游项目中,内存使用过多,都开始崩溃了,所以得做iOS内存统计.内存统计有好几种方法:XCode内存使用统计.UnityInternalProfile内存统计,Mono内存统计等方法 ...

最新文章

  1. 1.6 万字长文带你读懂 Java IO
  2. Java基础--二维数组
  3. Scala多线程:使用线程池Executors提交Runnable任务代码示例
  4. Linux系统调用号表
  5. 《剑指offer》整数中1出现的次数(从1到n整数中1出现的次数)
  6. mysql 命令行可以连接 php不能,mysql连接命令行可以php竟然不可以
  7. python ConfigParser模块详解
  8. Spring 常用的注解
  9. c语言绝对值函数作用,C语言实现abs和fabs绝对值
  10. promise语法与用法、this指向和this指向修改
  11. mysql从创库到查询基本命令
  12. 房卡麻将分析系列之断线重连
  13. 挖掘服务器ads怎么修改密码,数据管理服务器ADSADX.PDF
  14. 提高转化率和获取手淘流量的技巧方法,如何提高转化率?
  15. PCB布局、布线小技巧
  16. 2021年美赛C题思路
  17. h5页面添加APP下载引导页实现APP下载
  18. java.util.Date的getYear() .
  19. android killer回编译apk后,提示无法安装的解决办法
  20. springmvc--sso单点登录cas统一身份认证器

热门文章

  1. 日美“利刃”联合军演
  2. 02、Kubernetes 入门(上)-重新认识Docker
  3. [目录]Linux 核心系统命令目录
  4. u盘复制不进去东西_确认过眼神,是电脑小白的福音!U启动U盘启动盘制作工具...
  5. intel服务器芯片组介绍,Intel芯片组的简介
  6. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...
  7. 手把手教你将pyqt程序打包成exe(1)
  8. oracle access manager token,AuthenticationManager验证原理
  9. 如何迁移开源 Flink 任务到实时计算Flink版?实战手册来帮忙!
  10. 如何攻破容器持久化存储挑战?