2008/5/30

WebMethod安裝手順






















WEBMETHOD安裝
一、安裝WEBMETHOD
1.執行webMethodsInstaller61.exe

2.第一個畫面當中,先選擇「Advanced Options」->「use installtion image」->「install from image」->「Browse」->選擇「Liteon_601_Image(Windows)」,確定之後,按下一步

3.選擇安裝路徑後,下一步

4.選擇要安裝的components,下一步

5.選擇語系,下一步

6.安裝結束後,出現一個WebMethod安裝過的components

7.開始安裝

8.安裝完成

9.將TNS_6-0-1_Fix39.jar(PATCH)複製到\updates下

10.修改\packages\WmTN\config 新增(修改)此筆tn.server.seq=31

二、安裝DB安裝SQLSERVER2000 步驟省略

三、設定環境(設定WebMethods Log環境)


1.將\common\db\scripts\create當中的create_archive_TN_6-0-1_SQLServer.sql、create_processaudit_6-0-1_SQLServer.sql、create_xref_6-0-1_SQLServer.sql、create_TN_6-0-1_SQLServer.sql、create_iscoreaudit_6-0-1_SQLServer.sql依照順序建立TABLE

2.啟動webMethods Integration Server

3.啟動後,執行http://:5555

4.「Settings」->「JDBC Pools」

5.「Create a new Pool Alias Definition」->

Alias Name:Sql-server200

Alias Description:connect to SQL SERVER

Associated Driver Alias:DataDirect Connect JDBC SQL Server Driver

Database URL:jdbc:wm:sqlserver:://127.0.0.1:1433;DatabaseName=weblog;SelectMethod=cursor

User Id:(username)

Password:(user password)

按下「Save Setting」儲存

6.「Functional Alias Definitions」->「Edit」->「Edit Association」

7.「Associated Pool Alias」->「Sql-server200」,按下「Save Setting」儲存

8.「Functional Alias Definitions」->「」,測試連線

9.設定DB時,出現下列問題時,解決方法:

(1)ORACLE:

出現invalid URL時,「Driver Alias Definitions」->「Edit Driver Alias」,更改ORACLE的「Class name」

出現No suitable Driver時,將<IS_DIR>\bin\server.bat,將CLASSPATH指定到ORACLE的JDBC DRIVER的路徑

(2)SQL SERVER2000:

出現transaction exception時,將「Pool Alias Definition」當中的Database URL增加一段「;SelectMethod=cursor」

出現找不到javax/sql/datasource時,把<IS_DIR>\packages\WmJDBCAdapter\code\jars\javaxsql.zip複製到<IS_DIR>\lib\jars

10.執行http://:5555,點選「Settings」->「Extended」->「Edit Extended Settings」,將此段加上

watt.server.auditLog=perSvc

watt.server.auditStore=database

watt.server.compile=\bin\javac -classpath {0} -d {1} {2}

watt.server.compile.unicode=\bin\javac -encoding Unicode -classpath

11.


















WEBMETHOD接收WEBMETHOD傳送過來的資料
一、啟動環境
1.啟動webMethods Integration Server

2.啟動webMethods Modeler、webMethods Trading Networks Console

二、建立My EnterPrise、partner profile
「webMethods Trading Networks Console」->「Tools」->「profile assistant」,建立公司資訊以及partner資訊

三、安裝發送端程式
1. 將DarfonCR.zip(發送主service)複製到\replicate\inbound

2. PIPs1A99V0100.par (發送協定)複製到\packages\WmRosettaNet \import

3. 啟動IS,執行http://:5555

4. 在網頁上「Packages」-> 「Management」->「Install Inbound Releases」安裝DarfonCR.zip

5. 在網頁上「Adapters」->「RosettaNet」->「PIP Import」安裝PIPs1A99V0100 .par

6. 在網頁上「Adapters」->「RosettaNet」->「JDBC Adapter」查看DarfonCR:SQLConnection,是否為

log4j 配置詳解

log4j 配置詳解 - [log4j]

版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://huahuazhu.blogbus.com/logs/20920245.html

log4j配置文件有三個主要的組件:Logger,Appender和Layout,分別為日誌類型,日誌輸出目的地,日誌輸出格式。
log4j.rootLogger = [level], appenderName, appenderName, ... (level是錯誤級別,appenderName是輸出目的地,本例設為mylog,可以定義多個)
level優先級分別為FATAL、ERROR、WARN、INFO、DEBUG 5個級別.通過定義的級別,你可以控制程序中的日誌輸出.比如在這裡定義了ERROR級別,程序中只有FARAL、ERROR 級別的LOG會被輸出.
log4j.appender.mylog= 輸出目的地 (這裡的appenderName是在前面定義的,可任意起名)
Log4j提供的輸出目的地有以下幾種:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
org.apache.log4j.RollingFileAppender(文件到達指定大小時產生一個新文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任何地方)

log4j.appender.filelog.File=your file dir
log4j.appender.filelog.MaxFileSize=your filesize
log4j.appender.mylog.MaxBackupIndex=num設置保存備份文件數量

log4j.appender.appenderName.layout = 佈局類型(設置佈局類型)
Log4j提供的layout有以下4種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
如果使用PatternLayout佈局就要指定的打印信息的具體格式ConversionPattern,打印參數如下:
%m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的線程名
%n 輸出一個回車換行符,Windows為"rn",Unix為"n"
%d 輸出日誌時間,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出:2007年5月17日 19:30:00,000
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數
[QC]是log信息的開頭,可以為任意字符,一般為項目簡稱

程序中並沒有直接用到log4j的類,而是使用了commons-logging提供的日誌類。commons-logging是為"所有的Java日誌實現"提供一個統一的接口,它的功能據說「平常弱」。
Log (基本記錄器)和LogFactory(負責創建Log實例)。當commons-logging.jar被加入到CLASSPATH之後,它會合理地猜 測你喜歡的日誌工具,然後進行自我設置,用戶根本不需要做任何設置。默認的LogFactory是按照下列的步驟去發現並決定那個日誌工具將被使用的(按 照順序,尋找過程會在找到第一個工具時中止):
1.尋找當前factory中名叫org.apache.commons.logging.Log配置屬性的值
2.尋找系統中屬性中名叫org.apache.commons.logging.Log的值
3.如果應用程序的classpath中有log4j,則使用相關的包裝(wrapper)類(Log4JLogger)
4.如果應用程序運行在jdk1.4的系統中,使用相關的包裝類(Jdk14Logger)
5.使用簡易日誌包裝類(SimpleLog)

java Out Of Memory

版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://big360.blogbus.com/logs/17205480.html

來自:BlogJava-首頁技術區 作者: tacy lee 發表時間:昨天22:38:00

某項目,年前開始報OOM,頻率保持在一月一次,發生OOM的時候,heap free size還有7~800M,比較奇怪,年後系統上集群,系統發生OOM的頻率開始變得頻繁,基本在4-5天,由於用的是sun jdk 1.4.2_08,無法獲取到heap dump,建議用戶升級到1.4.2_14(該版本以後sun添加了HeapDumpOnOutOfMemoryError參數,便於獲取dump幫助診 斷該類問題),4天之後,我們獲取到了heapdump文件,通過對dump的分析,基本上排除了對象洩漏。

根據環境(64bit Solaris + 32bit JDK),客戶把Heap最大設置為2G,開始懷疑32bit JDK無法分配這麼大的Heap,經過驗證,不存在這樣的問題(sun網站也有相關說明,在solaris 64bit系統上,32bit jdk最大可以設置到4G)

但是從dump看到application classes loader大小已經到了60M以上,有點懷疑Perm區設置太小導致,查了一下sun的文檔,Perm區缺省大小為64M,估計是應用加載太多classes導致Perm區溢出,

我們也簡單模擬了一下Perm溢出,強制設置max perm大小為32M,並對GC進行了監控,結果和我們預想的一致,看下面的gc log:

151.836: [Full GC 151.836: [Tenured: 25735K->25736K(1048576K), 0.8380858 secs] 25911K->25736K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8382804 secs]
152.676: [Full GC 152.676: [Tenured: 25736K->25722K(1048576K), 0.8464782 secs] 25752K->25722K(1557568K), [Perm : 32767K->32766K(32768K)], 0.8466638 secs]
153.525: [Full GC 153.525: [Tenured: 25722K->25724K(1048576K), 0.8419056 secs] 25738K->25724K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8420986 secs]
154.368: [Full GC 154.368: [Tenured: 25724K->25724K(1048576K), 0.8398816 secs] 25724K->25724K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8400498 secs]
155.212: [Full GC 155.212: [Tenured: 25724K->25725K(1048576K), 0.8365448 secs] 25788K->25725K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8367370 secs]
156.050: [Full GC 156.050: [Tenured: 25725K->25722K(1048576K), 0.8422488 secs] 25725K->25722K(1557568K), [Perm : 32767K->32766K(32768K)], 0.8424328 secs]
156.895: [Full GC 156.895: [Tenured: 25722K->25724K(1048576K), 0.8443532 secs] 25738K->25724K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8445450 secs]
157.740: [Full GC 157.741: [Tenured: 25724K->25724K(1048576K), 0.8427754 secs] 25740K->25724K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8429634 secs]
158.587: [Full GC 158.588: [Tenured: 25724K->25726K(1048576K), 0.8352290 secs] 25820K->25726K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8354212 secs]
159.424: [Full GC 159.424: [Tenured: 25726K->25723K(1048576K), 0.8435336 secs] 25726K->25723K(1557568K), [Perm : 32767K->32766K(32768K)], 0.8437092 secs]
160.270: [Full GC 160.270: [Tenured: 25723K->25725K(1048576K), 0.8477722 secs] 25739K->25725K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8479596 secs]
161.119: [Full GC 161.119: [Tenured: 25725K->25725K(1048576K), 0.8543338 secs] 25725K->25725K(1557568K), [Perm : 32767K->32767K(32768K)], 0.8545040 secs

從日誌看,和我們現場的狀況非常相似,heap空間充足,但是perm已經到了32M,無法再進一步分配 空間,直接導致jvm頻繁做Full GC,控制台也開始拋出OOM(Perm引起的回收都是full gc),這樣看基本我們判斷是Perm太小,導致無法加載classes導致的

和客戶溝通之後,我們本來打算進一步驗證(在生產環節打 開PrintGCDetail,獲取詳細的GC log),後面仔細檢查nohup.out,發現裡面已經拋出了 OutOfMemoryError:PermGen Space,至此我們確定是Perm設置不合理導致了本次事故,和客戶確認之後,我們在啟動參數中加上了MaxPermSize

後面想到中間上了集群之後,eos加載了大量的jboss cache class,這也直接解釋了為什麼這段時間OOM出現的頻率比之前更頻繁的原因

這裡總結一下,希望對碰到類似問題的tx有借鑑意義,強烈建議用sun jdk 1.4.2的同學升級到>=1.4.2_12,便於對OOM問題的診斷,並加上GC log協助驗證。

這裡再介紹一下JVM發生OOM的幾種情況:

1、java.lang.OutOfMemoryError: Java heap space

這是我們平常理解的OOM,是由於heap space確實沒有空間分配,這種一般是由於內存洩漏導致,也有可能是heap space設置太小。需要具體分析

2、java.lang.OutOfMemoryError: PermGen space

jvm 規範裡面有定義一個method space,這裡主要放classes和method list和一個string pool,string有一個intern方法,通過這個方法定義的string都放在這裡(好像不常用),這裡設置不太小會導致OOM,缺省64M,主 要由於現在應用依賴的第三方類越來越多,導致這類問題頻繁發生,需要引起重視

3、Requested array size exceeds VM limit
這種是由於申請的array size超出了heap space大小,比如在一個256M的heap space中申請一個512M的array,這種基本都是應用bug導致

4、request bytes for . Out of swap space?
這種是由於heap size設置相對於系統物理內存太大,導致系統swap space不足,這種的解決辦法就是減小heap size大小

5、 (Native method)
這種估計是最麻煩的了,也是最少碰到的,是由於jni或native method導致,如果自己沒有寫這類的東西,基本可以說是jdk問題

2008/5/29

無法在x-window上執行JAVA APP

結果在執行oracle10g R2這版的runInsaller時,
出現了「xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed.」這樣的錯誤訊息!

這是java執行引用xlib函式庫的問題,而oracle安裝的介面,不巧正是java寫的。
為了讓我oracle資料庫能順利安裝到Fedora 8,找了些文件!

解決的辦法是:
1.先以root更新xlib的一個函式庫
yum --enablerepo=development update libxcb

2.再回到oracle安裝帳號的環境裡,設定一個變數
export LIBXCB_ALLOW_SLOPPY_LOCK=1

AIX上UTF-8轉換

Problem_________________________________________________
UTF-8 <-> EBCDIC

Solution_________________________________________________

在AIX上,要將UTF-8碼轉成EBCDIC碼,有二種方式,一個是執行iconv utility,另一個是呼叫iconv函數.

方法如下:

1.執行iconv utility:

1-1.UTF-8碼->EBCDIC碼
iconv -f UTF-8 -t IBM-937 data.utf-8 > data.ebcdic

1-2.EBCDIC碼->UTF-8碼
iconv -f IBM-937 -t UTF-8 data.ebcdic > data.utf-8

其中,data.utf-8為含UTF-8碼的資料檔,data.ebcdic為含EBCDIC碼的資料檔.

假如內碼是big5,可用:

1-3.BIG5碼->EBCDIC碼
iconv -f big5 -t IBM-937 data.big5 > data.ebcdic

1-4.EBCDIC碼->BIG5碼
iconv -f IBM-937 -t big5 data.ebcdic > data.big5

請注意:AIX v4及v5目前都不支援BIG5E字集.

2.呼叫iconv函數:

請參閱:

Writing Converters Using the iconv Interface - General Programming Concepts: Writing and Debugging Programs

http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/genprogc/writing_converters_iconv_interface.htm#DBBDE39665mela
(See attached file: AIX_Writing Converters Using the iconv Interface.mht)

如果,您對AIX的Codeset有興趣的話,請參考:

Code Set Overview - General Programming Concepts: Writing and Debugging Programs

http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/genprogc/codeset_over.htm
(See attached file: AIX_Code Set Overview.mht)

Adapter 安裝時出現的錯誤:BIA01002

BIA01002: You have attempted to install IBM WebSphere Business Integration Adapter
for on an unsupported platform.
Refer to the Installation Guide for WebSphere Business Integration Adapters.
Cause
This is because these products did not support Windows XP or Vista platforms
at the time the products were released.

The product installers have built-in platform checks that prevent users
from installing on unsupported platforms.

To bypass the installer platform check, follow these steps:
1. Open a Command Prompt. (Click Start->Run and
then type cmd and click "OK".)
2. Change directories to the directory
where the installer.exe file is located.
3. Type: setupwin32 -W unsupportedPlatform.active=false

Alternatively, if you want to start the installer using Java®,
type:
java -jar setup.jar -W unsupportedPlatform.active=false

Cross Reference information Segment

ICS for linux 安裝手順

ICS
等以後有空,再來重新排版吧
rpm -ivh IBMJava2-142-ia32-SDK-1.4.2-10.0.i386.rpm
export JAVA_HOME=/opt/IBMJava2-142
exprot CLASSPATH=/JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export EXTSHM=ON
DB2
//新增使用者icsadmin 群組:mqm
//解開DB2
cd 009_ESE_LNX_32_NLV/
export LIBXCB_ALLOW_SLOPPY_LOCK=1
//----------installing--------
Su – db2inst1
db2set DB2ENVLIST=EXTSHM
db2set DB2_EXTENDED_OPTIMIZATION=ON
db2set DB2_DISABLE_FLUSH_LOG=ON
db2set AUTOSTART=YES
db2set DB2_STRIPED_CONTAINERS=ON
db2set DB2_HASH_JOIN=Y
db2set DB2COMM=tcpip
db2set DB2_PARALLEL_IO=*
db2set db2codepage = 1208
//#Update dbm cfg
db2 update dbm cfg using SVCENAME db2inst1
db2 update dbm cfg using INDEXREC ACCESS
db2start
----------建立icsrepos DB-----------
DB2 Control Center-->db2inst1-->配置參數-->應用程式-->maxagents>50
DB2 Control Center-->icsrepos-->配置參數-->配置資料庫-->效能-->applheapsz=4096
DB2 Control Center-->icsrepos-->配置參數-->配置資料庫-->應用程式-->maxappls=50
----------建立icsrepos DB-----------
db2
CONNECT TO ICSREPOS;
GRANT DBADM,CREATETAB,BINDADD,CONNECT, CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA, LOAD, CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT ON DATABASE TO USER ICSADMIN

//還要再研究
ICSSIT43:/home/db2inst1 #db2 catalog tcpip node icslog remote ICSSIT43 server icsdb2
ICSSIT43:/home/db2inst1 #db2 catalog database icsrepos as icsdb at node icslog
//還要再研究

db2set DB2_RR_TO_RS=yes





MQ
mkdir /var/mqm
useradd mqm -G mqm -d /var/mqm
./mqlicense.sh –accept

rpm -ivh MQSeriesRuntime-6.0.0-0.i386.rpm
rpm -ivh MQSeriesSDK-6.0.0-0.i386.rpm
rpm -ivh MQSeriesSamples-6.0.0-0.i386.rpm
rpm -ivh MQSeriesServer-6.0.0-0.i386.rpm
rpm -ivh MQSeriesClient-6.0.0-0.i386.rpm
rpm -ivh MQSeriesJava-6.0.0-0.i386.rpm
cd 6.0.2.1/
rpm -Uvh MQSeriesRuntime-U808001-6.0.2-1.i386.rpm
rpm -Uvh MQSeriesSDK-U808001-6.0.2-1.i386.rpm
rpm -Uvh MQSeriesSamples-U808001-6.0.2-1.i386.rpm
rpm -Uvh MQSeriesServer-U808001-6.0.2-1.i386.rpm
rpm -Uvh MQSeriesClient-U808001-6.0.2-1.i386.rpm
rpm -Uvh MQSeriesJava-U808001-6.0.2-1.i386.rpm

//*
export LD_ASSUME_KERNEL=2.4.19
/source/MQ/CSD11 # cd /source/MQ
/source/MQ # cp ma0c_linux.tar /
/source/MQ # cd /
/ # tar vxf ma0c_linux.tar
/ # su -mqm
/ # dspmqcap
/ # setmqcap 1
*/

crtmqm ICSSIT43.queue.manager
cd /var/mqm/qmgrs/ICSSIT43\!queue\!manager/
vi qm.ini
LogPrimaryFiles=62
LogFilePages=2048
LogBufferPages=128
#Add
Channels:
MaxChannels=1000
MaxActiveChannels=1000
Broker:
SyncPointIfPersistent=yes
#(end)

//作法一:
strmqm ICSSIT43.queue.manager
nohup runmqlsr -t tcp -p 1415 -m ICSSIT43.queue.manager &
strmqbrk -m ICSSIT43.queue.manager
vi /var/mqm/conv/table/ccsid.tbl
default 0 500 1 1 0
default 0 850 1 2 0
(unmark #)
runmqsc ICSSIT43.queue.manager < MQJMS_PSQ.mqsc
//作法二:
看書吧

WebSphere MQ V5.3 加入MQ Explorer
一、 啟動MQ Qmgr
1. 以mqm telnet進WebSphere MQ Server
2. 輸入已下指令啟動QMGR
$ strmqm [QMGR Name]
Ex:$ strmqm bcg.queue.manager
3. 輸入已下指令啟動Command Server
$ strmqcsv [QMGR Name]
Ex:$ strmqcsv bcg.queue.manager

二、 登入MQ Command Server
1. 以mqm telnet進WebSphere MQ Server
2. 輸入已下指令登入MQ Command Mode
$ runmqsc [QMGR Name]
Ex:$ runmqsc bcg.queue.manager
3. 輸入已下指令新增MQ管理Channel
DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER(‘mqm’)
4. 輸入已下指令確認MQ之CCSID與MQ Explorer相同
DISPLAY QMGR

IBM WebSphere Business Integration Information Center

Welcome to the IBM WebSphere Business Integration Information Center

-------------------------------------------------------
Use this IBM(R) WebSphere(R) Business Integration Information Center to view any of the following documentation sets, when installed:
  • IBM WebSphere Business Integration Adapters
  • IBM WebSphere Business Integration Collaborations
  • IBM WebSphere Business Integration Express for Item Syncronization Version 4.3.1
  • IBM WebSphere Business Integration Toolset Version 4.3
  • IBM WebSphere InterChange Server Version 4.3


Download the documentation
You can download complete documentation sets for the above from their product Information Centers:

LINUX-密碼長度問題

轉貼自
http://forum.icst.org.tw/phpBB2/viewtopic.php?p=41687

在LINUX設定密碼,在新增使用者,需要新增設密碼,在安全考量下,需要限制密碼長度,跟複雜度.
請想問一下,密碼須要有大小寫以及加入特殊服號在裡面,請問一下要如何設定?

PS我只有之道在 /etc/login.defs 下可以設定長度.

1. 安裝 libpam-cracklib
2. 修改 /etc/pam.d/login
將這一行
password required pam_unix.so nullok obscure min=4 max=8 md5
換成這兩行
password required pam_cracklib.so retry=3 minlen=6 difok=3 dcredit=1 ucredit=1 lcredit=1 ocredit=1
password required pam_unix.so use_authtok nullok md5

對於root沒有強制性只會警告
對於一般user會強制檢查通過才能變更密碼

參考
http://blog.chinaunix.net/u/5724/showart_218162.html
http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_cracklib.html

2008/5/28

防護SQL的產品

https://www.sentrigo.com/sysreq.htm?loc=rs

這是朋友推薦要去看的網站
裡面會針對各種可能的SQL攻擊,先作防護

看起來,要找時間來好好的研讀了

[教學]如何移除XP中的Windows Messenger?

[教學]如何移除XP中的Windows Messenger?
已經安裝了網路上下載的MSN Messenger,可是Windows XP中的Windows Messenger還是留著,
真是非常煩人,有時還會不小心使用了Windows Messenger,可以依照下面的步驟,
把預設的Windows Messenger移除:

1. 按一下「開始」功能表→「執行」
2. 輸入「RunDll32 advpack.dll,LaunchINFSection %windir%\INF\msmsgs.inf,BLC.Remove」
3. 重新啟動電腦

文章來源:
http://163.20.92.138/webupload/shes/...9F.htm#c307127
經過實際測試,這個方法在WinXP SP2上是有效的喔!

Web中避免Form重複post的方法[轉載]

[轉載] http://www.mldn.cn/articleview/2007-4-11/article_view_1974.htm

Web應用中重複提交的問題的三種解決方案
前兩種是利用javascript,後面一種是在使用Struts的情況下的參考實現


1 javascript
,設置一個變數,只允許提交一次。




2
還是javascript,將提交按鈕或者image置為disable





3
利用struts的同步權杖機制


利用同步權杖(Token)機制來解決Web應用中重複提交的問題,Struts也給出了一個參考實現。


基本原理:
伺服器端在處理到達的請求之前,會將請 求中包含的權杖值與保存在當前用戶會話中的權杖值進行比較,看是否匹配。在處理完該請求後,且在答覆發送給用戶端之前,將會產生一個新的權杖,該權杖除傳 給用戶端以外,也會將用戶會話中保存的舊的權杖進行替換。這樣如果用戶回退到剛才的提交頁面並再次提交的話,用戶端傳過來的權杖就和伺服器端的權杖不一 致,從而有效地防止了重複提交的發生。

if (isTokenValid(request, true)) {
// your code here
return mapping.findForward("success");
} else {
saveToken(request);
return mapping.findForward("submitagain");}

Struts根據用戶會話ID和當前系統時間來生成一個唯一(對於每個會話)權杖的,具體實現可以參考


TokenProcessor
類中的generateToken()方法。
1. //
驗證事務控制權杖,會自動根據session中標識生成一個隱含input代表權杖,防止兩次提交
2.
action中:

//35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
resetToken(request); //
刪除session中的權杖


3. action
有這樣的一個方法生成權杖
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}


java日期加減法[轉載]

不同處只有翻成繁中的部分

有些時候,我們想在當前的日期上加幾天、幾個月,或幾年,使用java.util.Date,卻總也找不到合適的方法,無奈之下,請一個高人幫忙,老劉給了一句話:使用Canlender。之後,我就使用Calender,一用,還真好用,就寫出來,和大家共同分享:

² 我的需求

我在作一個調查問卷,想設定問卷的有效天數:在發佈之日後30天之內有效,怎麼實現呢?

² 我的實現

/*
* @author
張毅
* 2005-12-14
*/
Calendar calendar = Calendar.getInstance();
//getTime()
方法是取得當前的日期,其返回值是一個java.util.Date類的對象
res.setResOpenDate(calendar.getTime());
int day = calendar.get(Calendar.DAY_OF_YEAR);
calendar.set(Calendar.DAY_OF_YEAR, day + 30);
//
投票的有效期30
res.setResEndDate(calendar.getTime());

² 詳細說明
Calendar
java.util.* 中的一個類,所以在使用前,我們要導入包java.util.*;
//
產生一個日曆類的物件,我們不能使用new Calendar()來構造實例,因為//Calendar的構造函數都是protected,也就是說,構造函數是保護成員。

關於CalendarFiled

Calendar中定義了日曆的各個成員,比如:年,月,日,包括不同的記錄方法,比如:同一天(2005-12-14)來說,在記錄的時候,我們可以說是一週中的週三,是12月的第14天,是2005年的第****(你可以自己算一下)天。這就是不同的記錄方法,所以在Calendar中就有了不同的定義:

public final static int ERA = 0;
public final static int YEAR = 1;
public final static int MONTH = 2;
public final static int WEEK_OF_YEAR = 3;
public final static int WEEK_OF_MONTH = 4;
public final static int DATE = 5;
public final static int DAY_OF_MONTH = 5;
public final static int DAY_OF_YEAR = 6;
public final static int DAY_OF_WEEK = 7;
public final static int DAY_OF_WEEK_IN_MONTH = 8;
public final static int AM_PM = 9;
public final static int HOUR = 10;
public final static int HOUR_OF_DAY = 11;
public final static int MINUTE = 12;
public final static int SECOND = 13;

這些定義是不同記錄方法的標識,在此我沒有列舉完全,感興趣的話你可以看一下Calendar的源代碼。


這些就是CalendarField,根據你的不同需求就可以去處不同的Field,不同的記錄方法也是不同的的Filed,這樣應該是好理解一些。


有了這些,我們就可以取得你想要的任何需要的東西了,如果你想知道今天是一年中的哪一天,就可以用:


int day = calendar.get(Calendar.DAY_OF_YEAR);


參數就是你想取得的Field,所有的這些都在Calendar中定義好了。
結果會告訴我們2005-12-142005年的第348天。
然後你想知道30天后是幾號呢?


calendar.set(Calendar.DAY_OF_YEAR, day + 30);



所以你再取得其日期的時候就可以知道其日期了。當然你也可以直接通過Calendar來取得。
其他的我就不一一說了,是一樣的道理。這樣一來,我們就可以使用Calendar實現日期的隨意加減了。
以上是我的個人體會,如果你有更好的認識,不妨大家共用。不足之處,還望觀者指點。

在這,你不需要去考慮12-14號加上30天是一月,是不是會出錯,不會的,Calendar自己知道那一天是幾月幾號。

Apache vs Tomcat(比較,整合,差別)

轉載自
http://www.soezblog.com/plate/group/web/papermsg.jsp?UI=markcool&GI=47&CI=1&p=2&PI=531

本質區別:
1)apache支援靜態頁面;
tomcat支援動態頁面,比如servlet等。
2)apache是web(http)伺服器,它是專門用於提供HTTP服務,以及相關配置的(例如虛擬主機、URL轉發等等)tomcat是應用 (java)伺服器,它只是一個servlet(jsp)容器,可以認為是apache的擴展,但是可以獨立於apache運行。

3)apache是一輛卡車,上面可以裝一些東西如html等。但是不能裝水,要裝水必須要有容器(桶),而這個桶也可以不放在卡車上。

使用區別:
tomcat 作為 jsp,servlet 容器,雖然有靜態解析功能,但性能上與 apache 相比相差很遠。
apache 可以運行一年不重啟,穩定性非常好,而 tomcat 則不見得。

整合:
一般使用apache+tomcat的話,apache只是作為一個轉發,對jsp的處理是由tomcat來處理的。

整合的好處是:
如果用戶端請求的是靜態頁面,則只需要Apache伺服器回應請求,apache 解析 html 等靜態網頁非常快,是經過無數測試證明的。
如果用戶端請求動態頁面,則是Tomcat伺服器回應請求。
因為jsp是伺服器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷。


其他:
Tomcat是Apache組織在符合J2EE的JSP、Servlet標準下開發的一個JSP伺服器

給 Tomcat 配置gzip壓縮(HTTP壓縮)功能

轉貼自http://www.soezblog.com/plate/group/web/papermsg.jsp?UI=markcool&GI=47&CI=&p=1&PI=4777

HTTP
壓縮可以大大提高流覽網站的速度,它的原理是,在用戶端請求網頁後,從伺服器端將網頁檔壓縮,再下載到用戶端,由用戶端的流覽器負責解壓縮並 流覽。相對於普通的流覽過程HTML ,CSS,Javascript , Text ,它可以節省40%左右的流量。更為重要的是,它可以對動態生成的,包括CGIPHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率驚人

一,對於Tomcat5.0以後的版本是支援對輸出內容進行壓縮的. 使用的是gzip壓縮格式

下面是tomcat5.5.20 中的$tomcat_home$/conf/server.xml的原內容

1 < Connector port ="80" maxHttpHeaderSize ="8192"
2 maxThreads ="150" minSpareThreads ="25" maxSpareThreads ="75"
3 enableLookups ="false" redirectPort ="8443" acceptCount ="100"
4 connectionTimeout ="20000" disableUploadTimeout ="true" URIEncoding ="utf-8" />
5
7
8


從上面的8內容可以看出,要使用gzip壓縮功能,你可以在Connector實例中加上如下屬性即可
1) compression="on"
打開壓縮功能
2) compressionMinSize="2048"
啟用壓縮的輸出內容大小,這裡面默認為2KB
3) noCompressionUserAgents="gozilla, traviata"
對於以下的流覽器,不啟用壓縮
4) compressableMimeType="text/html,text/xml"
 壓縮類型

我這裡的配置內容為:

1 <Connector port="80" maxHttpHeaderSize="8192"
2 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
3 enableLookups="false" redirectPort="8443" acceptCount="100"
4 connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8"
5 compression="on"
6 compressionMinSize="2048"
7 noCompressionUserAgents="gozilla, traviata"
8 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />

JBoss 的 3種啟動方式

轉貼自http://www.soezblog.com/plate/group/web/papermsg.jsp?UI=markcool&GI=47&CI=22&p=1&PI=675


1.前言

  在JBoss預設的情況下,JBoss可以用3種方式啟動,分別為 minimal, default 和 all。

  這3種啟動模式分別對應在 JBOSS_HOME/server 的目錄之下。

  如果按照正常的啟動模式,JBoss會啟動default的模式。不同的啟動方式,會載入不同的模組與部署檔。

2.執行JBoss

  你可以執行 JBOSS_HOME/bin/run.bat 批次檔,在預設的情況下,會部署 default 的內容。

  如果想用其它模式啟動,你可以在[捷徑]或[命令提示定元]中,執行:

  run.bat -c all    ,以 all 模式啟動。
  run.bat -c minimal  ,以 minimal 模式啟動。

以下是啟動之後的視窗。

3.部置其它的JBoss伺服器。

  一般預設為 minimal, default 和 all 三種模式,但如果自己想要自行定義
伺器。

  你可以在 JBOSS_HOME/server/ 目錄下,增加自己所定義的伺服器,

  例如,建立 JBOSS_HOME/server/self 的目錄,這樣就建立 self的伺服器名,然放入自己想部署的模組內容(假如目前並沒有自己想部署的內容,那沒有關係,我們可以先將minimal目錄下的內容,全複製到 self 的目錄下,當做是內容的部署)

  部置完畢之後,執行 run.bat -c self 就可以啟動 self的內容了

ps1.部署的內容,可以參考 minimal, default 和 all 的部署內容,當然,如果有個別的需要,就要自行調整)

ps2.JBOSS_HOME/server/self/deploy/ 是web 專案所運作的目錄,你的專案程式,就是放在這之中。

jboss 簡單虛擬主機的設定

轉貼自http://www.soezblog.com/plate/group/web/papermsg.jsp?UI=markcool&GI=47&PI=571

server.xml



jboss-web.xml


/
www.mj543.com

jboss 的啟動方式

轉貼自http://www.soezblog.com/plate/group/web/papermsg.jsp?UI=markcool&GI=47&CI=22&p=1&PI=967

1.前言

  在JBoss預設的情況下,JBoss可以用3種方式啟動,分別為 minimal, default 和 all。

  這3種啟動模式分別對應在 JBOSS_HOME/server 的目錄之下。

  如果按照正常的啟動模式,JBoss會啟動default的模式。不同的啟動方式,會載入不同的模組與部署檔。

2.執行JBoss

  你可以執行 JBOSS_HOME/bin/run.bat 批次檔,在預設的情況下,會部署 default 的內容。

  如果想用其它模式啟動,你可以在[捷徑]或[命令提示定元]中,執行:

  run.bat -c all    ,以 all 模式啟動。
  run.bat -c minimal  ,以 minimal 模式啟動。

以下是啟動之後的視窗。

3.部置其它的JBoss伺服器。

  一般預設為 minimal, default 和 all 三種模式,但如果自己想要自行定義
伺器。

  你可以在 JBOSS_HOME/server/ 目錄下,增加自己所定義的伺服器,

  例如,建立 JBOSS_HOME/server/self 的目錄,這樣就建立 self的伺服器名,然放入自己想部署的模組內容(假如目前並沒有自己想部署的內容,那沒有關係,我們可以先將minimal目錄下的內容,全複製到 self 的目錄下,當做是內容的部署)

  部置完畢之後,執行 run.bat -c self 就可以啟動 self的內容了

ps1.部署的內容,可以參考 minimal, default 和 all 的部署內容,當然,如果有個別的需要,就要自行調整)

ps2.JBOSS_HOME/server/self/deploy/ 是web 專案所運作的目錄,你的專案程式,就是放在這之中。

系統時間(javaScript+Jsp)

轉貼自http://www.soezblog.com/plate/group/web/papermsg.jsp?UI=markcool&GI=47&CI=&p=1&PI=957




在Linux上實現DB2雙機HA完整方案

轉貼自http://202.99.120.116:82/gate/big5/publish.it168.com/2006/0121/20060121002501.shtml

1. 摘要

  本文檔介紹在SuSE Linux Enterprise Server v8.0(SLES 8)上安裝配置DB2 UDB Enterprise Serverv8.2雙機互備的高可靠性方案的基本步驟。該方案配合採用SLES的卷管理器(LVM)和Veritas Cluster Server v2.2(VCS 2.2)作為HA實現組件。

2. 概述

 本文檔假定讀者已經理解雙機互備的HA方案的基本概念。

2.1. 雙機互備HA方案的基本步驟

  建立一個雙機互備方案的基本步驟是:

1. 確定基本參數(如IP地址、存儲空間,等等。本方案的參數均為示範參數,讀者需要根據實際環境替換)
2. 配置共用存儲(本方案不涉及共用存儲方案的配置)
3. 在兩台節點上分別安裝應用(在本方案中是 DB2 UDB)
4. 在一台節點上對應用作初始配置(在本方案中是在共用存儲上建立 DB2 數據庫)
5. 在另一台節點上引入共用存儲上的配置(在本方案中是對共用存儲上的數據庫做catalog操作)
6. 在兩台節點上分別手動測試應用
7. 配置HA Cluster管理軟體(在本方案中是VCS)
8. 測試HA Cluster管理軟體可以成功接管資源


2.2. 假設

  本文檔假定採用以下示例環境,SLES與VCS已在節點上正確安裝,SLES的共用存儲已經正確連接,VCS的心跳連接已經正確配置。

2.2.1. 存儲

  各節點上需要足夠的本地磁片空間,來安裝 DB2 UDB的可執行代碼及實例。

  本方案需要足夠的共用存儲空間,來放置數據庫數據。

  假定共用存儲上分配給 DB2 數 據庫的卷組名為/dev/datavg1,邏輯卷名為/dev/datavg1/db2lv1(使用SLES的LVM服務),在兩個節點上的挂接點名為 /home/db2data,且已正確格式化為合適的文件系統(Veritas工程師指出在SLES 8上VCS 2.2不支援ext3文件系統,建議格式化時指定ext2,在SLES 9和VCS 4.1上不存在這個問題)。注意這個挂接點要在fstab文件中配置為啟動時不自動挂接。

  數據庫其他表空間可以建立在共用存儲的其他卷上,如果是文件系統,同樣要配置為不自動挂接。本文檔暫不討論。

2.2.2. 節點

  本HA方案採用兩個伺服器節點做主從互備,以下分別稱為Active節點和Passive節點。這兩個節點具有相同的硬體和作業系統配置。

2.2.3. 網路

  對外的IP網路。假定該方案中 DB2 UDB對外提供服務使用的浮動IP(Floating IP)為192.168.10.110,Active節點的物理IP為192.168.10.11,Passive節點的物理IP為192.168.10.12。

 HA管理軟體需要一組內部IP來管理雙機間的心跳連接。心跳IP不在本文檔範圍內。

3. 配置步驟

3.1. DB2 UDB安裝、配置步驟

3.1.1. 建立用戶和組

  在兩台節點上分別在root下執行以下命令:
  groupadd –g 900 db2iadm1
  groupadd –g 901 db2fadm1
  groupadd –g 902 dasadm1
  useradd –g db2iadm1 –u 800 –d /home/db2inst1 –s /bin/bash db2inst1
  useradd –g db2fadm1 –u 801 –d /home/db2fenc1 –s /bin/bash db2fenc1
  useradd –g dasadm1 –u 802 –d /home/dasusr1 –s /bin/bash dasusr1
  組ID和用戶ID可以根據實際情況選擇,但務必保證在兩台節點上相同的用戶名/組名具有相同的ID。


3.1.2. 安裝 DB2 UDB產品代碼
  在兩台節點上分別在root用戶下執行以下命令:
  cd
  ./db2install –p DB2.ESE
  cd /opt/IBM/db2/V8.1/adm
  ./db2licm –a /db2/license/db2ese.lic


  其中,是DB2 UDB ESE安裝介質所在目錄。

3.1.3. 建立實例

  在兩台節點上分別在root用戶下執行以下命令:

  cd /opt/IBM/db2/V8.1/instance

  ./db2icrt –p 50000 –u db2fenc1 db2inst1

3.1.4. 建立DAS

  在兩台節點上分別在root用戶下執行以下命令:

  cd /opt/IBM/db2/V8.1/instance

  ./dascrt –u dasusr1

3.1.5. 建立數據庫

  在Active節點上在root用戶下執行以下命令:
  mount /dev/datavg1/db2lv1 /home/db2data
  su – db2inst1
  db2start
db2 create database on /home/db2data
  db2stop
  exit
  umount /home/db2data
  其中,是數據庫名。

3.1.6. Catalog數據庫
  在Passive節點上在root用戶下執行以下命令:
  mount /dev/datavg1/db2lv1 /home/db2data
  su – db2inst1
  db2start
  db2 catalog database on /home/db2data
  db2stop
  exit
  umount /home/db2data
 其中,是上一步驟建立的數據庫名

3.1.7. 檢驗DB2配置
  在Active節點上,在root用戶下執行以下命令:
  mount /dev/datavg1/db2lv1 /home/db2data
  su – db2inst1
  db2start
  db2 connect to
  db2 create table T (ID INTEGER)
 db2 connect reset
 db2stop
  exit
 umount /home/db2data
  檢驗上述命令均無出錯資訊。

  在Passive節點上,在root用戶下執行以下命令:
  mount /dev/datavg1/db2lv1 /home/db2data
  su – db2inst1
  db2start
  db2 connect to
  db2 drop table T
  db2 connect reset
  db2stop
  exit
  umount /home/db2data
  檢驗上述命令均無出錯資訊。

3.2. VCS配置
 在VCS中,建立DB2資 源組,在組中配置浮動IP、Application等資源,將Application的啟動、停止等命令腳本配置為db2start、db2stop、 db2admin start和db2admin stop,將Application的監視命令腳本配置為ps命令,監視db2sysc和db2dasrrm進程。

DB2上機操作指令指南

轉載自http://www.wgjz.com/database/other/20070515/89348.html

DB2上機操作指令指南


3.列出所有實例(db2inst1)

db2ilist

5.列出當前實例:

db2getinstance

4.察看示例配置文件:

db2getdbmcfg|more

5.更新數據庫管理器參數信息:

db2updatedbmcfgusingpara_namepara_value

6.創建數據庫:

db2createdbtest

7.察看數據庫配置參數信息

db2getdbcfgfortest|more

8.更新數據庫參數配置信息

db2updatedbcfgfortestusingpara_namepara_value

10.刪除數據庫:

db2dropdbtest

11.連接數據庫

db2connecttotest

12.列出所有表空間的詳細信息。

db2listtablespacesshowdetail

13.查詢數據:

db2select*fromtb1

14.數據:

db2deletefromtb1whereid=1

15.創建索引:

db2createindexidx1ontb1(id);

16.創建視圖:

db2createviewview1asselectidfromtb1

17.查詢視圖:

db2select*fromview1

18.節點編目

db2catalogtcpnodenode_nameremoteserver_ipserverserver_port

19.察看端口號

db2getdbmcfg|grepSVCENAME

20.測試節點的附接

db2attachtonode_name

21.察看本地節點

db2listnodedirecotry

22.節點反編目

db2uncatalognodenode_name

23.數據庫編目

db2catalogdbdb_nameasdb_aliasatnodenode_name

24.察看數據庫的編目

db2listdbdirectory

25.連接數據庫

db2connecttodb_aliasuseruser_nameusinguser_password

26.數據庫反編目

db2uncatalogdbdb_alias

27.導出數據

db2exporttomyfileofixfmessagesmsgselect*fromtb1

28.導入數據

db2importfrommyfileofixfmessagesmsgreplaceintotb1

29.導出數據庫的所有表數據

db2movetestexport

30.生成數據庫的定義

db2look-ddb_alias-a-e-m-l-x-f-odb2look.sql

31.創建數據庫

db2createdbtest1

32.生成定義

db2-tvfdb2look.sql

33.導入數據庫所有的數據

db2movedb_aliasimport

34.重組檢查

db2reorgchk

35.重組表tb1

db2reorgtabletb1

36.更新統計信息

db2runstatsontabletb1

37.備份數據庫test

db2backupdbtest

38.恢複數據庫test

db2restoredbtest

399\.列出容器的信息

db2listtablespacecontainersfortbs_idshowdetail

40.創建表:

db2ceatetabletb1(idintegernotnull,namechar(10))

41.列出所有表

db2listtables

42.插入數據:

db2insertintotb1values(1,』sam');

db2insertintotb2values(2,』smitty');

學習筆記-DB2UDBV8.1管理學習筆記(一)

轉載自http://www.wgjz.com/database/other/20070515/89189.html

學習筆記-DB2UDBV8.1管理學習筆記(一)

目錄參考資源
在DB2中有關實例(Instance),數據庫(Database),表空間(TableSpace),容器(Container)等概念:

在一個操作系統中,DB2數據服務可以同時運行多個實例(有別於Oracle在一個系統內只能起一個實例),數據庫定義在實例中,一個實例可以包含多個數據庫。在同一個實例中的不同數據庫是完全獨立的,分別擁有自己獨立的系統編目表。

表 空間分為DMS方式和SMS(SystemmanegementSpace)方式,定義在數據庫中,一個數據庫中必須存在兩個系統基本的表空間,分別是系 統編目表空間(SysCatSpace)與系統臨時表空間(SysTempSpace)。在數據庫中創建的任何對象都以在系統編目表空間中增加記錄的方式 體現,對於臨時表空間,其佔用磁盤大小是根據使用情況動態伸縮的,即僅在需要時才分配磁盤空間,並在使用後進行回收。此外,若用戶需要創建表,則需要創建 用戶表空間(UserSpace),若需要使用臨時表,則需要創建用戶臨時表空間(UserTempSpace)。

DMS與SMS類型在表空間建立時指定,建好後不能轉換。對於DMS方式,一個表空間對應了一個或多個容器(Container),容器指定了數據的物理存儲位置。對於SMS方式,只能夠指定一個目錄,不能夠增加。

容 器分為三種類型,前兩種是文件與設備,用於DMS方式的表空間;還有一種是目錄,用於SMS方式的表空間,此種方式不需要人工管理數據存儲文件,DB2可 根據情況在目錄中自動增加存儲文件,只要磁盤空間允許。實質上,表空間是數據存儲的邏輯位置定義,容器則是數據存儲的物理位置定義。


影 響一個數據庫的性能主要有以下因素:磁盤(Disk),內存(Memory),處理器(CPU),網絡(Network)。其中以磁盤最為顯著,90%的 性能瓶頸可能來自於磁盤的IO競爭;其次是內存,一方面是指物理內存的總量要滿足需求,另一方面是指與內存相關的配置參數應正確配置;當然處理器的性能也 很重要,多路CPU會對哪些依賴計算能力的複雜SQL查詢起到顯著的效果;網絡不屬於主要因素,屬於客觀的環境因素,是指過慢的網速會對數據的傳輸造成影 響。以下列出一些對於提高數據庫性能有效的方法:

對於運行數據庫服務的服務器可以儘可能的配置多塊物理磁盤,每塊的容量不必太大,這樣可以有效的分擔數據存儲與讀取操作過程的磁盤IO競爭。即採用多塊小容量的磁盤在性能上要優於僅採用一塊大容量的磁盤。

如果條件允許,儘量使數據存儲服務與操作系統分別運行在物理分開的磁盤上。

採用DMS(DatabaseManagementSpace)管理方式的表空間。

在物理不同的磁盤上創建多個表空間。然後可以將數據和索引分別存放在不同的表空間,這樣可以顯著的提高性能。還可以把一個使用頻繁的大表縱向拆成多個小表,分別存放在不同的表空間中,然後用一個視圖進行聯合。

DB2服務器可以管理裸設備,即除系統以及DB2服務運行磁盤以外,為DB2數據存放單獨準備磁盤,可以是多塊,分區後不需要格式化,創建裸設備後直接交給DB2進行管理,用於存儲數據。

系統的臨時表空間對數據庫性能影響很大,當由管理的物理內存不能滿足數據庫操作的需要時,DB2便會把臨時數據寫到磁盤上,這時便用到了系統臨時表空間,並且這種情況會經常發生。

儘量在磁盤靠近最內層磁道的位置安放數據,因為此處磁盤的訪問速度較快。


DB2的參數配置分為兩個級別,一個是實例級別,另一個是數據庫級別。對數據服務性能影響較大的參數主要在數據庫級別配置。以下是三個比較重要的內存配置參數:

bufferpage:由同一個數據庫中的所有對象共享。

sortheap:用於排序的內存交換區,非共享,不宜設置太大,否則,很容易引起內存耗盡,因為每一個事務都會申請獨立的內存用於排序。

locklist: 共享內存,用於記錄數據服務運行中建立的鎖。建議設置20Mb左右,需要時根據實際情況進行調整。DB2默認使用行級鎖,如果設置太小,當鎖的記錄太多 時,則會導致內存不足,此時DB2會把多個行鎖升級為一個表鎖,這樣就會大大降低應用程序的並發性能。如果設置太大,則多分配的內存很少會被用到,導致浪 費。

其他的一些配置參數:

numdb:同時可以啟動的實例數目


DB2的常用命令:

db2ilist列出當前系統中定義的DB2實例
daslist列出系統中的DAS
db2listdatabasedirectory列出當前實例中定義的數據庫
db2listtablespaces列出當前數據庫中定義的表空間
db2listtabses[forall]列出當前數據庫中的表
db2listactivedb列出活動的數據庫

db2getdbmconfig
getdbcfgfordatabasename
db2updatedbcfgfordatabasenameusingbufferpage600M
db2alterbufferpoolIABMDEFAULTBPsize=1
db2listapplicationsshowdetail

以上命令可以在後面加"showdetail"參數,顯示詳細信息。


DB2數據存儲的頁大小只能在表空間級別統一指定(區別於Oracle,可以定義在表級別),並且建好後不能修改。

可以手工建立一個頁大小為4K的DMS用戶臨時表空間,然後把系統默認的SMS系統臨時表空間刪除。為滿足應用需求,一般還應再建立一個頁大小在8K以上的用戶臨時表空間。

DB2UDBV8.1對RedHatLinux9的支持不好,默認情況下無法啟動GUI安裝程序(可以通過設置環境LD_ASSUME_KERNEL=2.2.5解決),並且不會安裝Sample數據庫,控制中心也無法正常啟動。


當使用COUNT()函數時,如果表中的記錄數>2147483647行,則函數可能返回錯誤的結果,這時可以使用返回類型為DECIMAL(31,0)的COUNT_BIG()函數。

DISTINCT關鍵字可以用在COUNT()函數中,如:SELECTCOUNT(DISTINCTid)FROMTABLE,這代表將不對id列的重複值進行計數。

ORDERBY子句後面如果寫了多個列名,需要分別指定升序或是降序。

可以在load大量數據時,暫時關閉表的日誌選項。使用:ALTERTABLE...ACTIVATENOTLOGGEDINITIALLY

DB2的幾個特殊寄存器:CURRENTDATE,CURRENTTIME,CURRENTTIMESTAMP,USER(用戶ID).

有關日期的操作:CURRENTTIMESTAMP+2DAYS(orHOURS,SECONDS,MONTHS,YEARS,etc.)

case語句的使用:casewhen條件一then動作一else動作二end;可以欠套使用。

在視圖的創建語句中無法使用orderby子句與fetchnrows子句。但對於orderby可以用如下方法替代實現,不過會影響效率。
createviewv_name1(c1,c2,c3)as
select*from(
selectcolumn1,column2,column3
fromt1
orderbycolumn1)ast1;



參考資源
學習筆記-DB2UDBV8.1管理學習筆記(二)
學習筆記-DB2UDBV8.1管理學習筆記(三)
IBMDB2開發者園地
http://www-900.ibm.com/developerWorks/cn/dmdd/certify/index.shtml
IBMDB2信息中心
http://publib.boulder.ibm.com/infocenter/db2help/index.jsp
dbforums論壇
http://dbforums.com/
《DB2UDBv8.1forLinux,UNIX,Windows數據庫管理》GeorgeBaklarz,BillWong合著,機械工業出版社出版
《DB2數據庫管理與應用教程》莊濟誠著,清華大學出版社出版

DB2系統命令與配置參數大全

DB2系統命令與配置參數大全
2008年2月18日 作者:熔 岩 『白白網』 本文已被瀏覽 316 次
轉貼自http://www.szele.net/article_view.asp?id=1652

DB2 系統命令
dasauto - 自動啟動 DB2 管理服務器
dascrt - 創建 DB2 管理服務器
dasdrop - 除去 DB2 管理服務器
dasmigr - 遷移 DB2 管理服務器
dasupdt - 更新 DB2 管理服務器
db2_deinstall - 卸載 DB2 產品或功能部件
db2_install - 安裝 DB2 產品
db2admin - DB2 管理服務器
db2adutl - 管理 TSM 內的 DB2 對象
db2advis - DB2 設計顧問程序
db2audit - 審計設施管理員工具
db2batch - 基準程序工具
db2bfd - 綁定文件描述工具
db2ca - 啟動「配置助手」
db2cap - CLI/ODBC 靜態程序包綁定工具
db2cat - 系統目錄分析
db2cc - 啟動控制中心
db2cfexp - 連接配置導出工具
db2cfimp - 連接配置導入工具
db2chglibpath - 修改嵌入的運行時庫搜索路徑
db2chgpath - 更改嵌入的運行時路徑
db2ckbkp - 檢查備份
db2ckmig - 數據庫預遷移工具
db2ckrst - 檢查增量復原映像序列
db2cli - DB2 交互式 CLI
db2cmd - 打開 DB2 命令窗口
db2dart - 數據庫分析和報告工具
db2daslevel - 顯示 DAS 級別
db2dclgn - 聲明生成器
db2diag - db2diag.log 分析工具
db2drdat - DRDA 跟蹤
db2drvmp - DB2 數據庫驅動器映射
db2empfa - 啟用多頁文件分配
db2envar.bat - 設置當前命令窗口的環境
db2eva - 事件分析器
db2evmon - 事件監視器生產率工具
db2evtbl - 生成事件監視器目標表定義
db2exfmt - 說明表格式
db2exmig - 遷移說明表命令
db2expln - SQL 和 XQuery 說明
db2extsec - 設置 DB2 對象的許可權
db2flsn - 查找日誌序號
db2fm - DB2 故障監視器
db2fs - 第一步
db2gcf - 控制 DB2 實例
db2gov - DB2 控制器
db2govlg - DB2 控制器日誌查詢
db2gpmap - 獲取分佈圖
db2hc - 啟動運行狀況中心
db2iauto - 自動啟動實例
db2iclus - Microsoft Cluster Server
db2icrt - 創建實例
db2idrop - 除去實例
db2ilist - 列示實例
db2imigr - 遷移實例
db2inidb - 初始化鏡像數據庫
db2inspf - 格式化檢查結果
db2isetup - 啟動實例創建界面
db2iupdt - 更新實例
db2jdbcbind - DB2 JDBC 程序包綁定程序
db2ldcfg - 配置 LDAP 環境
db2level - 顯示 DB2 服務級別
db2licm - 許可證管理工具
db2listvolumes - 顯示所有磁盤捲的 GUID
db2logsforrfwd - 列示前滾恢復所需的日誌
db2look - DB2 統計信息和 DDL 抽取工具
db2ls - 列出已安裝的 DB2 產品和功能部件
db2move - 數據庫移動工具
db2mqlsn - MQ 偵聽器
db2mscs - 設置 Windows 故障轉移實用程序
db2mtrk - 內存跟蹤程序
db2nchg - 更改數據庫分區服務器配置
db2ncrt - 將數據庫分區服務器添加至實例
db2ndrop - 從實例中刪除數據庫分區服務器
db2osconf - 內核參數值的實用程序
db2pd - 監視 DB2 數據庫並對它進行故障診斷
db2pdcfg - 為問題確定行為配置 DB2 數據庫
db2perfc - 復位數據庫性能值
db2perfi - 性能計數器註冊實用程序
db2perfr - 性能監視器註冊工具
db2rbind - 重新綁定所有程序包
db2relocatedb - 重定位數據庫
db2rfpen - 復位前滾暫掛狀態
db2rspgn - 響應文件生成器
db2sampl - 創建樣本數據庫
db2set - DB2 概要文件註冊表
db2setup - 安裝 DB2
db2sql92 - 符合 SQL92 的 SQL 語句處理器
db2sqljbind - SQLJ 概要文件綁定程序
db2sqljcustomize - SQLJ 概要文件定製程序
db2sqljprint - SQLJ 概要文件打印程序
db2start - 啟動 DB2
db2stop - 停止 DB2
db2support - 問題分析和環境收集工具
db2swtch - 切換缺省 DB2 副本
db2sync - 啟動 DB2 同步器
db2systray - 啟動 DB2 系統任務欄
db2tapemgr - 管理磁帶上的日誌文件
db2tbst - 獲取表空間狀態
db2trc - 跟蹤
db2uiddl - 準備轉換為 V5 語義的唯一索引轉換
db2undgp - 撤銷執行特權
db2unins - 卸載 DB2 數據庫產品
db2untag - 釋放容器標記
db2updv9 - 將數據庫更新為版本 9 當前級別
db2xdbmig - 遷移 XSR 對象
db2xprt - 格式化陷阱文件
disable_MQFunctions - 禁用 WebSphere MQ 函數
doce_deinstall - 卸載 DB2 信息中心
doce_install - 安裝 DB2 信息中心
enable_MQFunctions - 啟用 WebSphere MQ 函數
installFixPack - 更新已安裝的 DB2 產品
setup - 安裝 DB2
sqlj - SQLJ 轉換程序

DB2 數據庫管理器配置參數
agent_stack_sz - 代理程序堆棧大小
agentpri - 代理程序的優先級
aslheapsz - 應用程序支持層堆大小
audit_buf_sz - 審計緩衝區大小
authentication - 認證類型
catalog_noauth - 允許進行編目,無需權限
clnt_krb_plugin - 客戶機 Kerberos 插件
clnt_pw_plugin - 客戶機用戶標識密碼插件
comm_bandwidth - 通信帶寬
conn_elapse - 連接耗用時間
cpuspeed - CPU 速度
dft_account_str - 缺省對方付費帳戶
dft_monswitches - 缺省數據庫系統監視器開關
dftdbpath - 缺省數據庫路徑
diaglevel - 診斷錯誤捕獲級別
diagpath - 診斷數據目錄路徑
dir_cache - 目錄高速緩存支持
discover - 發現方式
discover_inst - 發現服務器實例
fcm_num_buffers - FCM 緩衝區數目
fcm_num_channels - FCM 通道數配置參數
fed_noauth - 繞過聯合認證
federated - 聯合數據庫系統支持
fenced_pool - 最大受防護進程數
group_plugin - 組插件
health_mon - 運行狀況監視
indexrec - 索引重新創建時間
instance_memory - 實例內存
intra_parallel - 啟用分區內並行性
java_heap_sz - 最大 Java 解釋器堆大小
jdk_path - Java 軟件開發者工具箱安裝路徑
keepfenced - 保持受防護進程
local_gssplugin - 用於本地實例級別權限的 GSS API 插件
max_connections - 客戶機連接的最大數目
max_connretries - 節點連接重試次數
max_coordagents - 最大協調代理進程數
max_querydegree - 最大查詢並行度
max_time_diff - 節點間的最大時差
maxagents - 最大代理進程數
maxcagents - 並發代理進程的最大數目
maxtotfilop - 最大的已打開文件總數
mon_heap_sz - 數據庫系統監視器堆大小
nname - NetBIOS 工作站名稱
nodetype - 機器節點類型
notifylevel - 通知級別
num_initagents - 池中的代理進程的初始數目
num_initfenced - 受防護進程的初始數目
num_poolagents - 代理進程池大小
numdb - 包括主機和 iSeries 數據庫的同時活動的數據庫的最大數目
query_heap_sz - 查詢堆大小
release - 配置文件發行版級別
resync_interval - 事務再同步時間間隔
rqrioblk - 客戶機 I/O 塊大小
sheapthres - 排序堆閾值
spm_log_file_sz - 同步點管理器日誌文件大小
spm_log_path - 同步點管理器日誌文件路徑
spm_max_resync - 同步點管理器再同步代理進程限制
spm_name - 同步點管理器名稱
srvcon_auth - 服務器中的入局連接的認證類型
srvcon_gssplugin_list - 服務器中的入局連接的 GSS API 插件的列表
srvcon_pw_plugin - 服務器中的入局連接的用戶標識密碼插件
srv_plugin_mode - 服務器插件方式
start_stop_time - 啟動和停止超時
svcename - TCP/IP 服務名稱
sysadm_group - 系統管理權限組名
sysctrl_group - 系統控制權限組名
sysmaint_group - 系統維護權限組名
sysmon_group - 系統監視權限組名
tm_database - 事務管理器數據庫名稱
tp_mon_name - 事務處理器監視器名稱
trust_allclnts - 信賴所有客戶機
trust_clntauth - 可信的客戶機認證
util_impact_lim - 實例影響策略

DB2 數據庫系統配置參數
alt_collate - 備用整理順序
app_ctl_heap_sz - 應用程序控制堆大小
appgroup_mem_sz - 應用程序組內存集的最大大小
applheapsz - 應用程序堆大小
archretrydelay - 發生錯誤時的歸檔重試延遲
autonomic_switches - 自動維護開關
autorestart - 啟用自動重新啟動
avg_appls - 活動應用程序的平均數目
backup_pending - 備份暫掛指示符
blk_log_dsk_ful - 日誌磁盤已滿時掛起
catalogcache_sz - 目錄高速緩存大小
chngpgs_thresh - 已更改的頁閾值
codepage - 數據庫的代碼頁
codeset - 數據庫的代碼集
collate_info - 整理信息
country/region - 數據庫地域代碼
database_consistent - 數據庫是一致的
database_level - 數據庫發行版級別
database_memory - 數據庫共享內存大小
db_mem_thresh - 數據庫內存閾值配置參數
dbheap - 數據庫堆
dft_degree - 缺省度
dft_extent_sz - 表空間的缺省擴展數據塊大小
dft_loadrec_ses - 裝入恢復會話的缺省數目
dft_mttb_types - 對於優化配置參數缺省保留的表類型
dft_prefetch_sz - 缺省預取大小
dft_queryopt - 缺省查詢優化類
dft_refresh_age - 缺省刷新壽命
dft_sqlmathwarn - 出現算術異常時繼續
discover_db - 發現數據庫
dlchktime - 檢查死鎖的時間間隔
dyn_query_mgmt - 動態 SQL 和 XQuery 查詢管理配置參數
failarchpath - 故障轉移日誌歸檔路徑
groupheap_ratio - 應用程序組堆的內存百分比
hadr_db_role - HADR 數據庫角色
hadr_local_host - HADR 本地主機名
hadr_local_svc - HADR 本地服務名稱
hadr_remote_host - HADR 遠程主機名
hadr_remote_inst - 遠程服務器的 HADR 實例名
hadr_remote_svc - HADR 遠程服務名稱
hadr_syncmode - 處於對等狀態的日誌寫的 HADR 同步方式
hadr_timeout - HADR 超時值
jdk_64_path - 64 位 Java 軟件開發者工具箱安裝路徑 DAS
locklist - 鎖定列表的最大存儲量
locktimeout - 鎖定超時
log_retain_status - 日誌保留狀態指示符
logarchmeth1 - 主日誌歸檔方法
logarchmeth2 - 輔助日誌歸檔方法
logarchopt1 - 主日誌歸檔選項
logarchopt2 - 輔助日誌歸檔選項
logbufsz - 日誌緩衝區大小
logfilsiz - 日誌文件的大小
loghead - 第一個活動日誌文件
logindexbuild - 已創建的日誌索引頁
logpath - 日誌文件的位置
logprimary - 主日誌文件數
logretain - 啟用日誌保留
logsecond - 輔助日誌文件數
max_log - 每個事務的最大日誌
maxappls - 活動應用程序的最大數目
maxfilop - 每個應用程序打開的數據庫文件的最大數目
maxlocks - 升級之前鎖定列表的最大百分比
min_dec_div_3 - 十進制除法,小數位為 3
mincommit - 針對組的落實數
mirrorlogpath - 鏡像日誌路徑
multipage_alloc - 已啟用的多頁文件分配
newlogpath - 更改數據庫日誌路徑
num_db_backups - 數據庫備份數目
num_freqvalues - 保留的高頻值數目
num_iocleaners - 異步頁清除程序的數目
num_ioservers - I/O 服務器數
num_log_span - 編號日誌範圍
num_quantiles - 列的分位數的數目
numarchretry - 發生錯誤時的重試次數
numsegs - SMS 容器的缺省數目
overflowlogpath - 溢出日誌路徑
pagesize - 數據庫缺省頁大小
pckcachesz - 程序包高速緩存大小
rec_his_retentn - 恢復歷史記錄保留期
restore_pending - 復原暫掛
restrict_access - 數據庫訪問權受限配置參數
rollfwd_pending - 前滾暫掛指示符
self_tuning_mem - 自調整內存配置參數
seqdetect - 順序檢測標誌
sheapthres_shr - 共享排序的排序堆閾值
softmax - 恢復範圍和軟檢查點時間間隔
sortheap - 排序堆大小
stat_heap_sz - 統計信息堆大小
stmtheap - 語句堆大小
territory - 數據庫地域
tpname - APPC 事務程序名
trackmod - 啟用跟蹤已修改的頁
tsm_mgmtclass - Tivoli Storage Manager 管理類
tsm_nodename - Tivoli Storage Manager 節點名
tsm_owner - Tivoli Storage Manager 所有者名稱
tsm_password - Tivoli Storage Manager 密碼
use_sna_auth - 使用 SNA 認證
user_exit_status - 用戶出口狀態指示符
userexit - 啟用用戶出口
util_heap_sz - 實用程序堆大小
vendoropt - 提供方選項

DB2 管理服務器(DAS)配置參數
authentication - 認證類型 DAS
contact_host - 聯繫人列表的位置
das_codepage - DAS 代碼頁
das_territory - DAS 地域
dasadm_group - DAS 管理權限組名
db2system - DB2 服務器系統的名稱
discover - DAS 發現方式
exec_exp_task - 執行到期的任務
jdk_path - Java 軟件開發者工具箱安裝路徑 DAS
sched_enable - 調度程序方式
sched_userid - 調度程序用戶標識
smtp_server - SMTP 服務器
toolscat_db - 工具目錄數據庫
toolscat_inst - 工具目錄數據庫實例
toolscat_schema - 工具目錄數據庫模式

2008/5/27

JVM調優[轉]

轉載自http://www.wujianrong.com/archives/2006/11/jvm.html
1. Heap設定與垃圾回收
Java Heap分為3個區,Young,Old和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?有如下原因:
l 程序內調用了System.gc()或Runtime.gc()。
l 一些中間件軟件調用自己的GC方法,此時需要設置參數禁止這些GC。
l Java的Heap太小,一般默認的Heap值都很小。
l 頻繁實例化對象,Release對象。此時儘量保存並重用對象,例如使用StringBuffer()和String()。
如果你發現每次GC後,Heap的剩餘空間會是總空間的50%,這表示你的Heap處於健康狀態。許多Server端的Java程序每次GC後最好能有65%的剩餘空間。
經驗之談:
1ServerJVM最好將-Xms-Xmx設為相同值。為了優化GC,最好讓-Xmn值約等於-Xmx1/3[2]
2.一個GUI程序最好是每1020秒間運行一次GC,每次在半秒之內完成[2]
注意:
1.增加Heap的大小雖然會降低GC的頻率,但也增加了每次GC的時間。並且GC運行時,所有的用戶線程將暫停,也就是GC期間,Java應用程序不做任何工作。
2.Heap大小並不決定進程的內存使用量。進程的內存使用量要大於-Xmx定義的值,因為Java為其他任務分配內存,例如每個線程的Stack等。
2.Stack的設定
每個線程都有他自己的Stack。
-Xss
每個線程的Stack大小
Stack的大小限制著線程的數量。如果Stack過大就好導致內存溢漏。-Xss參數決定Stack大小,例如-Xss1024K。如果Stack太小,也會導致Stack溢漏。
3.硬件環境
硬件環境也影響GC的效率,例如機器的種類,內存,swap空間,和CPU的數量。
如果你的程序需要頻繁創建很多transient對象,會導致JVM頻繁GC。這種情況你可以增加機器的內存,來減少Swap空間的使用[2]。
4.4種GC
第一種為單線程GC,也是默認的GC。,該GC適用於單CPU機器。
第二種為Throughput GC,是多線程的GC,適用於多CPU,使用大量線程的程序。第二種GC與第一種GC相似,不同在於GC在收集Young區是多線程的,但在Old區和第一種一樣,仍然採用單線程。-XX:+UseParallelGC參數啟動該GC。
第三種為Concurrent Low Pause GC,類似於第一種,適用於多CPU,並要求縮短因GC造成程序停滯的時間。這種GC可以在Old區的回收同時,運行應用程序。-XX:+UseConcMarkSweepGC參數啟動該GC。
第四種為Incremental Low Pause GC,適用於要求縮短因GC造成程序停滯的時間。這種GC可以在Young區回收的同時,回收一部分Old區對象。-Xincgc參數啟動該GC。
4種GC的具體描述參見[3]。
參考文章:
2. Performance tuning Java: Tuning steps
3. Tuning Garbage Collection with the 1.4.2 JavaTM Virtual Machine .

java.lang.OutOfMemoryError: PermGen space及其解決方法

java.lang.OutOfMemoryError: PermGen space及其解決方法
1、PermGen space的全稱是Permanent Generation space,是指記憶體的永久保存區域OutOfMemoryError: PermGen space從表面上看就是記憶體益出,解決方法也一定是加大記憶體。說說為什麼會記憶體益出:這一部分用於存放Class和Meta的資訊,Class在 被 Load的時候被放入PermGen space區域,它和和存放Instance的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。這種錯誤常見在web伺服器對JSP進行pre compile的時候。
改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
2、在tomcat中redeploy時出現outofmemory的錯誤. 可以有以下幾個方面的原因:
1. 使用了proxool,因為proxool內部包含了一個老版本的cglib.
2. log4j,最好不用,只用common-logging
3. 老版本的cglib,快點更新到最新版。
4. 更新到最新的hibernate3.2
3、這裡以tomcat環境為例,其他WEB伺服器如jboss,weblogic等是同一個道理。

一、java.lang.OutOfMemoryError: PermGen space
PermGen space的全稱是Permanent Generation space,是指記憶體的永久保存區域,這塊記憶體主要是被JVM存放Class和Meta資訊的,Class在被Loader時就會被放到 PermGen space中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web伺服器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那麼就會產生此錯誤資訊了。

解決方法: 手動設置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.sh
在「echo "Using CATALINA_BASE: $CATALINA_BASE"」上面加入以下行:

JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建議:將相同的第三方jar檔移置到tomcat/shared/lib目錄下,這樣可以達到減少jar 文檔重複佔用記憶體的目的。
二、java.lang.OutOfMemoryError: Java heap space
Heap size 設置
JVM堆的設置是指java程式運行過程中JVM可以調配使用的記憶體空間的設置.JVM在啟動的時候會自動設 置Heap size的值,其初始空間(即-Xms)是實體記憶體的1/64,最大空間(-Xmx)是實體記憶體的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。

提示:在JVM中如果98%的時間是用於GC且可用的Heap size 不足2%的時候將拋出此異常資訊。

提示:Heap Size 最大不要超過可用實體記憶體的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。
解決方法:手動設置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在「echo "Using CATALINA_BASE: $CATALINA_BASE"」上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
三、實例,以下給出1G記憶體環境下java jvm 的參數設置參考:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

三、相關資料

2008/5/24

TVBS是中資?

從billypan的blog

危險!踢爆TVBS 即將變成共匪資金電視台http://www.wretch.cc/blog/billypan101/11733915

就可以看到,原來我們從以前所知道的TVBS
慢慢的變相,變成了,拿言論自由,當作一個最好的擋箭牌
裡面說到很好的一點:

台灣的民主自由到這種程度,可以無視敵對的國家利用法律漏洞和商業手法操控電視台,在台灣境內暗中改變台灣人的意識和文化,台灣人,你會不會太笨一點了啊?


2008/5/18

剛開張

這是我自己的第一個BLOG
以前本來就沒有想要開一個這種BLOG
現在想想
還是把以前收集的資料
看到的BLOG,把他留存在這邊,當作一個記錄

JPA+complex key+custom Query

  來源: https://www.cnblogs.com/520playboy/p/6512592.html   整個來說,就是有複合主鍵 然後要使用  public interface XxXXxx DAO extends CrudRepository<Tc...