-Xms512m -Xmx512m -XX:MaxPermSize=512m -XX:+AggressiveHeap
http://www.blogjava.net/yanzhou/archive/2006/09/13/69384.aspx:
不合理配置
-Xms 520m -Xmx 1220m -Xss 15120k +XX:AggressiveHeap
解释:
-Xms 520m:初始内存大小
-Xmx 1220m:允许JVM使用最大内存为1220MB
-Xss 15120k:一个线程占用15MB
+XX:AggressiveHeap:使Xms参数失效
合理配置:
-Xms 520m -Xmx 900m -Xss 128k
1. +XX:AggressiveHeap会使得 Xms 1220m没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
另外Xmx作为允许jvm使用的最大内存数量,不应该超过物理内存的90%。
而之所以使用了这个参数,是因为不加的话,JBoss会在运行一天左右的时间后迅速崩溃,上机课是,甚至出现过半个小时就崩溃的情况。
之所以要用这个参数,用swap支持服务器运行,是因为犯了下面的错误:
2. -Xss 15120k
这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
这就是JBoss刚启动时,还有200Mb内存富余,但会在一个小时内迅速用完,因为服务器的threads在迅速增加。前3天,每天都多吃80Mb左右的swap.在第四天开始稳定下来。今年春节在外度假,观察到了这个现象,却不理解其原因:服务器在线程到达100之后,一般不再增加新的线程,新增加的在用完之后,会被迅速destroy,??褂玫哪诖嬉不厥樟恕R虼耍?旁诖航谄诩洌?鄄斓椒?衿髟?1.25-2.10所使用的线程基本是1.21-1.23创建的,因此没有再消耗新的内存。服务器持续运行时间,也因此大大超乎我5天的预期,到达了20天。
昨天所作的修改:
1.修改JAVA_OPTS,去掉+XX:AggressiveHeap,修改Xss。现在的JAVA_OPTS为:
-Xms 520m -Xmx 900m -Xss 128k
2.修改deploy/jbossweb-tomcat55.sar/service.xml
将maxThreads根据目前的访问量由默认的250降为75,并使用jboss 4默认未写在标准service.xml里面而jboss 3写入了的2个参数: maxSparseThreads=55,minSparseThreads=25
3.修改了oracle-ds.xml将最大连接数有150降为50.
4.去掉了一些不用的服务。
set "JAVA_OPTS=-Xms1000M -Xmx1000M -Xss128k -XX:MaxPermSize=256M"
set "JAVA_OPTS=%JAVA_OPTS% -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
rem # Warn when resolving remote XML DTDs or schemas.
set "JAVA_OPTS=%JAVA_OPTS% -Dorg.jboss.resolver.warning=true"
rem set "JAVA_OPTS=%JAVA_OPTS% -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
rem set "JAVA_OPTS=%JAVA_OPTS% -Xrunjdwp:transport=dt_shmem,address=jboss,server=y,suspend=n"
766
Xms4000m 内存在最小值4G
-Xmx12000M JVM最大内存12G
-Xss128k 单个线程128K
XX:MaxPermSize=60000M 辅助内存最大值6G
-XX:PermSize=256M设置永久域的初始值
其他设置暂时未用。