免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11517 | 回复: 7
打印 上一主题 下一主题

谁的问题:linux内存管理&JVM xms参数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-29 12:23 |只看该作者 |倒序浏览
请教个问题,欢迎大侠们指点:
在linux下,把JVM的xms设置成10g(服务器实际内存12g),服务程序运行一段时间后,内存就会突破限制,超出10g,最终把系统内存耗尽,访问速度及其缓慢,请问一下这是为什么?为什么会突破linux系统的限制,是linux内存管理出了问题,还是怎么回事?
nohup /usr/java/jdk1.5.0_16/bin/java -Xss128k -Xms4g -Xmx10g -Xmn3g -XXermSize=512m -XX:MaxPermSize=640m -XX:+UseParallelGC -XXarallelGCThreads=4 -XX:+UseAdaptiveSizePolicy -server -Djava.awt.headless=true -showversion -jar web.jar &

top - 12:03:59 up 93 days, 11:19,  5 users,  load average: 2.33, 3.63, 4.43
Tasks: 200 total,   1 running, 198 sleeping,   0 stopped,   1 zombie
Cpu(s): 10.0%us,  0.8%sy,  0.0%ni, 88.1%id,  0.6%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  12260352k total, 12239740k used,    20612k free,    15288k buffers
Swap:  6130672k total,  1238968k used,  4891704k free,   811660k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND              
29366 web       18   0 12.5g 9.9g 6096 S  302 85.1 372:31.76 java                 
    1 root      15   0 10324  256  228 S    0  0.0   0:18.77 init                 
    2 root      RT  -5     0    0    0 S    0  0.0   0:06.85 migration/0         
    3 root      34  19     0    0    0 S    0  0.0   0:01.61 ksoftirqd/0         
    4 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0           
    5 root      RT  -5     0    0    0 S    0  0.0   0:08.68 migration/1         
    6 root      34  19     0    0    0 S    0  0.0   0:02.72 ksoftirqd/1         
    7 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1           
    8 root      RT  -5     0    0    0 S    0  0.0   0:09.22 migration/2         
    9 root      34  19     0    0    0 S    0  0.0   0:02.34 ksoftirqd/2         
   10 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/2

论坛徽章:
0
2 [报告]
发表于 2010-12-29 13:44 |只看该作者
1.关于使用超Xmx设置的问题:Xmx设置的只是JVM的堆内存,像字符串常量池,栈内存等不属这个范围之内。你的情况应该是系统本身存在严重的“内存泄露”,也就是非堆内存无法正常回收,将系统内存耗尽导致的。
2.可以尝试:
  jstat -gcutil pid 1000 1000 命令查看GC情况。
  jmap -heap pid                  查看JVM堆占用情况;

  请将结果贴出来看一下吧~~
  
3.另外如果是线上系统的话,冒昧问一句:是神马NB系统会占用10G的内存 ?
  另外xms与xmx在线上运行时应该设置为一致,这样可以提高运行时性能~~

论坛徽章:
0
3 [报告]
发表于 2010-12-29 13:52 |只看该作者
把JVM的xms设置成10g  是不是太大了呀

论坛徽章:
0
4 [报告]
发表于 2010-12-29 14:56 |只看该作者
是linux内存管理出了问题

论坛徽章:
0
5 [报告]
发表于 2011-01-04 16:58 |只看该作者
多谢各位,这是系统比较慢时
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
16330 web     18   0 12.5g  10g  11m S   54 86.5 494:31.74 java               
31122 root      15   0 12712 1020  704 R    2  0.0   0:00.01 top                 
    1 root      15   0 10324  260  228 S    0  0.0   0:18.91 init               
    2 root      RT  -5     0    0    0 S    0  0.0   0:07.05 migration/0         
    3 root      34  19     0    0    0 S    0  0.0   0:01.64 ksoftirqd/0         
    4 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0         
    5 root      RT  -5     0    0    0 S    0  0.0   0:08.98 migration/1         
    6 root      34  19     0    0    0 S    0  0.0   0:02.76 ksoftirqd/1         
    7 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1         
    8 root      RT  -5     0    0    0 S    0  0.0   0:09.50 migration/2         
    9 root      34  19     0    0    0 S    0  0.0   0:02.39 ksoftirqd/2         
   10 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/2   
执行jstat -gcutil 16330 1000 1000后:



Jmap –heap 16330


这是刚启动时
top - 19:31:54 up 95 days, 18:47,  5 users,  load average: 1.03, 1.73, 1.99
Tasks: 201 total,   1 running, 199 sleeping,   0 stopped,   1 zombie
Cpu(s): 10.1%us,  0.8%sy,  0.0%ni, 88.0%id,  0.6%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  12260352k total,  1950904k used, 10309448k free,    28568k buffers
Swap:  6130672k total,   760688k used,  5369984k free,  1162164k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
2849 web     25   0 10.9g 150m  14m S   43  1.3   0:04.43 java               
2870 root      15   0 12712 1028  704 R    2  0.0   0:00.01 top               
    1 root      15   0 10324  260  228 S    0  0.0   0:18.92 init               
    2 root      RT  -5     0    0    0 S    0  0.0   0:07.05 migration/0        
    3 root      34  19     0    0    0 S    0  0.0   0:01.64 ksoftirqd/0        
    4 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0         
    5 root      RT  -5     0    0    0 S    0  0.0   0:08.98 migration/1        
    6 root      34  19     0    0    0 S    0  0.0   0:02.76 ksoftirqd/1        
    7 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1         
    8 root      RT  -5     0    0    0 S    0  0.0   0:09.51 migration/2        
    9 root      34  19     0    0    0 S    0  0.0   0:02.39 ksoftirqd/2        
   10 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/2   

不知道是那里的问题,现在应用一天要重启好几次,把其中一台服务器换成windows20008 64bit好了些,可能就是操作系统的问题吧,我感觉应该有什么参数可以优化的,linux的内存管理不会这么差劲吧,本人才疏学浅,还望各位大哥指点。

论坛徽章:
0
6 [报告]
发表于 2011-01-05 12:43 |只看该作者
-XXermSize=512m -XX:MaxPermSize=640m   这几个参数放大一点试一下。

论坛徽章:
0
7 [报告]
发表于 2011-01-05 13:39 |只看该作者
回复 5# hhxxttxs


    根据你的贴图来看,可以正常的gc,只不过是FGC的次数比较多而已,这应该是程序的问题;不至于导致你的系统很慢。。。
    看了眼你的top值,兄弟,问题就来了:
    你总共有12G的内存,10G+PERM+常量池等JAVA相关应用的占用应该有11G左右吧,换句话来说你只有1G左右的内存用于系统,更要命的是你要用这1G的内存管理11G的JVM;还假设你本机没有其它应用;

    那问题就来了,如果是网络应用的话,你的Tcp的io.数据库连接的io.及其它一切的io都只有可怜的1G左右啦。没办法系统只能用虚拟内存,看你的swap区已经吃到将近1个G了,兄弟,不慢才怪。。


    建议:
   1.重启linux服务器,释放无用内存区。。。
   2.将JAVA应用的启动参数调小,如从-Xmx1G开始试,只有JVM的确需要时再增加-Xmx的值,JVM的内存不是越多越好的,多的话管理也会复杂。
   3.你的java版本比较低。1.5吧,一些高级JVM优化可能做得不是很好,如果有可能的话建议升级至1.6.,新的JVM性能优化会好一些,我们用的系统都是1.6的,没什么大问题;

论坛徽章:
0
8 [报告]
发表于 2011-01-05 13:42 |只看该作者
mark下,期待最新进展。

我想知道,这个到底是内存耗尽,还是系统做full gc影响了系统性能?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP