首页 文章

Playframework的内存使用情况

提问于
浏览
9

关于play框架的内存使用情况的一个简单问题 . 我有一个 生产环境 实例,它似乎使用了680768 kB的内存 . 其中大部分位于交换中 .

(虚拟)服务器大约有750 MB,但也运行MySQL服务器和12个Apache虚拟服务器 . 短期内有时会变得暂时无效(或非常缓慢) . 我想这是因为交换(它不是CPU) .

框架需要那么多内存吗?我可以使用JVM参数 -Xmx256m 来限制内存使用量,但要放入什么值,以及它使用如此多内存的原因是什么?

这是Play的用法!开始前后:

Java:~~~~~版本:1.6.0_26主页:/usr/lib/jvm/java-6-sun-1.6.0.26/jre最大内存:194641920可用内存:11813896总内存:30588928可用处理器:2 restart:Java:~~~~~ Version:1.6.0_26主页:/usr/lib/jvm/java-6-sun-1.6.0.26/jre最大内存:194641920可用内存:9893688总内存:21946368可用处理器:2

2 回答

  • 6

    它取决于很多东西,但是java需要一些内存用于本机分配,堆和非堆内存空间 .

    播放状态表示您的堆只消耗30588928个字节,但在启动时,java为堆分配194641920 . 您可以尝试从-Xmx64M开始以限制堆分配 .

    然后你可以节省大约128 Mo的内存,但java也为jvm分配内存,所以这个过程的占用空间将超过64 Mo,这取决于你的平台,但它至少会是200/250 Mo.

    尝试将堆限制为64Mo,但750 Mo可能不足以运行jvm和mysql .

    请记住,您不能使用swap与java,因为内存分配在一个块中,因此您可以交换/交换整个堆 .

  • 5

    我假设您报告的680768 kB内存来自ps或任务管理器等操作系统工具 . JVM使用的内存总量不会导致应用程序暂时冻结 . 暂停的可能原因是JVM Garbage收集器正在运行一个完整的GC,它将挂起运行完整GC的JVM中的所有线程(除非您配置了并发gc) .

    您应该使用-verbosegc -XX:PrintGCDetails运行运行playframework的JVM,以查看GC正在执行的操作 .

    您的问题“Play Framework是否需要那么多内存”无法回答,因为使用的内存量取决于您的应用程序在预先请求的基础上执行的操作 . 此外,JVM将使堆运行,然后执行GC循环以清理堆 . 性能良好的JVM应用程序应在GC图上显示锯齿图案 .

    如果您使用热点VM读取JVM调整指南,我不知道您正在使用哪个JVM . http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html在阅读本指南的JVM调优指南之前,您通常需要了解以下GC概念 .

    • 标记并清除垃圾收集

    • Mark,Sweep和Compact Garbage Collection

    • 复制收集器

    • 世代垃圾收集

    • 并行垃圾收集

    • 并发垃圾收集

    http://www.amazon.com/Garbage-Collection-Handbook-Management-Algorithms/dp/1420082795/可能是一本关于这个主题的好书

    您可以使用的热点JVM附带的一些免费工具包括jconsole和jvisualvm . jvisualvm有一个很好的插件,名为VisualGC,非常适合学习热点vm如何管理内存 .

相关问题