在LInux服务器上,内存为125G,
刚开始,设置的JVM参数为-Xmx5120M,发现程序重启(看门狗ftp连接不上进程,就会将进程重启)
后来设置了-Xmx5120M -Xmn1920m,发现程序还是重启,
重启的有时候会产生hs_error文件,有时候没有产生,但共同的特点是eden space为100%
目前不知道该如何定位原因,是JVM参数没有设置正确?还是代码有问题?还是进程只是卡死后续还会恢复?
求大神给点思路
刚开始,设置的JVM参数为-Xmx5120M,发现程序重启(看门狗ftp连接不上进程,就会将进程重启)
后来设置了-Xmx5120M -Xmn1920m,发现程序还是重启,
重启的有时候会产生hs_error文件,有时候没有产生,但共同的特点是eden space为100%
目前不知道该如何定位原因,是JVM参数没有设置正确?还是代码有问题?还是进程只是卡死后续还会恢复?
求大神给点思路
分析一下dump 看那个对象占用最多
再结合程序分析一下,可以找出问题
只要不出现tomcat:java.lang.OutOfMemoryError: PermGen space的异常,说明堆内存还是够用的。
主要看看Perm(永久代)的利用率,如果把你5G都用完了,我只能说很有可能程序有问题。产生hs_error文件,可以根据日志内容来分析。不过这些hs_error文件很有可能是看门狗杀死java进程后留下的。
Jmap:显示年轻为160M,而且为100%Jstat:每秒查看GCUtil
可以看到Eden一下子从11% 升到100%,此后就卡死了,S0 S1 E O YGC FGC都不再变化很奇怪为什么Eden为什么一秒就升到了100%,不知道是因为那会数据量太大还是程序有问题如果是数据量太大,有没有什么方法可以从代码层面去避免,大家有什么想法
hs_error文件里面看到:出现异常的时候正在与运行的线程是VM Thread,推测是JVM在GC的时候崩溃的
hs_error文件里面看到:出现异常的时候正在与运行的线程是VM Thread,推测是JVM在GC的时候崩溃的hs_error贴出来看看
把你的配置文件贴出来看看(最好时用jvisualvm 查看实际的运行参数配置)
dump一下 然后用MemoryAnalyzer.exe分析一下 看看内存增长在哪里了,一定要在重启之前
内存上去之后 手动GC 有效果吗? jmap好像是先会调GC再查对象的..
-Xmn1920m 感觉小了点.. 来看看这个..虽然老了点 但是我看新的文章也都是在转他的.. http://unixboy.iteye.com/blog/174173/再就是给一下更完整的参数吧... 还有注意一下硬盘空间是怎样的
内存上去之后 手动GC 有效果吗? jmap好像是先会调GC再查对象的..
-Xmn1920m 感觉小了点.. 来看看这个..虽然老了点 但是我看新的文章也都是在转他的.. http://unixboy.iteye.com/blog/174173/再就是给一下更完整的参数吧... 还有注意一下硬盘空间是怎样的 有一太机器 现在设置了三个参数 -Xms5120m -Xmx5120m -Xmn1920m,目前已经有两天没有重启了,不知道后面会不会重启
-Xss没有设置,目前没有计算应该多少,所以没有设置,不知道设置之后会不会有什么影响
hs_error文件里面看到:出现异常的时候正在与运行的线程是VM Thread,推测是JVM在GC的时候崩溃的hs_error贴出来看看
把你的配置文件贴出来看看(最好时用jvisualvm 查看实际的运行参数配置)哎,数据不在本机,拿不出来,只能远程看看
现在想解决的是如果是FTP接收数据量太大,怎么能让Eden不要激增到100%
现在怀疑是FTP接收数据量太大,待会会记录一下,看看重启之前的FTP数据量是不是也在激增话说用的Apache 提供的FTP Server API,设置了setMaxLogins最大登陆数,好像也没有任何作用
这是假设呀.. 你有了假设可以去试验一下呀,如果不是这样的原因就可以排除掉了 搞一个本地的环境试试 ?
要不然你想了半天解决方法,然后发现不是这个原因就尴尬了..不过FTP 我也不懂..胡说两句
接收文件一般是有个cache吧,然后读一块写一块.. 难道是无限大的.. 有点像持久化的感觉.
再就是应该也有用堆外内存的实现吧..不过我也只是听说过还有就是再提一下硬盘问题.. 硬盘满了会有奇怪的现象..
现在怀疑是FTP接收数据量太大,待会会记录一下,看看重启之前的FTP数据量是不是也在激增话说用的Apache 提供的FTP Server API,设置了setMaxLogins最大登陆数,好像也没有任何作用等一下.. 我好像被你绕进去了 ... FTP 为什么会用堆内存.. FTP 是文件传输协议呀... 不是这一层的吧
现在怀疑是FTP接收数据量太大,待会会记录一下,看看重启之前的FTP数据量是不是也在激增话说用的Apache 提供的FTP Server API,设置了setMaxLogins最大登陆数,好像也没有任何作用等一下.. 我好像被你绕进去了 ... FTP 为什么会用堆内存.. FTP 是文件传输协议呀... 不是这一层的吧 用的Apache FTP API,使用代码实现的,改了一些api的接收函数,在接收到数据就会存到队列中,但队列也是有长度的,我也只是猜测是这一块,但也不确定,好崩溃,目前能确定的就是Eden激增到100%,十几秒没有反应就会被看门狗重启,但Eden为什么为激增,找不到原因,同样的程序在其他机器上运行也好几个月了,就只有几台不好使
有没有查看过GC次数 在内存被占满之前是不是有特别多次的GC