??xml version="1.0" encoding="utf-8" standalone="yes"?> 管 JVM 调整操作?JVM 提供E序的不同而有所变化Q但一般的调整概念适用于所?JVM。这些一般的概念包括Q?
~译器调整。在服务器运行时期间Q所?JVM 都用即ӞJITQ编译器来将 Java 字节码编译ؓ(f)本机指o(h)?
Java 内存或堆调整。JVM 内存理功能Q即垃圾回收Qؓ(f)提高 JVM 性能提供?jin)其中一U最大的可能性?
c装入调整?
q程
优化启动性能和运行时性能
在某些环境中Q优?WebSphere Application Server
的启动性能比优化运行时性能更重要。在另一些环境中Q优化运行时性能更ؓ(f)重要。缺省情况下QIBM JVM 是针对运行时性能q行优化的,而基?
HotSpot ?JVM 是针对启动性能q行优化的?
Java JIT
~译器在很大E度上决定了(jin)是优化启动性能q是优化q行时性能。编译器使用的初始优化别媄(jing)响编译类Ҏ(gu)所耗用的时间以?qing)启动服务器所耗用的时间。ؓ(f)?jin)提?
启动速度Q可以降低编译器所使用的初始优化别。这意味着Q由于现在用较低的优化U别来编译类Ҏ(gu)Q所以应用程序的q行时性能可能?x)下降?
因ؓ(f)~译器在q行时执行阶D会(x)Ҏ(gu)自己的判断来重新~译cL法以提高性能Q所以,很难提供一个有关特定的q行时性能影响的说明。最l,应用E序的持l时?
是媄(jing)响运行时性能下降E度的主要原因。运行时间较短的应用E序的方法被重新~译的可能性较高。运行时间较长的应用E序的方法被重新~译的可能性较低?
IBM JVM 的缺省设|是使用高(sh)化别来执行初始~译。如果需要更Ҏ(gu)行ؓ(f)Q可以用以?IBM JVM 选项Q?
-Xquickstart
此设|媄(jing)?IBM JVM 使用较低优化U别来编译类Ҏ(gu)的方式,q将提高服务器启动速度Q但?x)ɘq行时性能下降。缺省情况下Q如果未指定此参敎ͼIBM JVM 最初将使用较高的初始优化别来执行~译。此讄能够提高q行时性能Q但?x)减慢服务器启动速度?
~省|(x) 高初始编译器优化U别
|(x) 高初始编译器优化U别
用法Q?-Xquickstart 可以加快服务器启动速度?
Z Sun ?Hotspot 技术的 JVM 最初用低优化U别来编译类Ҏ(gu)。用下?JVM 选项来更Ҏ(gu)行ؓ(f)Q?
-server
Z Sun ?Hotspot 技术的 JVM 最初用低优化U别来编译类Ҏ(gu)。这?JVM 使用单编译器和能够进行优化的 JIT
~译器。通常情况下,使用?JIT
~译器。然而,可以通过讄此选项来用能够执行优化的~译器。此更改显著提高服务器的性能Q但使用能够执行优化的编译器Ӟ服务器的预备旉会(x)?
ѝ?
~省|(x) 单编译器
|(x) 能够执行优化的编译器
用法Q?-server 启用能够执行优化的编译器?
讄堆大?下列命o(h)行参数对于设|堆大小来说很有用?
-Xms
此设|控?Java 堆的初始大小。正调整此参数有助于降低垃圑֛收开销Q从而羃短服务器响应旉q提高吞吐量。对于某些应用程序来_(d)此选项的缺省设|可能会(x)太低Q从而导致发生大量小型垃圑֛收?
~省|(x) 256 MB
|(x) 随工作负载的不同而有所变化Q但高(sh)~省倹{?
用法Q?-Xms256m 初始堆大小讄?256 兆字?
-Xmx
此设|控?Java 堆的最大大。正调整此参数有助于降低垃圑֛收开销Q从而羃短服务器响应旉q提高吞吐量。对于某些应用程序来_(d)此选项的缺省设|可能会(x)太低Q从而导致发生大量小型垃圑֛收?
~省|(x) 512 MB
|(x) 随工作负载的不同而有所变化Q但高(sh)~省倹{?
用法Q?-Xmx512m 最大堆大小讄?512 兆字?
-Xlp
此设|可以与 IBM JVM 配合使用Q以使用大页来分配堆。然而,如果使用此设|,那么必须操作系l配|ؓ(f)支持大页。用大可以降?CPU 跟踪堆内存时的开销Qƈ且还允许创徏较大的堆?
请参阅调整操作系l?以了(jin)解有兌整操作系l的更多信息?
应该指定的堆大小取决于不同时D늚堆用情c(din)在堆大频J更改的情况下,?Xms ?Xmx 参数指定相同的值可以提高性能?
调整 IBM JVM 的垃圑֛收器?
使用 Java -X 选项来查看内存选项列表?
-Xgcpolicy
?gcpolicy 讄?optthruput
?x)禁用ƈ发标记。如果没有暂停时间问题(表现为应用程序响应时间不规律Q,那么应该使用此选项来实现最大吞吐量。将 gcpolicy 讄?
optavgpause
?x)用缺省值来启用q发标记。此讄减由正常垃圾回收所引v的应用程序响应时间不规律情况。然而,此选项可能?x)降低整体吞吐量?
~省|(x) optthruput
|(x) optthruput
用法Q?Xgcpolicy:optthruput
-Xnoclassgc
~省情况下,当一个类没有Mzd实例ӞJVM ׃(x)从内存(sh)卸装该类Q但是这样会(x)使性能下降。如果关闭类垃圾回收Q就可以消除׃多次装入和卸装同一个类而造成的开销?
如果不再需要某个类Q那么该cd堆中所占用的空间通常用于创建新对象。但是,如果应用E序通过创徏cȝ新实例来处理hQƈ且该应用E序的请求是随机?
现的Q那么可能会(x)发生以下情况Q先前请求者完成后Q正常的cd圑֛收将通过释放q个cd用的堆空间来清除q个c,但当下一个请求出现时Q又必须这个类?
新实例化。在q种情况下,(zhn)可能想使用此选项来禁用类垃圾回收?
~省|(x) 启用cd圑֛?
|(x) 用cd圑֛?
用法Q?Xnoclassgc 用cd圑֛?
有关其他信息Q请参阅下列 DeveloperWorks 文章Q?
http://www.ibm.com/developerworks/java/
调整 Sun JVM 的垃圑֛收器
?Solaris q_上,W(xu)ebSphere Application Server ?Sun Hotspot JVM 上运行,而不是在 IBM JVM 上运行。对 Sun JVM 使用正确的调整参C利用其性能优化功能十分重要?
Sun Hotspot JVM 依靠分代垃圾回收来实现最x(chng)能。下列命令行参数对于调整垃圾回收来说非常有用?
-XX:SurvivorRatio
?Java
堆划分ؓ(f)旧对象(长生命周期对象)(j)区域和新对象区域。新对象区域q一步细分ؓ(f)两部分,W一部分用于分配l新对象Q初始区域)(j)Q第二部分存N些经q其前几
ơ垃圑֛收之后、但在被提升为旧对象之前仍在使用中的新对象(q存者空_(d)(j)。幸存者比率是堆的新对象区域中初始区域与幸存者空间的比率。增大此讄针?
需要创建大量对象但仅保留少量对象的应用E序优化 JVM。与其他应用E序相比QW(xu)ebSphere Application Server
?x)生成更多中{生命周期对象和长生命周期对象,因此Q应该将此设|设|ؓ(f)于~省倹{?
~省|(x) 32
|(x) 16
用法Q?-XX:SurvivorRatio=16
-XX:PermSize
为永久生成对象保留的堆区域存?JVM 的所有反数据。对于动态地装入和卸装大量类的应用程序来_(d)应该增大此大以优化它们的性能。通过此参数讄?128MBQ可以消除增大此部分堆所需的开销?
|(x) 128 MB
用法Q?XX:PermSize=128m ?perm 大小讄?128 兆字节?
-Xmn
此设|控制允许新生成的对象在堆中耗用的空间量。正调整此参数有助于降低垃圑֛收开销Q从而羃短服务器响应旉q提高吞吐量。此参数的缺省设|通常q?
低,q将D执行大量的小型垃圑֛收操作。如果将此参数设|得q高Q可能会(x)D JVM
仅执行大型(全面Q垃圑֛收。这些垃圑֛收操作通常?x)耗时几秒钟,q将严重影响服务器的整体性能。?zhn)必须保持此参数讄为小于整个堆大小的一半,以避?
q种情况出现?
~省|(x) 2228224 字节
|(x) 大约整个堆大的 1/4
用法Q?-Xmn256m 大设|ؓ(f) 256 兆字节?
-Xnoclassgc
~省情况下,当一个类没有Mzd实例ӞJVM ׃(x)从内存(sh)卸装该类Q但是这样会(x)使性能下降。如果关闭类垃圾回收Q就可以消除׃多次装入和卸装同一个类而造成的开销?
如果不再需要某个类Q那么该cd堆中所占用的空间通常用于创建新对象。但是,如果应用E序通过创徏cȝ新实例来处理hQƈ且该应用E序的请求是随机?
现的Q那么可能会(x)发生以下情况Q先前请求者完成后Q正常的cd圑֛收将通过释放q个cd用的堆空间来清除q个c,但当下一个请求出现时Q又必须这个类?
新实例化。在q种情况下,(zhn)可能想使用此选项来禁用类垃圾回收?
~省|(x) 启用cd圑֛?
|(x) 用cd圑֛?
用法Q?Xnoclassgc 用cd圑֛?
有关调整 Sun JVM 的其他信息,请参?Java HotSpot VM 的性能文档?
调整 HP JVM 的垃圑֛收器
HP JVM 依靠分代垃圾回收来实现最x(chng)能。下列命令行参数对于调整垃圾回收来说非常有用?
-Xoptgc
此设|针对包含许多短生命周期对象的应用程序优?JVM。如果未指定此参敎ͼ那么 JVM 通常执行大型Q全面)(j)垃圾回收。全面垃圑֛收会(x)p几秒钟时_(d)q将显著影响服务器性能?
~省|(x) off
|(x) on
用法Q?-Xoptgc 启用优化的垃圑֛收?
-XX:SurvivorRatio
?Java
堆划分ؓ(f)旧对象(长生命周期对象)(j)区域和新对象区域。新对象区域q一步细分ؓ(f)两部分,W一部分用于分配l新对象Q初始区域)(j)Q第二部分存N些经q其前几
ơ垃圑֛收之后、但在被提升为旧对象之前仍在使用中的新对象(q存者空_(d)(j)。幸存者比率是堆的新对象区域中初始区域与幸存者空间的比率。增大此讄针?
需要创建大量对象但仅保留少量对象的应用E序优化 JVM。与其他应用E序相比QW(xu)ebSphere Application Server
?x)生成更多中{生命周期对象和长生命周期对象,因此Q应该将此设|设|ؓ(f)于~省倹{?
~省|(x) 32
|(x) 16
用法Q?-XX:SurvivorRatio=16
-XX:PermSize
为永久生成对象保留的堆区域存?JVM 的所有反数据。对于动态地装入和卸装大量类的应用程序来_(d)应该增大此大以优化它们的性能。通过此参数指定?128 兆字节,可以消除增大此部分堆所需的开销?
~省|(x) 0
|(x) 128 兆字?
用法Q?-XX:PermSize=128m ?PermSize 讄?128 兆字?
-XX:+ForceMmapReserved
~省情况下,Java 堆以“惰性交?#8221;方式q行分配。在此方式下Q将Ҏ(gu)需要来分配内存,q样可以节省交换I间Q但是也强制?4KB
c(din)在大型堆系l中Q这U内存分配方式允许堆包含C十万计的c(din)此命o(h)用“惰性交?#8221;q允许操作系l用较大的内存,从而优化对构成 Java
堆的内存的访问?
~省|(x) off
|(x) on
用法Q?-XX:+ForceMmapReserved 禁?#8220;惰性交?#8221;?
-Xmn
此设|控制允许新生成的对象在堆中耗用的空间量。正调整此参数有助于降低垃圑֛收开销Q从而羃短服务器响应旉q提高吞吐量。此参数的缺省设|通常q低Q这导致执行大量的型垃圾回收操作?
~省|(x) 没有~省?
|(x) 大约整个堆大的 3/4
用法Q?-Xmn768m 大设|ؓ(f) 768 兆字?
虚拟大?
通过?Java 虚拟机的指o(h)大和数据大设|ؓ(f) 64MBQ可以提高性能?
~省|(x) 4MB
|(x) 64MB
用法Q?使用以下命o(h)。命令输出提供了(jin)q程可执行文件的当前操作pȝ特征Q?
chatr +pi64M +pd64M /opt/WebSphere/
AppServer/java/bin/PA_RISC2.0/
native_threads/java
-Xnoclassgc
~省情况下,当一个类没有Mzd实例ӞJVM ׃(x)从内存(sh)卸装该类Q但是这样会(x)使性能下降。如果关闭类垃圾回收Q就可以消除׃多次装入和卸装同一个类而造成的开销?
如果不再需要某个类Q那么该cd堆中所占用的空间通常用于创建新对象。但是,如果应用E序通过创徏cȝ新实例来处理hQƈ且该应用E序的请求是随机?
现的Q那么可能会(x)发生以下情况Q先前请求者完成后Q正常的cd圑֛收将通过释放q个cd用的堆空间来清除q个c,但当下一个请求出现时Q又必须这个类?
新实例化。在q种情况下,(zhn)可能想使用此选项来禁用类垃圾回收?
~省|(x) 启用cd圑֛?
|(x) 用cd圑֛?
用法Q?Xnoclassgc 用cd圑֛?
有关调整 HP 虚拟机的其他信息Q请参阅 Java 技术Y?HP-UX 11i?
调整 HP ?JVM for HP-UX 讄下列选项以提高应用程序性能Q?
-XX:SchedulerPriorityRange=SCHED_NOAGE
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider
-XX:-ExtraPollBeforeRead
]]>
W一?准备工作
? (g)查内?br />
SZ_TOMCAT:/home/xjy/soft> grep SwapTotal /proc/meminfo
SwapTotal: 2031608 kB
? (g)查内?br /> Linux reaky.com 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux
? (g)查Y件包
SZ_TOMCAT:/home/xjy/soft> rpm -q gcc make binutils glibc libaio
gcc-3.4.3-9.EL4
make-3.80-5
binutils-2.15.92.0.2-10.EL4
glibc-2.3.4-2
libaio-0.3.102-1
SZ_TOMCAT:/home/xjy/soft> rpm -q openmotif
openmotif-2.2.3-6.RHEL4.2
setarch-1.6-1
(g)查内核参?br />
sysctl –a
然后?ETC/sysctl.conf中添?br />
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行/sbin/sysctl –p
中文化显C工?/p>
修改/etc/sysconfig/i18n文g,改ؓ(f)
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-:en_US:en"
SYSFONT="lat0-sun16"修改/etc/sysconfig/i18n文g,改ؓ(f)
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-:en_US:en"
SYSFONT="lat0-sun16"
W二?
? 创徏用户
su – root
[root@reaky etc]# groupadd dba
[root@reaky etc]# groupadd oinstall
[root@reaky etc]# useradd -c "Oracle software owner" -g oinstall -G dba oracle
? 讄环境
~辑/home/oracle/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
alias ls='ls -CF'
PS1='SZ_TOMCAT:$PWD> '; export PS1
umask 022
set -o vi
stty intr '^c'
stty -istrip
#if [ $USER = "oracle" ]; then
# if [ $SHELL = "/bin/ksh" ]; then
# ulimit -p 16384
# ulimit -n 65536
# else
# ulimit -u 16384 -n 65536
# fi
#fi
EDITOR=vi; export EDITOR
TEMP=/tmp; export TEMP
TMPDIR=/tmp; export TMPDIR
### SETUP ORACLE ENVIRONMENT ###
ORACLE_SID=ora10; export ORACLE_SID
ORACLE_BASE=/home/oracle;
export ORACLE_BASE
ORACLE_HOME=/home/oracle/product/10.2.0; export ORACLE_HOME
ORACLE_TERM=ansi;
export ORACLE_TERM
JAVA_FONTS=/usr/share/fonts/zh_CN/TrueType/; export JAVA_FONTS
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
PATH=.:$ORACLE_HOME/bin:$PATH
export PATH
### FOR ORACLE INSTALL ###
export LC_ALL="en_US"
export LC="en_US"
W三步、安装Oracle10g
1Q开始Oracle普通安?br />
以oracle用户dlinuxQ加载oracle Oracle10g光盘Q?在执行runInstaller?定Oracle环境变量已经讄,可以执行如下命o(h)(g)验环境变量的讄:
oracle 用户登陆
$set
在终端命令窗口,执行如下命o(h)Q开始oracle10g的安?
oracle$/mnt/cdrom/runInstaller
2.在欢q窗口界? 点击“下一?#8221;按钮
3.指定Inventory 路径和n份证明窗?
inventory路径? /home/oracle/oraInventory
指定操作pȝl名: oinstall
点击“下一?#8221;按钮
4Q这时会(x)弹出一个执行orainstRoot.sh 脚本的窗?
打开另一个终端,以root用户执行如下命o(h):
su – root
cd /home/oracle/oraInventory
./orainstRoot.sh
然后Q切换到oracle安装H口Q点?#8220;l箋(hu)”按钮
5Q?nbsp; 在指定文件位|窗口弹出后Q指定相应的路径:
?
路径Q?/mnt/cdrom/stage/products.xml
目的:
名称: OraDb10g_home1
路径: /home/oracle/product/10.1.0/db_1
然后Q点?#8220;下一?#8221;按钮
6Q选择安装cd:
选择"企业?选项Q然后点?#8220;下一?#8221;按钮。安装程序验证系l是否符合安装和配置所选品的所有最低要?br />
7Q?nbsp; 安装E序验证pȝ是否W合安装和配|所选品的所有最低要求。当(g)完成ƈ成功后,点击“下一?#8221;按钮
8Q?nbsp; 选择数据库设|?
选择"通用"选项Q然后点?#8220;下一?#8221;按钮
9Q指定数据库配置参数:
全局数据库名U? "test".
SID: "test".
选中“创徏带样本方案的数据?#8221;复选框Q然后,点击“下一?#8221;按钮
10Q选择数据库管理设|?
选择"使用 Database Control理数据??br />
然后Q点?#8220;下一?#8221;
11.指定数据库文件存储选项
选择 "文gpȝ"选项.
指定数据库\? /home/oracle/oradata/
然后点击“下一?#8221;按钮Q?br />
12.指定备䆾和恢复选项:
选择"不启用自动备?.
点击 “下一?#8221;按钮
13Q指定数据库Ҏ(gu)口o(h):
可以为SYS、SYSTEM、SYSMAN、DBSNMP单独指定口o(h),或选择"所有用户用同一口o(h)"选项.些用h定同一个口令?br />
指定口o(h)不要以数字开?否则?x)得到错误信?然后点击 “下一?#8221;按钮
14Q?nbsp; 出现概要H口后, 点击“安装”按钮
15Q?nbsp; q时你会(x)看到数据库安装过E窗口,然后?x)出现辅助设|窗口,再出现数据库创徏H口?br />
16Q?nbsp; 数据库创建完毕,弹出数据库创建完成窗口,点击Ok按钮?br />
当弹Z个执行root.sh脚本的窗口时在另一个终端执行如下命?
su – root
cd /home/oracle/product/10.1.0/db_1
./root.sh
点击定”按钮
17Q?nbsp; 在概要安装完毕,?x)报告一个发?ORACLE_BASE/product/10.1.0/db_1/portlist.ini文gQ这时点击OK按钮
18Q?nbsp; 安装l束:
点击“退?#8221;按钮Q结束安装程序?br />
六、数据库的启动和停止
要数据库启动,执行如下命o(h):
oracle$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
要数据库停止,执行如下命o(h):
oracle$ sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown
删除oracle10g
如果oracle10ganzhuangq程中出现错误,需要重新安装,可以执行如下命o(h)删除以前安装的oracleQ?br />
su –oracle
rm –rf /home/oracle/*
rm –f /etc/oraInst.loc /etc/oratab /etc/oracle
su –root
export ORACLE_HOME=/home/oracle/product/10.1.0/db_1
$ORACLE_HOME/bin/localconfig delete
rm –f /etc/inittab.cssd
rm –f /usr/local/bin/coraenv /usr/local/bin/dbhome
rm –f /usr/local/bin/oraenv
执行完上q命令后Q重新启动系l,可以重新安装oracle10g数据库系l?/p>
FAQ (在Linuxq_安装Oracle比较常见的问?
1. 不能启动安装界面
q行runInstaller提示信息cM如下:
xlib:connection to "localhost:0.0" refused by server
xlib:client is not authorized to connect to server
Exception in thread "main" java.lang.InternalError:
can't connect to x11 window server using "localhost:0.0" at .......
解决办法: 讑֮你的DISPLAY环境参数.
# export DISPLAY= your_IPaddress :0.0
把your_IPaddress换成你的IP.或者用root单的执行一? xhost + (要注意这样会(x)有安全上的隐(zhn)?
2.安装界面昄很多"口口"样子的ؕ?br />
解决办法:查看locale输出
# locale
LANG=en_US.UTF-8
LC_CTYPE=zh_CN.GB18030
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
执行#export LC_CTYPE=en_US.UTF-8 然后重新调用安装E序.
3. 用IEdLinux服务器上的em出现q
在Linux(Unix) 环境下成功安装了(jin)Oracle 10g,从windows下用IE览器登?10g 的em, 按钮?口口"q样的方?
解决办法: 参?
http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm
4.创徏数据库的时候出现ORA-03113的错?br />
解决办法: 查看核心(j)参数是否调整正确.参?
http://www.dbanotes.net/Oracle/ORA-03113.htm
5. RedHat 9 / FC1{系l?0g不支持如何安?
解决办法Q在10g不支持的Linux发行版上安装10g的解x(chng)?br />
1). q行runInstaller -ignoreSysPrereqsQ这样会(x)跌(g)?
2). 摘自 www.puschitz.com 修改/etc/redhat-release文gQ?br />
#su - root
#cp /etc/redhat-release /etc/redhat-release.backup
#cat > /etc/redhat-release << EOF
Red Hat Enterprise Linux AS release 3 (Taroon)
EOF
安装完毕Q执行如下操作:(x)
#su - root
#cp /etc/redhat-release.backup /etc/redhat-release
3). http://www.dbanotes.net/Oracle/10G-Beta-Install-Bug.htm
同样的思\Q我们可以修改Oracle 的install/oraparam.ini文g辑ֈ目的.
6.如何x(chng)那些 ocssd.bin q程Q?br />
解决办法:~辑/etc/inittab文g(做好备䆾)
注释掉这一?
h1:3:respawn:/etc/init.d/init.cssd run >/dev/null 2>................
---------------------------------------------------------------------------------------------------------------------
参考信?br />
http://blog.csdn.net/itsdn/archive/2007/05/21/1619114.aspx
Q?br />
1、在 Linux x86 上安装Oracle数据?0g
http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#rhel3
2、Oracle 10gR2 + RedHat Enterprise Linux AS4 安装
http://www.linuxdiyf.com/viewarticle.php?id=11578
3、Oracle 10g For Linux安装手册
http://bbs.database.ccidnet.com/htm_data/27/0607/112610.html
4、Installing Oracle 10g on RHEL AS 3 Step-by-Step
http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm
首先?span style="font-family: Times New Roman">sun官网下蝲安装包:(x)
分别下蝲Q?/span>jdk-6u16-linux-i586-rpm.bin ?span style="font-family: Times New Roman">jdk-6u16-linux-i586.bin
然后这两个安装文g攑ֈ:/usr/tmp 目录下,分别修改权限Q命令如下:(x)
# chmod u+x ./jdk-6u16-linux-i586.bin
# chmod u+x ./jdk-6u16-linux-i586-rpm.bin
解压文gQ这两个文g可以自动解压Q:(x)
# ./jdk-6u16-linux-i586.bin
创徏目录/usr/java:
# mkdir /usr/java
解压出来的jdk-6u16-linux-i586目录复制?span style="font-family: Times New Roman">/usr/java目录下:(x)
# cp -fr jdk-6u16-linux-i586 /usr/java
解压文g
# ./jdk-6u16-linux-i586-rpm.bin
安装软g?x)?span style="font-family: Times New Roman">JDK自动安装?span style="font-family: Times New Roman"> /usr/java/jdk-6u16-linux-i586目录?/span>
二、配|环境变?/span>
1.修改用户环境变量
假设使用java的用户ؓ(f) guestQ编辑该用户?span style="font-family: Times New Roman">.bashrc文gq行环境变量讄?/span>
# vi /home/ guest /.bashrc
?span style="font-family: Times New Roman"> .bashrc文g中加入:(x)
export JAVA_HOME=/usr/java/jdk1.6.0_16
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
2.修改所有用L(fng)环境变量
# vi /etc/profile
在该文g中加?span style="font-family: Times New Roman">:
export JAVA_HOME=/usr/java/jdk1.6.0_16
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
注意CLASSPATH路径中加入了(jin)$CLASSPATHQ这样可以避免将之前配置的\径被覆盖?/span>
profile文g如下Q?/span>
############profile begin###########
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
# ksh workaround
if [ -z "$EUID" -a -x /usr/bin/id ]; then
EUID=`id -u`
UID=`id -ru`
fi
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
if [ -x /usr/bin/id ]; then
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
#java path
export JAVA_HOME=/usr/java/jdk1.6.0_16
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
unset pathmunge
############profile end###########
三、卸?span style="font-family: Times New Roman">jkdQ?/span>
1、卸载系l自带的jdk版本Q?/span>
查看自带?span style="font-family: Times New Roman">jdkQ?/span>
#rpm -qa | grep gcj
看到如下信息Q?/span>
libgcj-4.1.2-44.el5
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
使用rpm -e --nodeps 命o(h)删除上面查找的内容:(x)
#rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
2、卸?span style="font-family: Times New Roman">rpm安装?span style="font-family: Times New Roman">jkd版本
查看安装?span style="font-family: Times New Roman">jdkQ?/span>
#rpm -qa|grep jdk
看到如下信息Q?/span>
java-1.6.0-openjdk-1.6.0.0-0.25.b09.el5
jdk-1.6.0_16-fcs
卸蝲Q?/span>
#rpm -e --nodeps jdk-1.6.0_16-fcs
安装q程?qing)配|:(x)
#建立 twiki 目录
mkdir /home/centeur/public_html/twiki
cd /home/centeur/public_html/twiki
#下蝲q解?br /> wget http://twiki.org/p/pub/Codev/Release/TWiki-4.1.2.tgz
tar -zxvf TWiki-4.1.2.tgz
#权限限制
cp root-htaccess.txt .htaccess
cp pub-htaccess.txt pub/.htaccess
cp subdir-htaccess.txt lib/.htaccess
cp subdir-htaccess.txt data/.htaccess
cp subdir-htaccess.txt locale/.htaccess
cp subdir-htaccess.txt templates/.htaccess
cp bin/.htaccess.txt bin/.htaccess
cp bin/LocalLib.cfg.txt bin/LocalLib.cfg
#修改 bin/LocalLib.cfgQ将 $twikiLibPath 改ؓ(f)合适的路径
$twikiLibPath = "/home/centeur/public_html/twiki/lib";
#修改 bin/.htaccessQ将 {DataDir}和{Administrators} 修改为合适的内容
AuthUserFile /home/centeur/public_html/twiki/data/.htpasswd
AuthName 'Enter your WikiName: (First name and last name, no space, no dots, capitalized, e.g. JohnSmith). Cancel to register if you do not have one.'
AuthType Basic
<FilesMatch "configure.*">
SetHandler cgi-script
Order Deny,Allow
Deny from all
Allow from 127.0.0.1, 192.168.1.10
Require user centeur
Satisfy Any
</FilesMatch>
#建立pȝ理员帐?br /> htpasswd -c data/.htpasswd centeur#现在可以在览器中键入 http://example.com/twiki/bin/configure q行讄?jin),讄保存?lib/LocalSite.cfg ?br /> #提示~少 CGI::Session 模块Q进行安?br /> mkdir /home/centeur/CPAN
cd /home/centeur/CPAN
wget http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/CGI-Session-4.10.tar.gz
tar -zxvf CGI-Session-4.10.tar.gz
cd CGI-Session-4.10
perl Makefile.PL PREFIX=/home/centeur/CPAN
make
make install
#拯模块?twiki ?lib ?br /> cd /home/centeur/public_html/twiki
cp -R /home/centeur/CPAN/lib/perl5/site_perl/5.8.8/CGI lib/CPAN/lib/CGI#LocalSite.cfg 的部分设|内?br /> $TWiki::cfg{DefaultUrlHost} = 'http://example.com';
$TWiki::cfg{ScriptUrlPath} = '/twiki/bin';
$TWiki::cfg{PubUrlPath} = '/twiki/pub';
$TWiki::cfg{PubDir} = '/home/centeur/public_html/twiki/pub';
$TWiki::cfg{TemplateDir} = '/home/centeur/public_html/twiki/templates';
$TWiki::cfg{DataDir} = '/home/centeur/public_html/twiki/data';
$TWiki::cfg{LocalesDir} = '/home/centeur/public_html/twiki/locale';
$TWiki::cfg{TempfileDir} = '/home/centeur/tmp';
$TWiki::cfg{UseClientSessions} = 1;
$TWiki::cfg{LoginManager} = 'TWiki::Client::TemplateLogin';
$TWiki::cfg{MinPasswordLength} = 6;
$TWiki::cfg{Htpasswd}{FileName} = '/home/centeur/public_html/twiki/data/.htpasswd';
$TWiki::cfg{Languages}{ru}{Enabled} = 0;
$TWiki::cfg{Languages}{sv}{Enabled} = 0;
$TWiki::cfg{Languages}{'zh-tw'}{Enabled} = 1;
$TWiki::cfg{Languages}{cs}{Enabled} = 0;
$TWiki::cfg{Languages}{'zh-cn'}{Enabled} = 1;
$TWiki::cfg{Languages}{es}{Enabled} = 0;
$TWiki::cfg{Languages}{nl}{Enabled} = 0;
$TWiki::cfg{Languages}{pl}{Enabled} = 0;
$TWiki::cfg{Languages}{fr}{Enabled} = 0;
$TWiki::cfg{Languages}{da}{Enabled} = 0;
$TWiki::cfg{Languages}{de}{Enabled} = 0;
$TWiki::cfg{Languages}{pt}{Enabled} = 0;
$TWiki::cfg{Languages}{it}{Enabled} = 0;
$TWiki::cfg{DisplayTimeValues} = 'servertime';
$TWiki::cfg{Site}{Locale} = 'zh_CN.UTF-8';
$TWiki::cfg{Site}{LocaleRegexes} = 1;
$TWiki::cfg{StoreImpl} = 'RcsLite';
$TWiki::cfg{WebMasterEmail} = 'lypdarling@gmail.com';
$TWiki::cfg{UserInterfaceInternationalisation} = 1;
$TWiki::cfg{UseLocale} = 1;
$TWiki::cfg{Site}{CharSet} = 'UTF-8';
$TWiki::cfg{Site}{Lang} = 'zh';
$TWiki::cfg{Site}{FullLang} = 'zh-cn';#现在可以在浏览器中键?http://example.com/twiki/bin/view q入 twiki 面?br /> #~辑 TWIki > Main 目录 > TWikiAdminGroup 面Q将 centeur 加入 GROUP
* Member list:
* Set GROUP = centeur
* Persons/group who can change the list:
* Set ALLOWTOPICCHANGE = TWikiAdminGroup
#修改 .htaccessQ进行重定向讄
Redirect /twiki/index.html http://example.com/twiki/bin/view
JNDI是用于访问不同命名和目录服务的统一API接口Q?/span>
2. JNDI的架构和原理
1. 架构Q?/span>
W一层:(x)java代码Q是讉KJNDI的代码;
W二层:(x)JNDI APIQ统一的命名和目录服务接口
W三层:(x)JNDI Naming ManagerQ?/span>JNDI理?/span>
W四层:(x)JNDI SPIQ用于构?/span>JNDI实现的框Ӟ能够动态的插入命名和目录服务提供商的品;
W五层:(x)命名和目录服务提供商的品;
命名和目录服务提供商的?/span>,例如Q?/span>DNS,LDAP,NIS,NDS……..;因ؓ(f)q些产品都是不同的提供商提供的品,所以他们的命名和目录服务的标准不一_(d)各个目录服务采用的访问协议也是不一L(fng)Q所以,要是直接讉K他们的话Q就要编写不同的java代码来访问他们;因此Q?/span>JNDI SPIp决了(jin)q个问题Q它能动态的插入q些命名和目录服务,能够其协议专属的目录品集成到pȝ中,使得我们能只需要调用一个统一?/span>javaAPIp够访问插入的产品?jin)?/span>
2Q原理:(x)
JNDI其实很好理解Q他是一个树(wi)状的l构Q它的最是一?/span>initialContext节点Q然后它的下面就是绑定的一些对象或是一?/span>subContextQ用JNDI?wi)就能够查找到?wi)中每一个绑定上的节点上的对象的引用Q?/span>
3.怎样q接?/span>JNDI上?
Environment environment = new Environment() ;//创徏一个环境对?/span>
environment.setProviderurl(“t3://www.tkk7.com”) ;
environment.setSecurityPrincipal(“todd”) ;//认证的用户名
environment.setSecurityCredentials(“841026”) ;//密码
Context context = environment.getInitialContext() ;
//创徏一?/span>subContextq绑定一个对象:(x)
Context subContext = context.createSubcontext(“subContext”) ;
subContext.rebind(“newObject”,object) ;//l定的对象必L可序列化?/span>
subContext.close() ;
context.close() ;
4.如何通过JNDI查找bind的对象?
Object object = context.lookup(“User”) ;
//?/span>userH化到原?/span>
User user = (User)javax.rmi.PortableRemoteObject.narrow(object, User.class) ;
context.close() ;
1. 什么是servletQ?/span>
Servlet是一?/span>javac,是一个提供基于协议请求和响应?/span>javac;
2. 它的生命周期
1. 启动服务器时׃(x)实例化ƈ加蝲servlet实例Q?/span>
2. q行初始化:(x)自动调用initQ?/span>ServletConfig servletConfigQ方法;
3. ServletqAQ调?/span>serviceQ?/span>HttpServletRequest requestQ?/span>HttpServletResponse responseQ方法(?nbsp; ?/span> service 是dopostQ)(j)?/span>dogetQ)(j)Ҏ(gu)Q,q是客户提交Ӟ自动调用的;
4. Servlet销毁:(x)自动调用调用distoryQ)(j) Q?/span>
注意Q在实例化ƈ加蝲servlet后,步骤二和四只调用一ơ,而步骤三Q是在每ơ客L(fng)发出h旉调用Q?/span>
3. 怎样部v一?/span>servletQ?/span>
ServletcL必须?/span>web.xml中注册才能用的Q例如,我有一?/span>MyServletc:(x)
必须?/span>web.xml中注册:(x)
<web-app>
//-----------------------Servlet声明----------------------
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>servletPakage.MyServlet</servlet-class>
</servlet>
//------------------------Servlet注册(镜像)---------------
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>myServletURL</ url-pattern >
</servlet-mapping>
</web-app>
q样你在提交时的Url地址是/myServletURL?jin)?/span>
4. 什么是serviceQ?/span>HttpServletRequest requestQ?/span>HttpServletResponse responseQ方法?
其中serviceQ?/span>HttpServletRequest requestQ?/span>HttpServletResponse responseQ方法包括两U:(x)
1. dogetQ?/span>HttpServletRequest requestQ?/span>HttpServletResponse responseQ方法:(x)
q种Ҏ(gu)被称为显式提交方法,主要原因是它的得到的参数攑֜url中,可以被看刎ͼ所以称为显C提 交;
例如Q有个表单:(x)
<form action=”/myServletURL?name=todd” method=”get”>
</form>
q种Ҏ(gu)?/span>request获得的参数就是你看到?/span>name=toddQ?/span>
例如Q?/span>String s=request.getParameter(“name”);
其结?/span>s=”todd”;
2. dopostQ?/span>HttpServletRequest requestQ?/span>HttpServletResponse responseQ方法:(x)
q种Ҏ(gu)被称为隐式提交方法,它的参数不会(x)?/span>url里得刎ͼ而是在请求数据体得到参数Q?/span>
例如Q有个表单:(x)
<form action=”/myServletURL” method=”post”>
<input type=”text” name=”name” value=”todd”>
</form>
q种Ҏ(gu)?/span>request获得的参数就是表单体?/span>name=toddQ?/span>
例如Q?/span>String s=request.getParameter(“name”);
其结?/span>s=”todd”;
5. 什么是ServletContext?
ServletContext是一个接口,?/span>WebApplication的视图,它的作用域时ApplicationQ它能访?/span>Application中的初始化参数和属性,它不局限域一?/span>ServletQ它属于整个ApplicationQ?/span>
ServletContext的初始化参数Q?/span>
?/span>web.xml中:(x)
<web-app>
<context-param>
<param-name>myBlog</param-name>
<param-value>www.tkk7.com/todd841026</param-value>
</context-param>
</web-app>
q样?/span>application中Q意一?/span>Servlet中可以得到这个参敎ͼ
例如Q?/span>ServletContext sc = getServletContext ();
String s = sc.getInitParameter(“myBlog”);
那么l果s是”www.tkk7.com/todd841026”
6. 什么是ServletConfigQ?/span>
是单独的Servlet初始化配|;
例如Q在web.xml?/span>
<web-app>
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>servletPakage.MyServlet</servlet-class>
</servlet>
<init-param>
<param-name>cache</param-name>
<param-value>off</param-value>
</init-param>
</web-app>
在这?/span>Servlet中:(x)ServletConfig sc = getServletConfig();
String s = sc.getInitParameter(“cache”);
那么l果s是”off”;
7. Servlet怎样处理多线E?/span>
在默认的情况下,单个Servlet实例是可以处理多个ƈ发请求的Q所以要考虑到多U程的共享同一对象的问题,例如Q?/span>
//做个Servlet中生了(jin)多少?/span>object对象一个变量的例子
Private int count = 0 ;
Public void dopost(HttpServletRequest request,HttpServletResponse response){
Object object = new Object() ;
count++ ;
System.out.println(“count = ” + count) ;
}
当有5个用h交数据时Q因?/span>Servlet是处理多U程的,所以可能出玎ͼW四个用L(fng)E序已经执行?/span>count++Q而第五个用户刚执行完Object object = new Object() Q就?x)出现数据不一致性,因ؓ(f)当前?/span>5?/span>object对象Q但?/span>count却是4Q?/span>
解决Ҏ(gu)一Q?/span>
Private boolean flag = false Q?/span>
Private int count = 0 ;
Public void dopost(HttpServletRequest request,HttpServletResponse response){
synchronized(flag){
Object object = new Object() ;
count++ ;
}
System.out.println(“count = ” + count) ;
}
用同步程序块解决多线E的问题Q这样在同一时刻只能有一个访问该E序块了(jin)Q?/span>
解决Ҏ(gu)二:(x)
Private int count = 0 ;
Public void dopost(HttpServletRequest request,HttpServletResponse response)
Implements SingleThreadModel{
Object object = new Object() ;
count++ ;
System.out.println(“count = ” + count) ;
}
实现SingleThreadModel接口Q可以解军_U程问题Q?/span>
8. 什么是servletqo(h)器?
也是一?/span>javac,只是它实C(jin)Filterq个接口Q?/span>
9. servletqo(h)器的生命周期Q?/span>
初始化:(x)自动调用init(FilterConfig config)Ҏ(gu)
执行Q自动调?/span>doFilter()Ҏ(gu)Q?/span>
销毁:(x)自动调用destory()Ҏ(gu)Q?/span>
10. servletqo(h)器有什么用途?
个h认ؓ(f)目前自己用到的Servletqo(h)器的主要用途:(x)是安全性检?/span>
当然qo(h)器在Servlet之前也可以修改请求,要是?/span>Servlet之后Q也可以修改响应Q?/span>
11. servletqo(h)器怎样部vQ?/span>
?/span>web.xml中:(x)
<web-app>
<filter>
<filter-name>myFilter</filter-name>
<filter-class>filterPage.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/Todd/*</url-pattern>
</filter-mapping>
</web-app>
q样是说要讉KWEB-INF下的Todd包下?/span>jsp?/span>Servlet的话Q就必须要先通过myFilterq个c;