当前位置:首页 > 内存 > 正文

tomcat内存泄露分析(java怎么解决内存泄露)

  • 内存
  • 2024-07-04 12:58:42
  • 6378

一、请问什么叫java内存泄露?上面已经说得很清楚了,Java不会释放已使用的内存,继续占用系统内存!


二、我做了一个图片上传,后台总提示Tomcat内存溢出,怎么解决,调整Tomcat的内存大小包括注册表都试过没用。将图片压缩然后上传,看看数据库是否限制图片格式或大小?
Tomcat内存溢出的原因
在生产环境中,如果Tomcat内存设置不正确,很容易出现内存溢出的情况。内存溢出的原因不同,当然处理方法也不同。
这里根据我们平时遇到的情况以及相关信息进行总结。常见的情况一般有三种:
emoryError:Javaheapspace
emoryError:PermGenspace
emoryError:unabletocreatenewnativethread。
Tomcat内存溢出解决办法
对于第一种情况两种情况,如果应用程序本身没有内存泄漏,可以通过设置tomcatjvm参数来解决。(-Xms-Xmx-XX:PermSize-XX:MaxPermSize)
最后一个选项需要同时调整操作系统和tomcatjvm参数才能达到目标。
第一种:堆溢出。
原因分析:
JVM堆设置是指Java程序运行时JVM可以分配和使用的内存空间的设置,JVM在启动时会自动设置Heapsize值,并且其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。您可以使用JVM中的-Xmn-Xms-Xmx和其他选项来设置它。Heapsize的大小是YoungGeneration和TenuredGeneraion的总和。
在JVM中,如果98%的时间用于GC并且可用Heapsize小于2%,就会抛出此异常消息。
最大堆大小不应超过可用物理内存的80%。一般来说,-Xms和-Xmx选项应设置为相同的值,-Xmn应为-Xmx值的1/4。
如果没有内存泄漏,调整-Xms-Xmx参数可能会解决问题。
-Xms:初始堆大小
-Xmx:最大堆大小
但是堆的大小受以下三个方面的影响:
1操作系统(32位或64位)限制(32位系统以下一般限制为1.5G~2G;我在2003服务器系统下测试1612M(物理内存:4G和6G,jdk:1.6),64位操作系统没有限制onmemory)
2系统的可用虚拟内存限制。
堆的大小可以使用java-Xmx***Mversion命令来测试。如果支持的话会显示jdk版本号。如果不支持就会报错。
一般情况下-Xms-Xmx配置相同比较好,例如setJAVA_OPTS=-Xms1024m-Xmx1024m
初始空间(即-Xms)为物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。您可以使用JVM中的-Xmn-Xms-Xmx和其他选项来设置示例。以下是1G内存环境下javajvm的参数设置参考:
JAVA_OPTS="server.-Xms800m-Xmx800m-XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=ss=true"
JAVA_OPTS="-server-Xms768m-Xmx-ize=728mSXX-XX:MaxPermSize=256m-XX:
NewSize=192m-XX:MaxNewSize=384m"
CATALINA_OPTS="-server-Xms768m-Xmx768m-XX:PermSize=128m-XX:Max56mSize
/>-XX:NewSize=192m-XX:MaxNewSize=384m"
服务器有1G内存:JAVA_OPTS="-server-Xms800m-Xmx800m-XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=ss=true"
服务器是64位,2G内存:JAVA_OPTS='-server-Xms1024m-Xmx1536m-XX:PermSize=128M-XX:MaxNewSize=256m-XX:MaxPer=256m'
网上搜索三种Tomcat内存溢出情况分析及解决方案


三、eclipse启动tomcat报错emoryError:Javaheapspace内存泄漏您的计算机有多少内存?在jre中设置参数效率更高。我尝试过其他方法,例如更改tomcat参数和eclipse设置,但它不起作用。
window-preferences-java-installjres当前jre版本--edit--defaultVMArguments添加这句
-Xms800m-Xmx800m-XX:MaxNewSize=256m-XX:MaxPermSize=256m
做这个。