0

我正在使用 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 中的最大值是多少,我可以分配给操作系统以外的东西(在这种情况下是 tomcat)

4

1 回答 1

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

这是在一个相当小的 vagrant 实例上:

$ 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
于 2013-11-15T09:15:55.893 回答