jconsole是JDK里自带的一个工具,能够监测Java程序运行时全部对象的申请、释放等动做,将内存管理的全部信息进行统计、分析、可视化。咱们能够根据这些信息判断程序是否有内存泄漏问题。 使用jconsole工具来分析WAS的JVM问题,须要进行相关的配置。 首先咱们看WAS服务器端的配置.
一、登陆was控制台https://10.4.119.18:9043/ibm/console/,找到本身的应用程序服务器---java和进程管理---进程定义--JAVA虚拟机,而后配置 通用JVM 参数
加入如下jvm参数:-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote
注意:等号后面必定要保留空格,不然会报错。
二、修改/usr/IBM/WebSphere/AppServer/java/jre/lib/management下的management.properties文件,在最后加入
com.sun.management.jmxremote.port=8999
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false
注意:先执行netstat -ano | grep 8999,查看这个端口是否被使用。另外注意防火墙对8999端口的配置,要放开,不然远程机器可能链接不上.
三、设置jconsole远程登陆的用户名和密码在/usr/IBM/WebSphere/AppServer/java/jre/lib/management下有个jmxremote.password.template文件,在最后面加入你要设置的用户名和密码
root root@123 (用户名、密码,能够随意修改)
四、在was控制台上停掉本身的应用程序服务器,而后重启。
WINDOWS客户端的设置
一、进入JAVA所在的BIN目录
二、输入IP、端口号、用户名和密码进行远程链接
三、监控界面能够看到内存、类、线程、CPU的使用状况。
使用这个工具再配合JCA工具就能很方便的分析内存溢出问题。
Java VisualVM也是JDK的一个集成的分析工具,自从JDK 6 Update 7之后已经做为Sun的JDK的一部分。VisualVM能够监控应用程序的性能和内存占用状况、监控应用程序的线程、进行线程转储(Thread Dump)或堆转储(Heap Dump)、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,保存快照以便脱机分析应用程序;同时它还支持在MBeans上进行浏览和操做。 VisualVM自身要在JDK6以上的运行,可是JDK1.4以上版本的程序也能被它监控。
启动方法:进入JAVA_HOME所在的bin目录,运行jvisualvm.exe就能够启动VisualVM远程链接WAS服务器的话,须要添加JMX链接方式就能够了
内存溢出的缘由有不少种,好比:
一、数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;没法肯定是否被引用的对象;
二、虚拟机不回收内存(内存泄漏);说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。
内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统仍是很常见。
内存溢出的通常解决方法:
一个是优化程序代码,若是业务庞大,逻辑复杂,尽可能减小全局变量的引用,让程序使用完变量的时候释放该引用,可以让垃圾回收器回收和释放资源。
二就是物理解决,增大物理内存,而后经过-Xms256m -Xmx2048m 的修改来增大内存空间。