java 程序内存占用的问题

最近在维护一个java 程序 有关内存占用的问题,请各位大神科普。

在本地 windows 上 启动tomcat 占用内存 几十 M
期间处理的任务
1.程序向另一个服务器建立 客户端连接 200多条 (netty) 并保持长连 每过80秒发送心跳。可用内存在每一次心跳都会有一定的下降并且没有回升
2.有个Thread 会每过10秒到数据库(mysql)获取记录 ,创建五条Thread(最大5条)对记录获取相关的连接(以上200多条连接中获取)进行处理,可用内存也会下降

在已用内存到达一定高度,可用内存便会回升,这是在windows 测试的结果,内存使用情况我觉得很健康

放在linux 服务器上 tomcat 启动内存就占用了200M多,每次心跳和处理记录也在增加,但内存达到一定高度 可用内存并没有回升,tomcat直接内存溢出了(生产环境)

我把测试环境的监控贴出来唉大家帮帮忙分析一下

绿色是tomcat开启动时
图片说明

3个回答

linux服务器支持的内存理论上限是4G,修改内核以后能到32G,我的一个朋友做过一台16G的服务器,能认出来。

如果kernel启用了PAE(物理地址扩展),则可以支持 到 64GB 内存。
以前(2009)需要安装PAE-kernel才支持大于4G。

但是,建议装 64bit Linux。

首先需要修改tomcat的内存配置:
例如你的服务器内存是1G, 在catalina.sh的第一行增加:
JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
解决不了再继续优化jvm参数

ecsape
ecsape Xms初始内存空间,一般为内存的1/16, Xmx 初始内存最大空间一般为1/4.具体数值实际上需要根据程序测试的结果调整,这个值是根据经验总结的适应大部分程序。好处就是防止内存上升过快。没听说过你的说法。
5 年多之前 回复
u012479916
唏嘘浪子 1024? 网上的说法不是 最小跟最大设置为相同的吗? 最大设置不超过80%之类的吗? 这样设置有什么好处? 请原谅我提出这么多问题!见谅!!!
5 年多之前 回复
ecsape
ecsape 回复唏嘘浪子: 上面回复的JAVA_OPTS里的头两个数字*4 ,后面的不变
5 年多之前 回复
u012479916
唏嘘浪子 那4G内存应该配置多大呢?
5 年多之前 回复
ecsape
ecsape 回复唏嘘浪子: 32位的linux最大内存4G,插8G的内存条没用,系统只认4G。所以你的配置也要按4G来算,不能按8G算
5 年多之前 回复
u012479916
唏嘘浪子 我们现在生产环境的linux 服务器32位的 8G内存jvm的默认堆大小是物理内存的1/4也就是2G 但是服务器的可用内存在下降到6.1-6.5的样子就挂了了
5 年多之前 回复
u012479916
唏嘘浪子 我在网上查过jvm的参数优化,我想问的是32位的服务器最大支持内存是多少?
5 年多之前 回复

Java程序内存分析:使用mat工具分析内存占用

http://www.cnblogs.com/AloneSword/p/3821569.html

u012479916
唏嘘浪子 你有这么方面的分析技巧吗? 或者有什么参考资料可以学习的?
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问