分享

java程序内存使用的问题

ld512870 发表于 2015-6-16 21:02:29 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 16514
    最近在使用elasticsearch全文索引存数据。遇到了这么个问题,es这个java进程,我给它配置的堆最大最小都是10g,直接内存direct memory配置了2g。
这样的话,我的理想状态是最大内存不超过12g。可是在使用的时候,通过top查看发现res 内存一共用了20g,后面的SHR共享内存显示是10g。这样的话堆内存这块就是20-10=10g,是正常的。但是这个10g的SHR共享内存是怎么来的啊??jvm能通过参数去控制吗?不然的话这个程序跑上一段时间就把所有的内存占用了。还是说应该通过linux系统去控制,比如shmmax=2g   这种,是否能限制shr最大2g。但是,这样的话,会影响到系统吗?
求这方面的高手,高手,高高手来解惑啊。谢谢啦

已有(4)人评论

跳转到指定楼层
NEOGX 发表于 2015-6-16 23:21:24
这是Linux自带的
linux top命令VIRT,RES,SHR,DATA的含义
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来

回复

使用道具 举报

NEOGX 发表于 2015-6-16 23:28:48
共享内存应该可以修改的
如何设置LINUX的共享内存
回复

使用道具 举报

想ai抽 发表于 2015-6-17 10:12:33
NEOGX 发表于 2015-6-16 23:21
这是Linux自带的
linux top命令VIRT,RES,SHR,DATA的含义
RES:resident memory usage 常驻内存

http://blog.csdn.net/dingpeng1978/article/details/6559232
回复

使用道具 举报

想ai抽 发表于 2015-6-17 10:21:02
不太理解楼主说的跑一段时间就把内存占满了,是什么情况?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条