weblogic占用java_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进程的
weblogic占用java_weblogic内存占用过大调优相关推荐
- linux nginx 内存占用,nginx内存占用过高
nginx内存占用过高.md 现象 nginx运行一段时间后,内存占用非常高,超出系统最大内存后,开始使用SWAP,直至SWAP用尽,系统崩溃.内核参数vm.swappiness = 1. 如图: 监 ...
- filebeat实践-内存占用-最大内存占用
https://yq.aliyun.com/articles/241161 filebeat作为日志采集agent, 是需要部署到生产服务器上的.不理解filebeat的工作机制,不了解filebea ...
- 解决Antimalware Service Executable CPU,内存占用高的问题
from-csdner-Liu_Cabbage: https://blog.csdn.net/m0_37230651/article/details/80893639 1.win键+R键打开运行对话框 ...
- tomcat内存占用过高_Tomcat 性能调优之 JVM 调优
Tomcat.Jetty.GlassFish 等等这系列 Web容器/应用服务器,虽然做为容器,提供的是一个 Java Web 的运行时环境,以支持Servlet/JSP 等等这些内容的运行,但我们都 ...
- java 查看堆外内存占用_如何监控和诊断JVM堆内和堆外内存使用?
上一讲我介绍了 JVM 内存区域的划分,总结了相关的一些概念,今天我将结合 JVM 参数.工具等方面,进一步分析 JVM 内存结构,包括外部资料相对较少的堆外部分. 今天我要问你的问题是,如何监控和诊 ...
- mariadb 内存占用优化
本文由云+社区发表 作者:工程师小熊 摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariad ...
- 简单又实用的pandas技巧:如何将内存占用降低90%
pandas 是一个 Python 软件库,可用于数据操作和分析.数据科学博客 Dataquest.io 发布了一篇关于如何优化 pandas 内存占用的教程:仅需进行简单的数据类型转换,就能够将一个 ...
- nginx内存占用高---内存池使用思考
nginx内存占用高-内存池使用思考 问题现象 nginx top 进程 虚拟内存 200G 实际内存5G 和 CDN 平台相比要高很多 排查思路 使用pmap -p 进程号,发现从系统角度确实 有分 ...
- 如何让手游内存占用更小?从内存消耗iOS实时统计开始
一,问题 在之前的手游项目中,内存使用过多,都开始崩溃了,所以得做iOS内存统计.内存统计有好几种方法:XCode内存使用统计.UnityInternalProfile内存统计,Mono内存统计等方法 ...
最新文章
- 1.6 万字长文带你读懂 Java IO
- Java基础--二维数组
- Scala多线程:使用线程池Executors提交Runnable任务代码示例
- Linux系统调用号表
- 《剑指offer》整数中1出现的次数(从1到n整数中1出现的次数)
- mysql 命令行可以连接 php不能,mysql连接命令行可以php竟然不可以
- python ConfigParser模块详解
- Spring 常用的注解
- c语言绝对值函数作用,C语言实现abs和fabs绝对值
- promise语法与用法、this指向和this指向修改
- mysql从创库到查询基本命令
- 房卡麻将分析系列之断线重连
- 挖掘服务器ads怎么修改密码,数据管理服务器ADSADX.PDF
- 提高转化率和获取手淘流量的技巧方法,如何提高转化率?
- PCB布局、布线小技巧
- 2021年美赛C题思路
- h5页面添加APP下载引导页实现APP下载
- java.util.Date的getYear() .
- android killer回编译apk后,提示无法安装的解决办法
- springmvc--sso单点登录cas统一身份认证器
热门文章
- 日美“利刃”联合军演
- 02、Kubernetes 入门(上)-重新认识Docker
- [目录]Linux 核心系统命令目录
- u盘复制不进去东西_确认过眼神,是电脑小白的福音!U启动U盘启动盘制作工具...
- intel服务器芯片组介绍,Intel芯片组的简介
- java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...
- 手把手教你将pyqt程序打包成exe(1)
- oracle access manager token,AuthenticationManager验证原理
- 如何迁移开源 Flink 任务到实时计算Flink版?实战手册来帮忙!
- 如何攻破容器持久化存储挑战?