2012-03-27 34 views
2
#!/bin/bash 
# 
module add apps/java/1.6 
java -Xmx1024m HelloWorld 

我需要设置-XmxYm其中Y应该是Mb系统中95%的可用内存。如何在bash中动态设置java内存大小?

+1

“可用内存”的定义是什么?你的意思是RAM可用于操作系统吗?你的意思是虚拟内存可用于进程吗?或者是什么? – 2012-03-27 10:44:07

+0

@DavidSchwartz意味着Java可以使用并且不会导致系统崩溃的所有内存。我认为这是内存可用于操作系统。 – siamii 2012-03-27 10:50:34

+1

请注意,您不能始终为JVM分配尽可能多的内存。一些提示:http://stackoverflow.com/questions/171205/java-maximum-memory-on-windows-xp,http://stackoverflow.com/questions/1190837/java-xmx-max-memory-on-system ,http://stackoverflow.com/questions/3030263/increasing-the-jvm-maximum-heap-size-for-memory-intensive-applications – Thomas 2012-03-27 10:58:08

回答

2

这是一个调用Java所需的堆大小的脚本。

#!/bin/bash 

# Total memory in KB 
totalMemKB=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo) 

# Percentage of memory to use for Java heap 
usagePercent=95 

# heap size in KB 
let heapKB=$totalMemKB*$usagePercent/100 

# heap size in MB 
let heapMB=$heapKB/1024 

module add apps/java/1.6 
java -Xmx${heapMB}m HelloWorld 

我强烈建议你使用较低usagePercent,因为Java应用程序使用比堆大小更多的内存(用于如,对于PermGen的)。

0

正如Peter Lawrey所说,将95%的内存分配给堆可能不明智。

但是,您可以通过阅读“/ proc/meminfo”文件来确定内存大小。尝试

cat /proc/meminfo 
MemTotal:  32958996 kB 
MemFree:  23461744 kB 
Buffers:  133772 kB 
Cached:  1651888 kB 
SwapCached:   0 kB 
Active:  8460504 kB 
Inactive:  740048 kB 
HighTotal:   0 kB 
HighFree:   0 kB 
LowTotal:  32958996 kB 
LowFree:  23461744 kB 
SwapTotal: 34996216 kB 
SwapFree:  34996216 kB 
Dirty:    372 kB 
Writeback:   0 kB 
AnonPages:  7415344 kB 
Mapped:   61260 kB 
Slab:   206896 kB 
PageTables:  24320 kB 
NFS_Unstable:  0 kB 
Bounce:    0 kB 
CommitLimit: 51475712 kB 
Committed_AS: 18514524 kB 
VmallocTotal: 34359738367 kB 
VmallocUsed: 282388 kB 
VmallocChunk: 34359454135 kB 
HugePages_Total:  0 
HugePages_Free:  0 
HugePages_Rsvd:  0 
Hugepagesize:  2048 kB 
+0

那么如何将其设置在bash文件中? – siamii 2012-03-27 13:16:27

+0

@ bizso09 - 'awk'/ MemTotal:/ {print $ 2}'/ proc/meminfo' – jordanm 2012-03-27 13:54:47

+0

@jordanm您可以在原始脚本和问题的背景下编写该代码吗?我对bash相当陌生。 – siamii 2012-03-28 08:03:38