java非堆内存_java – 监视JVM的非堆内存使用情况

我们通常处理OutOfMemoryError问题,因为堆或permgen大小配置问题。

但是所有的JVM内存不是permgen或者heap。

据我所知,它也可以与Threads / Stacks,本地JVM代码相关…

但是使用pmap我可以看到进程分配了9.3G这是3.3G堆外内存使用。

我不知道什么是监视和调整这种额外的堆外内存消耗的可能性。

我不使用直接的离堆内存访问(MaxDirectMemorySize是64m默认)

Context: Load testing

Application: Solr/Lucene server

OS: Ubuntu

Thread count: 700

Virtualization: vSphere (run by us, no external hosting)

JVM

java version "1.7.0_09"

Java(TM) SE Runtime Environment (build 1.7.0_09-b05)

Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

Tunning

-Xms=6g

-Xms=6g

-XX:MaxPermSize=128m

-XX:-UseGCOverheadLimit

-XX:+UseConcMarkSweepGC

-XX:+UseParNewGC

-XX:+CMSClassUnloadingEnabled

-XX:+OptimizeStringConcat

-XX:+UseCompressedStrings

-XX:+UseStringCache

内存映射:

vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----

r b swpd free buff cache si so bi bo in cs us sy id wa

1 0 1743 381 4 1150 1 1 60 92 2 0 1 0 99 0

自由

total used free shared buffers cached

Mem: 7986 7605 381 0 4 1150

-/+ buffers/cache: 6449 1536

Swap: 4091 1743 2348

最佳

top - 11:15:49 up 42 days, 1:34, 2 users, load average: 1.44, 2.11, 2.46

Tasks: 104 total, 1 running, 103 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.5%us, 0.2%sy, 0.0%ni, 98.9%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 8178412k total, 7773356k used, 405056k free, 4200k buffers

Swap: 4190204k total, 1796368k used, 2393836k free, 1179380k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

17833 jmxtrans 20 0 2458m 145m 2488 S 1 1.8 206:56.06 java

1237 logstash 20 0 2503m 142m 2468 S 1 1.8 354:23.19 java

11348 tomcat 20 0 9184m 5.6g 2808 S 1 71.3 642:25.41 java

1 root 20 0 24324 1188 656 S 0 0.0 0:01.52 init

2 root 20 0 0 0 0 S 0 0.0 0:00.26 kthreadd

...

df – > tmpfs

Filesystem 1K-blocks Used Available Use% Mounted on

tmpfs 1635684 272 1635412 1% /run

我们的主要问题:

>服务器有8G的物理内存

> Solr的堆只有6G

>有1.5G的交换

> Swappiness = 0

>堆消耗似乎适当调整

>在服务器上运行:只有Solr和一些监视的东西

>我们有一个正确的平均响应时间

>我们有时会有长时间停顿,长达20秒

我想暂停可能是一个完整的GC上交换堆右?

为什么有这么多的互换?

我甚至不知道这是否是使服务器交换的JVM,或者如果它是隐藏的,我看不到的东西。也许操作系统页面缓存?但不知道为什么操作系统将创建页面缓存条目,如果创建交换。

我正在考虑测试mlockall技巧用于一些流行的基于Java的存储/ NoSQL像ElasticSearch,Voldemort或Cassandra:check Make JVM/Solr not swap, using mlockall

编辑:

在这里你可以看到最大堆,使用堆(蓝色),使用的交换(红色)。它似乎是相关的。

我可以看到与Graphite有很多ParNew GC定期发生。而且有一些CMS GC对应于堆图像的显着减少。

暂停似乎不与堆减少相关,但是在10:00和11:30之间有规律地分布,因此它可能与ParNew GC有关。

在负载测试期间,我可以看到一些光盘活动以及一些交换IO活动,这是真的平静的,当测试结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值