![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
<% @ page import = " java.util.* " %>
< html >
< head >
< title > JVM Memory Monitor </ title >
</ head >
< body >
< table border ="0" width ="100%" >
< tr >< td colspan ="2" align ="center" >< h3 > Memory MXBean </ h3 ></ td ></ tr >
< tr >< td
width ="200" > Heap Memory Usage </ td >< td > <% =
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
%> </ td ></ tr >
< tr >< td > Non-Heap Memory
Usage </ td >< td > <% =
ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
%> </ td ></ tr >
< tr >< td colspan ="2" > </ td ></ tr >
< tr >< td colspan ="2" align ="center" >< h3 > Memory Pool MXBeans </ h3 ></ td ></ tr >
<%
Iterator iter = ManagementFactory.getMemoryPoolMXBeans().iterator();
while (iter.hasNext()) {
MemoryPoolMXBean item = (MemoryPoolMXBean) iter.next();
%>
< tr >< td colspan ="2" >
< table border ="0" width ="100%" style ="border: 1px #98AAB1 solid;" >
< tr >< td colspan ="2" align ="center" >< b > <% = item.getName() %> </ b ></ td ></ tr >
< tr >< td width ="200" > Type </ td >< td > <% = item.getType() %> </ td ></ tr >
< tr >< td > Usage </ td >< td > <% = item.getUsage() %> </ td ></ tr >
< tr >< td > Peak Usage </ td >< td > <% = item.getPeakUsage() %> </ td ></ tr >
< tr >< td > Collection Usage </ td >< td > <% = item.getCollectionUsage() %> </ td ></ tr >
</ table >
</ td ></ tr >
< tr >< td colspan ="2" > </ td ></ tr >
<% } %>
</ table >
</ body >
</ html >
使用的结果(JDK1.5)正如doc描述:
![](https://i-blog.csdnimg.cn/blog_migrate/83c28fb28a81302cd78ac0074e0b1512.png)
从检测的结果来看,non-heap memory中,包含了perm gen 和一部分jvm自用的内存
其中heap memory的最大值即我们指定的启动参数 -Xmx1024m所指定的1024m
而Perm Gen的最大值即为我们指定的启动参数 - XX:MaxPermSize=128m 所指定的128m(不指定默认为64m)
一般的OutOfMemory大部分是因为上面两个配置参数不够引起的。
当然native heap 也可以产生OutOfMemory,如果os的java可用内存全部分给heap了。
如果发生oom,个人觉得首先是调整参数,比如:-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m
如果参数调整之后还是oom,则需要考虑优化程序了(当然首先要把死递归,死循环排除),最好是用工具监测一下。
附我们tomcat配置参数修改方案:
² Tomcat配置的修改(%tomcat%表示tomcat实际安装目录)
如果tomcat安装在Solaris环境下,打开 %tomcat%\bin\catalina.sh 文件,在文件的前面加下面红色字体的内容(注意有双引号):
LANG=zh_CN.GB18030
export LANG
JAVA_OPTS="-server -Xms<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1024" unitname="m">1024m</chmetcnv> -Xmx<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1024" unitname="m">1024m</chmetcnv> -XX:PermSize=<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="128" unitname="m">128m</chmetcnv> -XX:MaxPermSize=<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="128" unitname="m">128m</chmetcnv>"
export JAVA_OPTS
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
echo $JAVA_OPTS
如果tomcat安装在Windows环境下,打开 %tomcat%\bin\catalina.bat 文件,在文件的前面加下面红色字体的内容(注意没有双引号):
set JAVA_OPTS=-server -Xms<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1024" unitname="m">1024m</chmetcnv> -Xmx<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1024" unitname="m">1024m</chmetcnv> -XX:PermSize=<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="128" unitname="m">128m</chmetcnv> -XX:MaxPermSize=<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="128" unitname="m">128m</chmetcnv>
打开 %tomcat%\conf\server.xml 文件,下面这行:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
改成:
maxThreads="250" minSpareThreads="25" maxSpareThreads="100"