linux下设置java内存堆

December 6th, 2009 by yh Leave a reply »
   java –Xms128m   //JVM占用最小内存
     –Xmx512m   //JVM占用最大内存
     –XX:PermSize=64m   //最小堆大小
     –XX:MaxPermSize=128m //最大堆大小
转载:
Java虚拟机(JVM)中的内存设置详解
http://www.51cto.com/php/feedbackt.php?id=127144
摘要:本文向您介绍在Java虚拟机,即JVM中如何设置内存,达到良好的GC效率。
在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。
PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。
GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误
Java Heap分为3个区
1.Young
2.Old
3.Permanent
Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。
JVM的Heap分配可以使用-X参数设定,
-Xms
初始Heap大小

-Xmx
java heap最大值
-Xmn
young generation的heap大小
JVM有2个GC线程
第一个线程负责回收Heap的Young区
第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区

Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?
有如下原因:
1.程序内调用了System.gc()或Runtime.gc()。
2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
3.Java的Heap太小,一般默认的Heap值都很小。
4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间
经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。
Stack的设定
每个线程都有他自己的Stack。
-Xss
每个线程的Stack大小
Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。
硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。
4种GC
1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
单文件的JVM内存进行设置
默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)
tomcat启动jvm内存设置
Linux:
在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs加入 -Xms300m -Xmx350m
重起tomcat服务,设置生效
weblogic启动jvm内存设置
在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。
JBoss
默认可以使用的内存为64MB
$JBOSSDIR$/bin/run.config
JAVA_OPTS = "-server -Xms128 -Xmx512"
Eclipse
在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大
Websphere
进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机
http://hi.baidu.com/kgcywjm/blog/item/57668d2e88e2c2574ec226fd.html
计算机命令
~~~~~~~~~~
PCA login: root                                     ;使用root用户
password: linux                                    ;口令是linux
# shutdown -h now                                   ;关机
# init 0                                            ;关机
# logout
# login
# ifconfig                                          ;显示IP地址
# ifconfig eth0 <ip address> netmask <netmask>      ;设置IP地址
# ifconfig eht0 <ip address> netmask <netmask> down ; 删除IP地址
# route add 0.0.0.0 gw <ip>
# route del 0.0.0.0 gw <ip>
# route add default gw <ip>                         ;设置网关
# route del default gw <ip>                         ;删除网关
# route                                             ;显示网关
# ping <ip>
# telnet <ip>                                       ;建议telnet之前先ping一下
----------------------------------------
交换机命令
~~~~~~~~~~
[Quidway]super password 修改特权用户密码
[Quidway]sysname 交换机命名
[Quidway]interface ethernet 0/1 进入接口视图
[Quidway]interface vlan x 进入接口视图
[Quidway-Vlan-interfacex]ip address 10.65.1.1 255.255.0.0
[Quidway]ip route-static 0.0.0.0 0.0.0.0 10.65.1.2  静态路由=网关
[Quidway]user-interface vty 0 4
[S3026-ui-vty0-4]authentication-mode password
[S3026-ui-vty0-4]set authentication-mode password simple 222
[S3026-ui-vty0-4]user privilege level 3
[Quidway-Ethernet0/1]duplex {half|full|auto}        配置端口双工工作状态
[Quidway-Ethernet0/1]speed {10|100|auto}   配置端口工作速率
[Quidway-Ethernet0/1]flow-control 配置端口流控
[Quidway-Ethernet0/1]mdi {across|auto|normal}       配置端口MDI/MDIX状态平接或扭接
[Quidway-Ethernet0/1]port link-type {trunk|access|hybrid} 设置接口工作模式
[Quidway-Ethernet0/1]shutdown 关闭/重起接口
[Quidway-Ethernet0/2]quit 退出系统视图
[Quidway]vlan 3 创建/删除一个VLAN/进入VLAN模式
[Quidway-vlan3]port ethernet 0/1 to ethernet 0/4    在当前VLAN增加/删除以太网接口
[Quidway-Ethernet0/2]port access vlan 3 将当前接口加入到指定VLAN
[Quidway-Ethernet0/2]port trunk permit vlan {ID|All}      设trunk允许的VLAN
[Quidway-Ethernet0/2]port trunk pvid vlan 3 设置trunk端口的PVID
[Quidway]monitor-port <interface_type interface_num>        指定和清除镜像端口
[Quidway]port mirror <interface_type interface_num>       指定和清除被镜像端口
[Quidway]port mirror int_list observing-port int_type int_num 指定镜像和被镜像
[Quidway]description string                         指定VLAN描述字符
[Quidway]description                           删除VLAN描述字符
[Quidway]display vlan [vlan_id]                     查看VLAN设置
[Quidway]stp {enable|disable}                       开启/关闭生成树,默认关闭
[Quidway]stp priority 4096                          设置交换机的优先级
[Quidway]stp root {primary|secondary}               设置交换机为根或根的备份
[Quidway-Ethernet0/1]stp cost 200                   设置交换机端口的花费
[SwitchA-vlanx]isolate-user-vlan enable             设置主vlan
[SwitchA]Isolate-user-vlan <x> secondary <list>     设置主vlan包括的子vlan
[Quidway-Ethernet0/2]port hybrid pvid vlan <id>     设置vlan的pvid
[Quidway-Ethernet0/2]port hybrid pvid               删除vlan的pvid
[Quidway-Ethernet0/2]port hybrid vlan vlan_id_list untagged 设置无标识的vlan
如果包的vlan id与PVId一致,则去掉vlan信息. 默认PVID=1。
所以设置PVID为所属vlan id, 设置可以互通的vlan为untagged.
----------------------------------------
路由器命令
~~~~~~~~~~
[Quidway]display version                          显示版本信息
[Quidway]display current-configuration            显示当前配置
[Quidway]display interfaces                       显示接口信息
[Quidway]display ip route                         显示路由信息
[Quidway]sysname aabbcc                           更改主机名
[Quidway]super passwrod 123456                    设置口令
[Quidway]interface serial0                        进入接口
[Quidway-serial0]ip address <ip><mask>
[Quidway-serial0]undo shutdown                    激活端口
[Quidway]link-protocol hdlc                       绑定hdlc协议
[Quidway]user-interface vty 0 4
[Quidway-ui-vty0-4]authentication-mode password
[Quidway-ui-vty0-4]set authentication-mode password simple 222
[Quidway-ui-vty0-4]user privilege level 3
[Quidway-ui-vty0-4]quit
[Quidway]debugging hdlc all serial0               显示所有信息
[Quidway]debugging hdlc event serial0             调试事件信息
[Quidway]debugging hdlc packet serial0            显示包的信息
静态路由:
[Quidway]ip route-static <ip><mask>{interface number|nexthop}[value][reject|blackhole]
例如:
[Quidway]ip route-static 129.1.0.0 16 10.0.0.2
[Quidway]ip route-static 129.1.0.0 255.255.0.0 10.0.0.2
[Quidway]ip route-static 129.1.0.0 16 Serial 2
[Quidway]ip route-static 0.0.0.0 0.0.0.0  10.0.0.2
动态路由:
[Quidway]rip
[Quidway]rip work
[Quidway]rip input
[Quidway]rip output
[Quidway-rip]network 1.0.0.0                       ;可以all
[Quidway-rip]network 2.0.0.0
[Quidway-rip]peer ip-address
[Quidway-rip]summary
[Quidway]rip version 1
[Quidway]rip version 2 multicast
[Quidway-Ethernet0]rip split-horizon             ;水平分隔
[Quidway]router id A.B.C.D                       配置路由器的ID
[Quidway]ospf enable                             启动OSPF协议
[Quidway-ospf]import-route direct                引入直联路由
[Quidway-Serial0]ospf enable area <area_id>      配置OSPF区域
标准访问列表命令格式如下:
acl <acl-number> [match-order config|auto]       默认前者顺序匹配。
rule [normal|special]{permit|deny} [source source-addr source-wildcard|any]
例:
[Quidway]acl 10
[Quidway-acl-10]rule normal permit source 10.0.0.0 0.0.0.255
[Quidway-acl-10]rule normal deny source any
扩展访问控制列表配置命令
配置TCP/UDP协议的扩展访问列表:
rule {normal|special}{permit|deny}{tcp|udp}source {<ip wild>|any}destination <ip wild>|any}
[operate]
配置ICMP协议的扩展访问列表:
rule {normal|special}{permit|deny}icmp source {<ip wild>|any]destination {<ip wild>|any]
[icmp-code] [logging]
扩展访问控制列表操作符的含义
equal portnumber 等于
greater-than portnumber       大于
less-than portnumber 小于
not-equal portnumber 不等
range portnumber1 portnumber2 区间
扩展访问控制列表举例
[Quidway]acl 101
[Quidway-acl-101]rule deny souce any destination any
[Quidway-acl-101]rule permit icmp source any destination any icmp-type echo
[Quidway-acl-101]rule permit icmp source any destination any icmp-type echo-reply
[Quidway]acl 102
[Quidway-acl-102]rule permit ip source 10.0.0.1 0.0.0.0 destination 202.0.0.1 0.0.0.0
[Quidway-acl-102]rule deny ip source any destination any
[Quidway]acl 103
[Quidway-acl-103]rule permit tcp source any destination 10.0.0.1 0.0.0.0 destination-port equal ftp
[Quidway-acl-103]rule permit tcp source any destination 10.0.0.2 0.0.0.0 destination-port equal www
[Quidway]firewall enable
[Quidway]firewall default permit|deny
[Quidway]int e0
[Quidway-Ethernet0]firewall packet-filter 101 inbound|outbound
地址转换配置举例
[Quidway]firewall enable
[Quidway]firewall default permit
[Quidway]acl 101
[Quidway-acl-101]rule deny ip source any destination any
[Quidway-acl-101]rule permit ip source 129.38.1.4 0 destination any
[Quidway-acl-101]rule permit ip source 129.38.1.1 0 destination any
[Quidway-acl-101]rule permit ip source 129.38.1.2 0 destination any
[Quidway-acl-101]rule permit ip source 129.38.1.3 0 destination any
[Quidway]acl 102
[Quidway-acl-102]rule permit tcp source 202.39.2.3 0 destination 202.38.160.1 0
[Quidway-acl-102]rule permit tcp source any destination 202.38.160.1 0 destination-port great-than
1024
[Quidway-Ethernet0]firewall packet-filter 101 inbound
[Quidway-Serial0]firewall packet-filter 102 inbound
[Quidway]nat address-group 202.38.160.101 202.38.160.103 pool1
[Quidway]acl 1
[Quidway-acl-1]rule permit source 10.110.10.0 0.0.0.255
[Quidway-acl-1]rule deny source any
[Quidway-acl-1]int serial 0
[Quidway-Serial0]nat outbound 1 address-group pool1
[Quidway-Serial0]nat server global 202.38.160.101 inside 10.110.10.1 ftp tcp
[Quidway-Serial0]nat server global 202.38.160.102 inside 10.110.10.2 www tcp
[Quidway-Serial0]nat server global 202.38.160.102 8080 inside 10.110.10.3 www tcp
[Quidway-Serial0]nat server global 202.38.160.103 inside 10.110.10.4 smtp udp
PPP验证:
主验方:pap|chap
[Quidway]local-user u2 password {simple|cipher} aaa
[Quidway]interface serial 0
[Quidway-serial0]ppp authentication-mode {pap|chap}
[Quidway-serial0]ppp chap user u1        //pap时,不用此句
pap被验方:
[Quidway]interface serial 0
[Quidway-serial0]ppp pap local-user u2 password {simple|cipher} aaa
chap被验方:
[Quidway]interface serial 0
[Quidway-serial0]ppp chap user u1
[Quidway-serial0]local-user u2 password {simple|cipher} aaa
----------------------------------------
[Nov-20-2009 09:26:57] >>>>Installing component Software Repository - Content (install once per mesh)
....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................WARNING: an error was detected while running an external
command or script.  The output follows:
oupload -N "vmm-vmware-esx-37.0.0.0.46.zip (VMware ESX Server 3)" -d /Opsware/Tools/Virtualization Management Modules -K -O10056 -t"ZIP Archive" -gspin --opswgw 192.168.249.133 --opswgwport 3003 -q ./Linux/ESX-3/vmm-vmware-esx-37.0.0.0.46.zip
Traceback (innermost last):
File "./command.py", line 31, in main
File "./controller.py", line 51, in handle
File "./controllers/word_upload_controller.py", line 127, in _handle
File "./lib/word_commands/upload.py", line 308, in execute
File "./lib/coglib/urlopen.py", line 90, in write
File "./lib/coglib/asyncssl.py", line 81, in send
File "./lib/coglib/asyncssl.py", line 144, in _blocking_write
communication time-out error
Unknown Error Encountered
SUMMARY:
Name: communication time-out error
Description: None
[Nov-20-2009 10:07:44] Component installation script encountered an error (exit status 100)
[Nov-20-2009 10:07:44] Exiting Opsware Installer.
***********************************************************
*                                                         *
*                      smtool  0.0.0                      *
*                                                         *
*                build version 37.0.0.0.21                *
*            Copyright (C) 2007:  Opsware Inc.            *
*                   support@opsware.com                   *
*                                                         *
***********************************************************
Upgrading OPSWstorex-37.0.0.0.28.12.zip
Created folder 'com.opsware.storage.storex' (1810001)
Traceback (most recent call last):
File "/opt/opsware/bin/smtool", line 12, in ?
smtool.smtool (sys.argv)
File "src/smtool/smtool.py", line 28, in smtool
File "src/smtool/ServerModule.py", line 831, in create
File "src/smtool/ServerModule.py", line 628, in upload
File "build/pytwist/unitio.py", line 106, in uploadFile
File "build/pytwist/unitio.py", line 192, in createUnit
File "build/pytwist/unitio.py", line 287, in _parseException
pytwist.com.opsware.common.DataAccessEngineCommunicationException: DataAccessEngineCommunicationException:None
Caused by:java.io.EOFException
Removed folder 'com.opsware.storage.storex' (1810001)
[Nov-21-2009 00:32:00] Component installation script encountered an error (exit status 1)
[Nov-21-2009 00:32:00] Exiting Opsware Installer.
/var/log/opsware/install_opsware/install_opsware.2009-11-20.22:49:51_verbose.log
/var/log/opsware/install_opsware/install_opsware.2009-11-21.13:51:02_verbose.log
***NOTICE - "opswgw-lb" not installed on this system
opsware-agent-37.0.0.2.61-win32-5.1.exe -s --settime --force_full_hw_reg --force_sw_reg  --loglevel error --opsw_gw_addr_list 16.173.244.162:3001
MTU=16036
Version mismatch with vmx86 driver: expecting 208.0, got 138.0.
You have an incorrect version of driver "vmx86.sys". Try reinstalling VMware Workstation.
Failed to initialize monitor device.
Advertisement

Leave a Reply