AWS EBS上的最大内存分配

时间:2013-11-07 10:33:28

标签: java memory-management jvm elastic-beanstalk heap-memory

我正在使用ElasticBeanstalk来托管我的Grails应用。 截至目前,我正在使用具有1.7 GiB主内存的m1.small实例。我的问题是我可以分配给我的实例的MaxHeap和Max PermGen是什么?截至目前,我的配置如下所示

Initial JVM heap size: 512m
JVM command line options: -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
Maximum JVM heap size: 512m
Maximum JVM permanent generation size: 256m

有关选择最佳数字的建议,以便我可以为我的Tomcat使用最大内存,并且还有足够的剩余用于操作系统本身吗?

将问题改为1.7 GiB中的MAX可以分配给OS以外的其他东西(在本例中为tomcat)

1 个答案:

答案 0 :(得分:0)

您确实需要对应用程序堆栈进行概要分析。

通过添加交换增加虚拟内存,可以很容易地将堆的大小增加到物理内存量以上。 对于性能,您希望找到实例和应用程序之间的正确匹配。

首先在vagrant实例中运行应用程序堆栈,然后测量它。适应直到 您可以获得一致的性能,但m1.small实例可能会被同一物理主机上的其他实例放慢速度。

也就是说,你可以运行top,并对虚拟内存进行排序。

示例:(比较VIRT,RES和SHR列)

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1220 root      20   0  308m 1316  868 S  0.0  0.3   0:00.43 VBoxService
1126 root      20   0  243m 1576 1040 S  0.0  0.3   0:00.02 rsyslogd
1324 root      20   0  114m 1380  764 S  0.0  0.3   0:00.84 crond
1966 vagrant   20   0  105m 1880 1536 S  0.0  0.4   0:00.12 bash
1962 root      20   0 95788 3740 2832 S  0.0  0.7   0:00.18 sshd
1965 vagrant   20   0 95788 1748  836 S  0.0  0.3   0:00.11 sshd
1323 postfix   20   0 78868 3280 2448 S  0.0  0.7   0:00.00 qmgr
1322 postfix   20   0 78800 3232 2408 S  0.0  0.6   0:00.00 pickup
1314 root      20   0 78720 3252 2400 S  0.0  0.6   0:00.01 master
1238 root      20   0 64116 1180  512 S  0.0  0.2   0:00.80 sshd

这是一个相当小的流浪者实例:

$ cat /proc/meminfo
MemTotal:         502412 kB
MemFree:          350976 kB
Buffers:           27148 kB
Cached:            45668 kB
SwapCached:            0 kB
Active:            45240 kB
Inactive:          39616 kB
Active(anon):      12164 kB
Inactive(anon):       44 kB
Active(file):      33076 kB
Inactive(file):    39572 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048568 kB
SwapFree:        1048568 kB
Dirty:                 4 kB
Writeback:             0 kB