J2EE,Documentum,GWT,EJB學(xué)習(xí)路程

          為了所愛(ài)的,和愛(ài)我的人努力

           

          2007年4月8日

          調(diào)整java 虛擬機(jī)


          盡管 JVM 調(diào)整操作隨 JVM 提供程序的不同而有所變化,但一般的調(diào)整概念適用于所有 JVM。這些一般的概念包括:
          編譯器調(diào)整。在服務(wù)器運(yùn)行時(shí)期間,所有 JVM 都使用即時(shí)(JIT)編譯器來(lái)將 Java 字節(jié)碼編譯為本機(jī)指令。
          Java 內(nèi)存或堆調(diào)整。JVM 內(nèi)存管理功能(即垃圾回收)為提高 JVM 性能提供了其中一種最大的可能性。
          類裝入調(diào)整。
          過(guò)程
          優(yōu)化啟動(dòng)性能和運(yùn)行時(shí)性能
          在某些環(huán)境中,優(yōu)化 WebSphere Application Server 的啟動(dòng)性能比優(yōu)化運(yùn)行時(shí)性能更重要。在另一些環(huán)境中,優(yōu)化運(yùn)行時(shí)性能更為重要。缺省情況下,IBM JVM 是針對(duì)運(yùn)行時(shí)性能進(jìn)行優(yōu)化的,而基于 HotSpot 的 JVM 是針對(duì)啟動(dòng)性能進(jìn)行優(yōu)化的。

          Java JIT 編譯器在很大程度上決定了是優(yōu)化啟動(dòng)性能還是優(yōu)化運(yùn)行時(shí)性能。編譯器使用的初始優(yōu)化級(jí)別影響編譯類方法所耗用的時(shí)間以及啟動(dòng)服務(wù)器所耗用的時(shí)間。為了提高 啟動(dòng)速度,可以降低編譯器所使用的初始優(yōu)化級(jí)別。這意味著,由于現(xiàn)在使用較低的優(yōu)化級(jí)別來(lái)編譯類方法,所以應(yīng)用程序的運(yùn)行時(shí)性能可能會(huì)下降。

          因?yàn)榫幾g器在運(yùn)行時(shí)執(zhí)行階段會(huì)根據(jù)自己的判斷來(lái)重新編譯類方法以提高性能,所以,很難提供一個(gè)有關(guān)特定的運(yùn)行時(shí)性能影響的說(shuō)明。最終,應(yīng)用程序的持續(xù)時(shí)間 是影響運(yùn)行時(shí)性能下降程度的主要原因。運(yùn)行時(shí)間較短的應(yīng)用程序的方法被重新編譯的可能性較高。運(yùn)行時(shí)間較長(zhǎng)的應(yīng)用程序的方法被重新編譯的可能性較低。 IBM JVM 的缺省設(shè)置是使用高優(yōu)化級(jí)別來(lái)執(zhí)行初始編譯。如果需要更改此行為,可以使用以下 IBM JVM 選項(xiàng):

          -Xquickstart

          此設(shè)置影響 IBM JVM 使用較低優(yōu)化級(jí)別來(lái)編譯類方法的方式,這將提高服務(wù)器啟動(dòng)速度,但會(huì)使運(yùn)行時(shí)性能下降。缺省情況下,如果未指定此參數(shù),IBM JVM 最初將使用較高的初始優(yōu)化級(jí)別來(lái)執(zhí)行編譯。此設(shè)置能夠提高運(yùn)行時(shí)性能,但會(huì)減慢服務(wù)器啟動(dòng)速度。

          缺省值: 高初始編譯器優(yōu)化級(jí)別
          建議值: 高初始編譯器優(yōu)化級(jí)別
          用法: -Xquickstart 可以加快服務(wù)器啟動(dòng)速度。

          基于 Sun 的 Hotspot 技術(shù)的 JVM 最初使用低優(yōu)化級(jí)別來(lái)編譯類方法。使用下列 JVM 選項(xiàng)來(lái)更改此行為:

          -server

          基于 Sun 的 Hotspot 技術(shù)的 JVM 最初使用低優(yōu)化級(jí)別來(lái)編譯類方法。這些 JVM 使用簡(jiǎn)單編譯器和能夠進(jìn)行優(yōu)化的 JIT 編譯器。通常情況下,使用簡(jiǎn)單 JIT 編譯器。然而,可以通過(guò)設(shè)置此選項(xiàng)來(lái)使用能夠執(zhí)行優(yōu)化的編譯器。此更改將顯著提高服務(wù)器的性能,但使用能夠執(zhí)行優(yōu)化的編譯器時(shí),服務(wù)器的預(yù)備時(shí)間將會(huì)較 長(zhǎng)。

          缺省值: 簡(jiǎn)單編譯器
          建議值: 能夠執(zhí)行優(yōu)化的編譯器
          用法: -server 啟用能夠執(zhí)行優(yōu)化的編譯器。

          設(shè)置堆大小 下列命令行參數(shù)對(duì)于設(shè)置堆大小來(lái)說(shuō)很有用。
          -Xms
          此設(shè)置控制 Java 堆的初始大小。正確調(diào)整此參數(shù)有助于降低垃圾回收開(kāi)銷(xiāo),從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。對(duì)于某些應(yīng)用程序來(lái)說(shuō),此選項(xiàng)的缺省設(shè)置可能會(huì)太低,從而導(dǎo)致發(fā)生大量小型垃圾回收。

          缺省值: 256 MB
          建議值: 隨工作負(fù)載的不同而有所變化,但高于缺省值。
          用法: -Xms256m 將初始堆大小設(shè)置為 256 兆字節(jié)

          -Xmx
          此設(shè)置控制 Java 堆的最大大小。正確調(diào)整此參數(shù)有助于降低垃圾回收開(kāi)銷(xiāo),從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。對(duì)于某些應(yīng)用程序來(lái)說(shuō),此選項(xiàng)的缺省設(shè)置可能會(huì)太低,從而導(dǎo)致發(fā)生大量小型垃圾回收。

          缺省值: 512 MB
          建議值: 隨工作負(fù)載的不同而有所變化,但高于缺省值。
          用法: -Xmx512m 將最大堆大小設(shè)置為 512 兆字節(jié)

          -Xlp
          此設(shè)置可以與 IBM JVM 配合使用,以使用大頁(yè)來(lái)分配堆。然而,如果使用此設(shè)置,那么必須將操作系統(tǒng)配置為支持大頁(yè)。使用大頁(yè)可以降低 CPU 跟蹤堆內(nèi)存時(shí)的開(kāi)銷(xiāo),并且還允許創(chuàng)建較大的堆。

          請(qǐng)參閱調(diào)整操作系統(tǒng) 以了解有關(guān)調(diào)整操作系統(tǒng)的更多信息。

          應(yīng)該指定的堆大小取決于不同時(shí)段的堆使用情況。在堆大小頻繁更改的情況下,對(duì) Xms 和 Xmx 參數(shù)指定相同的值可以提高性能。

          調(diào)整 IBM JVM 的垃圾回收器。
          使用 Java -X 選項(xiàng)來(lái)查看內(nèi)存選項(xiàng)列表。

          -Xgcpolicy
          將 gcpolicy 設(shè)置為 optthruput 會(huì)禁用并發(fā)標(biāo)記。如果沒(méi)有暫停時(shí)間問(wèn)題(表現(xiàn)為應(yīng)用程序響應(yīng)時(shí)間不規(guī)律),那么應(yīng)該使用此選項(xiàng)來(lái)實(shí)現(xiàn)最大吞吐量。將 gcpolicy 設(shè)置為 optavgpause 會(huì)使用缺省值來(lái)啟用并發(fā)標(biāo)記。此設(shè)置將減少由正常垃圾回收所引起的應(yīng)用程序響應(yīng)時(shí)間不規(guī)律情況。然而,此選項(xiàng)可能會(huì)降低整體吞吐量。

          缺省值: optthruput
          建議值: optthruput
          用法: Xgcpolicy:optthruput

          -Xnoclassgc
          缺省情況下,當(dāng)一個(gè)類沒(méi)有任何活動(dòng)實(shí)例時(shí),JVM 就會(huì)從內(nèi)存中卸裝該類,但是這樣會(huì)使性能下降。如果關(guān)閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個(gè)類而造成的開(kāi)銷(xiāo)。

          如果不再需要某個(gè)類,那么該類在堆中所占用的空間通常將用于創(chuàng)建新對(duì)象。但是,如果應(yīng)用程序通過(guò)創(chuàng)建類的新實(shí)例來(lái)處理請(qǐng)求,并且該應(yīng)用程序的請(qǐng)求是隨機(jī)出 現(xiàn)的,那么可能會(huì)發(fā)生以下情況:先前請(qǐng)求者完成后,正常的類垃圾回收將通過(guò)釋放這個(gè)類占用的堆空間來(lái)清除這個(gè)類,但當(dāng)下一個(gè)請(qǐng)求出現(xiàn)時(shí),又必須將這個(gè)類重 新實(shí)例化。在這種情況下,您可能想使用此選項(xiàng)來(lái)禁用類垃圾回收。

          缺省值: 啟用類垃圾回收
          建議值: 禁用類垃圾回收
          用法: Xnoclassgc 禁用類垃圾回收

          有關(guān)其他信息,請(qǐng)參閱下列 DeveloperWorks 文章:
          http://www.ibm.com/developerworks/java/
          調(diào)整 Sun JVM 的垃圾回收器
          在 Solaris 平臺(tái)上,WebSphere Application Server 在 Sun Hotspot JVM 上運(yùn)行,而不是在 IBM JVM 上運(yùn)行。對(duì) Sun JVM 使用正確的調(diào)整參數(shù)以利用其性能優(yōu)化功能十分重要。

          Sun Hotspot JVM 依靠分代垃圾回收來(lái)實(shí)現(xiàn)最佳性能。下列命令行參數(shù)對(duì)于調(diào)整垃圾回收來(lái)說(shuō)非常有用。

          -XX:SurvivorRatio
          將 Java 堆劃分為舊對(duì)象(長(zhǎng)生命周期對(duì)象)區(qū)域和新對(duì)象區(qū)域。新對(duì)象區(qū)域進(jìn)一步細(xì)分為兩部分,第一部分用于分配給新對(duì)象(初始區(qū)域),第二部分存放那些經(jīng)過(guò)其前幾 次垃圾回收之后、但在被提升為舊對(duì)象之前仍在使用中的新對(duì)象(幸存者空間)。幸存者比率是堆的新對(duì)象區(qū)域中初始區(qū)域與幸存者空間的比率。增大此設(shè)置將針對(duì) 需要?jiǎng)?chuàng)建大量對(duì)象但僅保留少量對(duì)象的應(yīng)用程序優(yōu)化 JVM。與其他應(yīng)用程序相比,WebSphere Application Server 會(huì)生成更多中等生命周期對(duì)象和長(zhǎng)生命周期對(duì)象,因此,應(yīng)該將此設(shè)置設(shè)置為小于缺省值。

          缺省值: 32
          建議值: 16
          用法: -XX:SurvivorRatio=16

          -XX:PermSize
          為永久生成對(duì)象保留的堆區(qū)域存儲(chǔ) JVM 的所有反射數(shù)據(jù)。對(duì)于動(dòng)態(tài)地裝入和卸裝大量類的應(yīng)用程序來(lái)說(shuō),應(yīng)該增大此大小以優(yōu)化它們的性能。通過(guò)將此參數(shù)設(shè)置為 128MB,可以消除增大此部分堆所需的開(kāi)銷(xiāo)。

          建議值: 128 MB
          用法: XX:PermSize=128m 將 perm 大小設(shè)置為 128 兆字節(jié)。

          -Xmn
          此設(shè)置控制允許新生成的對(duì)象在堆中耗用的空間量。正確調(diào)整此參數(shù)有助于降低垃圾回收開(kāi)銷(xiāo),從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。此參數(shù)的缺省設(shè)置通常過(guò) 低,這將導(dǎo)致執(zhí)行大量的小型垃圾回收操作。如果將此參數(shù)設(shè)置得過(guò)高,可能會(huì)導(dǎo)致 JVM 僅執(zhí)行大型(全面)垃圾回收。這些垃圾回收操作通常會(huì)耗時(shí)幾秒鐘,這將嚴(yán)重影響服務(wù)器的整體性能。您必須保持將此參數(shù)設(shè)置為小于整個(gè)堆大小的一半,以避免 這種情況出現(xiàn)。

          缺省值: 2228224 字節(jié)
          建議值: 大約整個(gè)堆大小的 1/4
          用法: -Xmn256m 將大小設(shè)置為 256 兆字節(jié)。

          -Xnoclassgc
          缺省情況下,當(dāng)一個(gè)類沒(méi)有任何活動(dòng)實(shí)例時(shí),JVM 就會(huì)從內(nèi)存中卸裝該類,但是這樣會(huì)使性能下降。如果關(guān)閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個(gè)類而造成的開(kāi)銷(xiāo)。

          如果不再需要某個(gè)類,那么該類在堆中所占用的空間通常將用于創(chuàng)建新對(duì)象。但是,如果應(yīng)用程序通過(guò)創(chuàng)建類的新實(shí)例來(lái)處理請(qǐng)求,并且該應(yīng)用程序的請(qǐng)求是隨機(jī)出 現(xiàn)的,那么可能會(huì)發(fā)生以下情況:先前請(qǐng)求者完成后,正常的類垃圾回收將通過(guò)釋放這個(gè)類占用的堆空間來(lái)清除這個(gè)類,但當(dāng)下一個(gè)請(qǐng)求出現(xiàn)時(shí),又必須將這個(gè)類重 新實(shí)例化。在這種情況下,您可能想使用此選項(xiàng)來(lái)禁用類垃圾回收。

          缺省值: 啟用類垃圾回收
          建議值: 禁用類垃圾回收
          用法: Xnoclassgc 禁用類垃圾回收

          有關(guān)調(diào)整 Sun JVM 的其他信息,請(qǐng)參閱 Java HotSpot VM 的性能文檔。

          調(diào)整 HP JVM 的垃圾回收器
          HP JVM 依靠分代垃圾回收來(lái)實(shí)現(xiàn)最佳性能。下列命令行參數(shù)對(duì)于調(diào)整垃圾回收來(lái)說(shuō)非常有用。

          -Xoptgc
          此設(shè)置針對(duì)包含許多短生命周期對(duì)象的應(yīng)用程序優(yōu)化 JVM。如果未指定此參數(shù),那么 JVM 通常執(zhí)行大型(全面)垃圾回收。全面垃圾回收會(huì)花費(fèi)幾秒鐘時(shí)間,這將顯著影響服務(wù)器性能。

          缺省值: off
          建議值: on
          用法: -Xoptgc 啟用優(yōu)化的垃圾回收。

          -XX:SurvivorRatio
          將 Java 堆劃分為舊對(duì)象(長(zhǎng)生命周期對(duì)象)區(qū)域和新對(duì)象區(qū)域。新對(duì)象區(qū)域進(jìn)一步細(xì)分為兩部分,第一部分用于分配給新對(duì)象(初始區(qū)域),第二部分存放那些經(jīng)過(guò)其前幾 次垃圾回收之后、但在被提升為舊對(duì)象之前仍在使用中的新對(duì)象(幸存者空間)。幸存者比率是堆的新對(duì)象區(qū)域中初始區(qū)域與幸存者空間的比率。增大此設(shè)置將針對(duì) 需要?jiǎng)?chuàng)建大量對(duì)象但僅保留少量對(duì)象的應(yīng)用程序優(yōu)化 JVM。與其他應(yīng)用程序相比,WebSphere Application Server 會(huì)生成更多中等生命周期對(duì)象和長(zhǎng)生命周期對(duì)象,因此,應(yīng)該將此設(shè)置設(shè)置為小于缺省值。

          缺省值: 32
          建議值: 16
          用法: -XX:SurvivorRatio=16

          -XX:PermSize
          為永久生成對(duì)象保留的堆區(qū)域存儲(chǔ) JVM 的所有反射數(shù)據(jù)。對(duì)于動(dòng)態(tài)地裝入和卸裝大量類的應(yīng)用程序來(lái)說(shuō),應(yīng)該增大此大小以優(yōu)化它們的性能。通過(guò)將此參數(shù)指定為 128 兆字節(jié),可以消除增大此部分堆所需的開(kāi)銷(xiāo)。

          缺省值: 0
          建議值: 128 兆字節(jié)
          用法: -XX:PermSize=128m 將 PermSize 設(shè)置為 128 兆字節(jié)

          -XX:+ForceMmapReserved
          缺省情況下,Java 堆以“惰性交換”方式進(jìn)行分配。在此方式下,將根據(jù)需要來(lái)分配內(nèi)存頁(yè),這樣可以節(jié)省交換空間,但是也將強(qiáng)制使用 4KB 頁(yè)。在大型堆系統(tǒng)中,這種內(nèi)存分配方式允許堆包含數(shù)以十萬(wàn)計(jì)的頁(yè)。此命令禁用“惰性交換”并允許操作系統(tǒng)使用較大的內(nèi)存頁(yè),從而優(yōu)化對(duì)構(gòu)成 Java 堆的內(nèi)存的訪問(wèn)。

          缺省值: off
          建議值: on
          用法: -XX:+ForceMmapReserved 將禁用“惰性交換”。

          -Xmn
          此設(shè)置控制允許新生成的對(duì)象在堆中耗用的空間量。正確調(diào)整此參數(shù)有助于降低垃圾回收開(kāi)銷(xiāo),從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。此參數(shù)的缺省設(shè)置通常過(guò)低,這將導(dǎo)致執(zhí)行大量的小型垃圾回收操作。

          缺省值: 沒(méi)有缺省值
          建議值: 大約整個(gè)堆大小的 3/4
          用法: -Xmn768m 將大小設(shè)置為 768 兆字節(jié)

          虛擬頁(yè)大小
          通過(guò)將 Java 虛擬機(jī)的指令頁(yè)大小和數(shù)據(jù)頁(yè)大小設(shè)置為 64MB,可以提高性能。

          缺省值: 4MB
          建議值: 64MB
          用法: 使用以下命令。命令輸出提供了進(jìn)程可執(zhí)行文件的當(dāng)前操作系統(tǒng)特征:
          chatr +pi64M +pd64M /opt/WebSphere/
          AppServer/java/bin/PA_RISC2.0/
          native_threads/java


          -Xnoclassgc
          缺省情況下,當(dāng)一個(gè)類沒(méi)有任何活動(dòng)實(shí)例時(shí),JVM 就會(huì)從內(nèi)存中卸裝該類,但是這樣會(huì)使性能下降。如果關(guān)閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個(gè)類而造成的開(kāi)銷(xiāo)。

          如果不再需要某個(gè)類,那么該類在堆中所占用的空間通常將用于創(chuàng)建新對(duì)象。但是,如果應(yīng)用程序通過(guò)創(chuàng)建類的新實(shí)例來(lái)處理請(qǐng)求,并且該應(yīng)用程序的請(qǐng)求是隨機(jī)出 現(xiàn)的,那么可能會(huì)發(fā)生以下情況:先前請(qǐng)求者完成后,正常的類垃圾回收將通過(guò)釋放這個(gè)類占用的堆空間來(lái)清除這個(gè)類,但當(dāng)下一個(gè)請(qǐng)求出現(xiàn)時(shí),又必須將這個(gè)類重 新實(shí)例化。在這種情況下,您可能想使用此選項(xiàng)來(lái)禁用類垃圾回收。

          缺省值: 啟用類垃圾回收
          建議值: 禁用類垃圾回收
          用法: Xnoclassgc 禁用類垃圾回收

          有關(guān)調(diào)整 HP 虛擬機(jī)的其他信息,請(qǐng)參閱 Java 技術(shù)軟件 HP-UX 11i。

          調(diào)整 HP 的 JVM for HP-UX 設(shè)置下列選項(xiàng)以提高應(yīng)用程序性能:
          -XX:SchedulerPriorityRange=SCHED_NOAGE
          -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider
          -XX:-ExtraPollBeforeRead

          posted @ 2009-11-06 10:38 田亮 閱讀(390) | 評(píng)論 (1)編輯 收藏

          在RED HAT ENTERPRICE LINUX4 上安裝ORACLE 10G

          在RED HAT ENTERPRICE LINUX4 上安裝ORACLE 10G (10.2.0.1.0)


          第一步 準(zhǔn)備工作

          ? 檢查內(nèi)存
          SZ_TOMCAT:/home/xjy/soft> grep SwapTotal /proc/meminfo
          SwapTotal:     2031608 kB

          ? 檢查內(nèi)核
           Linux reaky.com 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux

          ? 檢查軟件包
          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


          檢查內(nèi)核參數(shù)
          sysctl –a

          然后在/ETC/sysctl.conf中添加
          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

          執(zhí)行/sbin/sysctl –p

          中文化顯示工作

          修改/etc/sysconfig/i18n文件,改為
          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文件,改為
          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"


          第二步:
          ? 創(chuàng)建用戶
          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

          ? 設(shè)置環(huán)境
          編輯/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"


          第三步、安裝Oracle10g
             
          1.開(kāi)始Oracle普通安裝
             以oracle用戶登錄linux,加載oracle Oracle10g光盤(pán), 在執(zhí)行runInstaller前,確定Oracle環(huán)境變量已經(jīng)設(shè)置,可以執(zhí)行如下命令檢驗(yàn)環(huán)境變量的設(shè)置:
          oracle 用戶登陸
          $set
          在終端命令窗口,執(zhí)行如下命令,開(kāi)始o(jì)racle10g的安裝:
          oracle$/mnt/cdrom/runInstaller
          2.在歡迎窗口界面: 點(diǎn)擊“下一步”按鈕
          3.指定Inventory 路徑和身份證明窗口:
              inventory路徑是: /home/oracle/oraInventory
            指定操作系統(tǒng)組名: oinstall
          點(diǎn)擊“下一步”按鈕
          4.這時(shí)會(huì)彈出一個(gè)執(zhí)行orainstRoot.sh 腳本的窗口:
          打開(kāi)另一個(gè)終端,以root用戶執(zhí)行如下命令:
          su – root
          cd  /home/oracle/oraInventory
          ./orainstRoot.sh
          然后,切換到oracle安裝窗口,點(diǎn)擊“繼續(xù)”按鈕
          5.        在指定文件位置窗口彈出后,指定相應(yīng)的路徑:
          源:
          路徑: /mnt/cdrom/stage/products.xml
          目的:
          名稱:  OraDb10g_home1
          路徑: /home/oracle/product/10.1.0/db_1
          然后,點(diǎn)擊“下一步”按鈕
          6.選擇安裝類型:
          選擇"企業(yè)版"選項(xiàng),然后點(diǎn)擊“下一步”按鈕。安裝程序驗(yàn)證系統(tǒng)是否符合安裝和配置所選產(chǎn)品的所有最低要求
          7.        安裝程序驗(yàn)證系統(tǒng)是否符合安裝和配置所選產(chǎn)品的所有最低要求。當(dāng)檢測(cè)完成并成功后,點(diǎn)擊“下一步”按鈕
          8.        選擇數(shù)據(jù)庫(kù)設(shè)置:
          選擇"通用"選項(xiàng),然后點(diǎn)擊“下一步”按鈕
          9.指定數(shù)據(jù)庫(kù)配置參數(shù):
          全局?jǐn)?shù)據(jù)庫(kù)名稱: "test".
          SID: "test".
          選中“創(chuàng)建帶樣本方案的數(shù)據(jù)庫(kù)”復(fù)選框,然后,點(diǎn)擊“下一步”按鈕
          10.選擇數(shù)據(jù)庫(kù)管理設(shè)置:
          選擇"使用 Database Control管理數(shù)據(jù)庫(kù)"。
          然后,點(diǎn)擊“下一步”
          11.指定數(shù)據(jù)庫(kù)文件存儲(chǔ)選項(xiàng)
          選擇 "文件系統(tǒng)"選項(xiàng).
          指定數(shù)據(jù)庫(kù)路徑: /home/oracle/oradata/
          然后點(diǎn)擊“下一步”按鈕,
            12.指定備份和恢復(fù)選項(xiàng):
          選擇"不啟用自動(dòng)備份".
          點(diǎn)擊 “下一步”按鈕
          13.指定數(shù)據(jù)庫(kù)方案口令:
          可以為SYS、SYSTEM、SYSMAN、DBSNMP單獨(dú)指定口令,或選擇"所有用戶使用同一口令"選項(xiàng).為這些用戶指定同一個(gè)口令。
          指定口令不要以數(shù)字開(kāi)始,否則會(huì)得到錯(cuò)誤信息.然后點(diǎn)擊 “下一步”按鈕
          14.        出現(xiàn)概要窗口后, 點(diǎn)擊“安裝”按鈕
          15.        這時(shí)你會(huì)看到數(shù)據(jù)庫(kù)安裝過(guò)程窗口,然后會(huì)出現(xiàn)輔助設(shè)置窗口,再出現(xiàn)數(shù)據(jù)庫(kù)創(chuàng)建窗口。
          16.        數(shù)據(jù)庫(kù)創(chuàng)建完畢,彈出數(shù)據(jù)庫(kù)創(chuàng)建完成窗口,點(diǎn)擊Ok按鈕。
          當(dāng)彈出一個(gè)執(zhí)行root.sh腳本的窗口時(shí)在另一個(gè)終端執(zhí)行如下命令:
          su – root
          cd /home/oracle/product/10.1.0/db_1
          ./root.sh
          點(diǎn)擊確定”按鈕

          17.        在概要安裝完畢,會(huì)報(bào)告一個(gè)發(fā)現(xiàn)$ORACLE_BASE/product/10.1.0/db_1/portlist.ini文件,這時(shí)點(diǎn)擊OK按鈕
          18.        安裝結(jié)束:
          點(diǎn)擊“退出”按鈕,結(jié)束安裝程序。
          六、數(shù)據(jù)庫(kù)的啟動(dòng)和停止
          要使數(shù)據(jù)庫(kù)啟動(dòng),執(zhí)行如下命令:
          oracle$ sqlplus /nolog
          SQL> connect / as sysdba
          SQL> startup
          要使數(shù)據(jù)庫(kù)停止,執(zhí)行如下命令:
          oracle$ sqlplus /nolog
          SQL> connect / as sysdba
          SQL> shutdown
           


          刪除oracle10g
                如果oracle10ganzhuang過(guò)程中出現(xiàn)錯(cuò)誤,需要重新安裝,可以執(zhí)行如下命令刪除以前安裝的oracle:
          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
          執(zhí)行完上述命令后,重新啟動(dòng)系統(tǒng),可以重新安裝oracle10g數(shù)據(jù)庫(kù)系統(tǒng)


          FAQ (在Linux平臺(tái)安裝Oracle比較常見(jiàn)的問(wèn)題)
          1. 不能啟動(dòng)安裝界面
          運(yùn)行runInstaller提示信息類似如下:
          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 .......
          解決辦法: 設(shè)定你的DISPLAY環(huán)境參數(shù).
          # export DISPLAY= your_IPaddress :0.0
          把your_IPaddress換成你的IP.或者用root簡(jiǎn)單的執(zhí)行一下# xhost + (要注意這樣會(huì)有安全上的隱患)
          2.安裝界面顯示很多"口口"樣子的亂碼
          解決辦法:查看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=
          執(zhí)行#export LC_CTYPE=en_US.UTF-8 然后重新調(diào)用安裝程序.
          3. 用IE登錄Linux服務(wù)器上的em出現(xiàn)亂碼
          在Linux(Unix) 環(huán)境下成功安裝了Oracle 10g,從windows下用IE瀏覽器登錄 10g 的em, 按鈕是"口口"這樣的方框.
          解決辦法: 參考:
          http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm
          4.創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候出現(xiàn)ORA-03113的錯(cuò)誤
          解決辦法: 查看核心參數(shù)是否調(diào)整正確.參考:
          http://www.dbanotes.net/Oracle/ORA-03113.htm
          5. RedHat 9 / FC1等系統(tǒng)10g不支持如何安裝?
          解決辦法:在10g不支持的Linux發(fā)行版上安裝10g的解決方法
          1). 運(yùn)行runInstaller -ignoreSysPrereqs,這樣會(huì)跳過(guò)檢查.
          2). 摘自 www.puschitz.com 修改/etc/redhat-release文件:
          #su - root
          #cp /etc/redhat-release /etc/redhat-release.backup
          #cat > /etc/redhat-release <<   EOF
          Red Hat Enterprise Linux AS release 3 (Taroon)
          EOF
          安裝完畢,執(zhí)行如下操作:
          #su - root
          #cp /etc/redhat-release.backup /etc/redhat-release
          3). http://www.dbanotes.net/Oracle/10G-Beta-Install-Bug.htm
          同樣的思路,我們可以修改Oracle 的install/oraparam.ini文件達(dá)到目的.
          6.如何關(guān)掉那些 ocssd.bin 進(jìn)程?
          解決辦法:編輯/etc/inittab文件(做好備份)
          注釋掉這一行:
          h1:3:respawn:/etc/init.d/init.cssd run >/dev/null 2>................
          ---------------------------------------------------------------------------------------------------------------------
          參考信息
          http://blog.csdn.net/itsdn/archive/2007/05/21/1619114.aspx

          1、在 Linux x86 上安裝Oracle數(shù)據(jù)庫(kù)10g
          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安裝手冊(cè)
          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

          /etc/rc.d/init.d/dbora文件內(nèi)容
          #http://staff.in2.hr/denis/oracle/10g1install_fedora3_en.html#n4_4
          # chkconfig: 0356 95 1
          # description: init script to start/stop oracle database 10g, TNS listener, EMS
          #
          #
          # match these values to your environment:
          export ORACLE_BASE=/u01/app/oracle
          export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
          export ORACLE_SID=CQRCDATA
          export PATH=$PATH:$ORACLE_HOME/bin
          export ORACLE_USER=oracle
          # see how we are called:
          case $1 in
          start)
          dltelecom  - "$ORACLE_USER" -c "$ORACLE_HOME/bin/dbstart"
          dltelecom  - "$ORACLE_USER" -c "$ORACLE_HOME/bin/emctl start dbconsole"
          dltelecom  - "$ORACLE_USER" -c "SORACLE_HOME/bin/isqlplusctl start"
          ;;
          stop)
          dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
          dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
          dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
          ;;
          *)
          echo "Usage: $0 {start|stop}"
          ;;
          esac

          posted @ 2009-10-13 19:28 田亮 閱讀(464) | 評(píng)論 (0)編輯 收藏

          Linux 下安裝JDK

          一、安裝JDK

          首先到sun官網(wǎng)下載安裝包:

          https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter

          分別下載:jdk-6u16-linux-i586-rpm.bin jdk-6u16-linux-i586.bin

          然后將這兩個(gè)安裝文件放到:/usr/tmp 目錄下,分別修改權(quán)限,命令如下:

          # chmod u+x ./jdk-6u16-linux-i586.bin

          # chmod u+x ./jdk-6u16-linux-i586-rpm.bin

          解壓文件(這兩個(gè)文件可以自動(dòng)解壓):

          # ./jdk-6u16-linux-i586.bin

          創(chuàng)建目錄/usr/java:

          # mkdir /usr/java

          將解壓出來(lái)的jdk-6u16-linux-i586目錄復(fù)制到/usr/java目錄下:

          # cp -fr jdk-6u16-linux-i586 /usr/java

          解壓文件

          # ./jdk-6u16-linux-i586-rpm.bin

          安裝軟件會(huì)將JDK自動(dòng)安裝到 /usr/java/jdk-6u16-linux-i586目錄下

          二、配置環(huán)境變量

          1.修改用戶環(huán)境變量

          假設(shè)使用java的用戶為 guest,編輯該用戶的.bashrc文件進(jìn)行環(huán)境變量設(shè)置。

          # vi /home/ guest /.bashrc

          .bashrc文件中加入:

          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.修改所有用戶的環(huán)境變量

          # vi /etc/profile

          在該文件中加入:

          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路徑中加入了$CLASSPATH,這樣可以避免將之前配置的路徑被覆蓋。

          profile文件如下:

          ############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###########

          三、卸載jkd

          1、卸載系統(tǒng)自帶的jdk版本:

          查看自帶的jdk

          #rpm -qa | grep gcj

          看到如下信息:

          libgcj-4.1.2-44.el5

          java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

          使用rpm -e --nodeps 命令刪除上面查找的內(nèi)容:

          #rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

          2、卸載rpm安裝的jkd版本

          查看安裝的jdk

          #rpm -qa|grep jdk

          看到如下信息:

          java-1.6.0-openjdk-1.6.0.0-0.25.b09.el5

          jdk-1.6.0_16-fcs

          卸載:

          #rpm -e --nodeps jdk-1.6.0_16-fcs

          posted @ 2009-10-13 01:58 田亮 閱讀(713) | 評(píng)論 (0)編輯 收藏

          twiki 安裝

          twiki4.1.2的安裝及配置收藏

                  twiki 遵循 GPL 協(xié)議,軟件定位為“靈活、強(qiáng)大、易于使用的企業(yè)協(xié)作平臺(tái)”,運(yùn)行于 Perl 環(huán)境,是很多大型商業(yè)公司首選的 wiki 平臺(tái)。

          安裝過(guò)程及配置:

          #建立 twiki 目錄
          mkdir /home/centeur/public_html/twiki
          cd /home/centeur/public_html/twiki
          #下載并解壓
          wget http://twiki.org/p/pub/Codev/Release/TWiki-4.1.2.tgz
          tar -zxvf TWiki-4.1.2.tgz
          #權(quán)限限制
          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.cfg,將 $twikiLibPath 改為合適的路徑
          $twikiLibPath = "/home/centeur/public_html/twiki/lib";
          #修改 bin/.htaccess,將 {DataDir}和{Administrators} 修改為合適的內(nèi)容
          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>
          #建立系統(tǒng)管理員帳戶
          htpasswd -c data/.htpasswd centeur

          #現(xiàn)在就可以在瀏覽器中鍵入 http://example.com/twiki/bin/configure 進(jìn)行設(shè)置了,設(shè)置保存在 lib/LocalSite.cfg 中
          #提示缺少 CGI::Session 模塊,進(jìn)行安裝
          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 下
          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 的部分設(shè)置內(nèi)容
          $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';

          #現(xiàn)在可以在瀏覽器中鍵入 http://example.com/twiki/bin/view 進(jìn)入 twiki 頁(yè)面了
          #編輯 TWIki > Main 目錄 > TWikiAdminGroup 頁(yè)面,將 centeur 加入 GROUP
          * Member list:
            * Set GROUP = centeur
          * Persons/group who can change the list:
            * Set ALLOWTOPICCHANGE = TWikiAdminGroup
          #修改 .htaccess,進(jìn)行重定向設(shè)置
          Redirect /twiki/index.html http://example.com/twiki/bin/view

          posted @ 2009-03-11 17:22 田亮 閱讀(560) | 評(píng)論 (0)編輯 收藏

          javascript call gwt method

          這個(gè)有些變態(tài)的東西折磨了整兩天(最頭疼這種東西了),我遇到的是用gwt的frame的回來(lái)一個(gè)IOStream(html string),我要高亮html里的關(guān)鍵標(biāo)記,并讓他們有事件,所以,我在返回IOStream之前進(jìn)行攔截,并repleace關(guān)鍵標(biāo)記,加上了高亮的屬性"background-color='yellow'", 加上了事件處理"onclick=\"javascript:window.top.clickFireEvent('Todd')" (就是這一塊,最讓我頭疼了,因?yàn)槭莻€(gè)frame所以他們不在同一個(gè)窗口下);
          在gwt中:

          //gwt EntryPoint method
          public void onModuleLoad() {
              clickEventFire();
            }

          //This is jsni method

            private static native void clickEventFire()/*-{
             $wnd.clickEventFire = function(id){
             @com.todd.Main::fireScriptEvent(Ljava/lang/String;)(name);
             }
             }-*/;

          //This is a method for javascript call.
          public static void fireScriptEvent(String name) {
              System.out.println("My name is " + name);
          }

          別看短短幾句,真的是很頭疼的東西:)

          posted @ 2008-12-17 00:45 田亮 閱讀(1619) | 評(píng)論 (3)編輯 收藏

          Java Debug

          在編程的生涯中,最重要就是能Debug,我最近在玩documentum6.0的內(nèi)置中間件weblogic,所以Remote Debug是少不了的。
          先說(shuō)幾個(gè)概念(這是我在網(wǎng)上查的):
              1.什么是JPDA:
                  Java Platform Debugger Architecture(JPDA:Java平臺(tái)調(diào)試架構(gòu)) 由Java虛擬機(jī)后端和調(diào)試平臺(tái)前端組成 :
                      a.Java虛擬機(jī)提供了Java調(diào)試的功能
                      b.調(diào)試平臺(tái)通過(guò)調(diào)試交互協(xié)議向Java虛擬機(jī)請(qǐng)求服務(wù)以對(duì)在虛擬機(jī)中運(yùn)行的程序進(jìn)行調(diào)試
                 JPDA架構(gòu):
                    JPDA通過(guò)兩個(gè)接口和協(xié)議來(lái)完成如上的說(shuō)明,分別是JVMTI(Java虛擬機(jī)工具接口)、JDWP(Java調(diào)試連線協(xié)議)和JDI(Java調(diào)試接口)。
                      a.JVMTI定義了虛擬機(jī)應(yīng)該提供的調(diào)試服務(wù),包括調(diào)試信息(Information譬如棧信息)、調(diào)試行為(Action譬如客戶端設(shè)置一個(gè)斷點(diǎn))和通知                      (Notification譬如到達(dá)某個(gè)斷點(diǎn)時(shí)通知客戶端),該接口由虛擬機(jī)實(shí)現(xiàn)者提供實(shí)現(xiàn),并結(jié)合在虛擬機(jī)中
                      b.JDWP定義調(diào)試服務(wù)和調(diào)試器之間的通信,包括定義調(diào)試信息格式和調(diào)試請(qǐng)求機(jī)制
                      c.JDI在語(yǔ)言的高層次上定義了調(diào)試者可以使用的調(diào)試接口以能方便地與遠(yuǎn)程的調(diào)試服務(wù)進(jìn)行交互,Java語(yǔ)言實(shí)現(xiàn),調(diào)試器實(shí)現(xiàn)者可直接使用該接口訪問(wèn)虛                擬機(jī)調(diào)試服務(wù)。
                 運(yùn)行方式:
                    當(dāng)虛擬機(jī)的調(diào)試服務(wù)運(yùn)行時(shí),虛擬機(jī)作為調(diào)試的服務(wù)提供端,監(jiān)聽(tīng)一個(gè)連接,而調(diào)試器通過(guò)該連接與虛擬機(jī)進(jìn)行交互。目前,Windows平臺(tái)的JVM提供了兩 種          方式的連接:共享內(nèi)存和 Socket連接,共享內(nèi)存的服務(wù)提供端和調(diào)試端只能位于同一臺(tái)機(jī),而Socket連接則支持不同異機(jī)調(diào)試,即遠(yuǎn)程調(diào)試。
                 虛擬參數(shù)配置:
                    a.啟用調(diào)試服務(wù)
                  -Xdebug 啟用調(diào)試
                  -Xrunjdwp:<sub-options> 加載JVM的JPDA參考實(shí)現(xiàn)庫(kù)
                    b. Xrunjdwp子參數(shù)(sub-options)配置
                       Xrunjdwp子參數(shù)的配置格式如下
                       -Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
                    c.例子
                       -Xrunjdwp:transport=dt_socket,server=y,address=8000
                   在8000端口監(jiān)聽(tīng)Socket連接,掛起VM并且不加載運(yùn)行主函數(shù)直到調(diào)試請(qǐng)求到達(dá)

                  -Xrunjdwp:transport=dt_shmem,server=y,suspend=n
                  選擇一個(gè)可用的共享內(nèi)存(因?yàn)闆](méi)有指address)并監(jiān)聽(tīng)該內(nèi)存連接,同時(shí)加載運(yùn)行主函數(shù)

                  -Xrunjdwp:transport=dt_socket,address=myhost:8000
                  連接到myhost:8000提供的調(diào)試服務(wù)(server=n,以調(diào)試客戶端存在),掛起VM并且不加載運(yùn)行主函數(shù)
           
                  -Xrunjdwp:transport=dt_shmem,address=mysharedmemory
                  通過(guò)共享內(nèi)存的方式連接到調(diào)試服務(wù),掛起VM并且不加載運(yùn)行主函數(shù)

                  -Xrunjdwp:transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
                  等待java.io.IOException被拋出,然后掛起VM并監(jiān)聽(tīng)8000端口連接,在接到調(diào)試請(qǐng)求后以命令/usr/local/bin/debugstub dt_socket myhost:8000執(zhí)行
           
                  -Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe
                  等待一個(gè)RuntimeException被拋出,然后掛起VM并監(jiān)聽(tīng)一個(gè)可用的共享內(nèi)存,在接到調(diào)試請(qǐng)求后以命令d:\bin\debugstub.exe dt_shmem <address>                執(zhí)行, <address>是可用的共享內(nèi)存
              2.基本原理
                
          服務(wù)器端在啟動(dòng)的服務(wù)器的同時(shí),也把JPDA明確的啟動(dòng)起來(lái),分配一個(gè)端口號(hào),那么你在客戶端只要連接上JPDA服務(wù)(sun稱為工具平臺(tái))便能測(cè)試了。
              3.Tomcat 實(shí)例
                
          打開(kāi)tomcat的bin目錄,找到catalina.bat, 用記事本打開(kāi)它。
                  找到set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%,
                  改為set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=5500,server=y,suspend=n
                  這樣就打開(kāi)了5500端口,然后你到bin目錄下運(yùn)行jpda start,你再去監(jiān)聽(tīng)5500端口,就可以實(shí)現(xiàn)remote debug了。
                

          posted @ 2008-06-18 19:11 田亮 閱讀(936) | 評(píng)論 (0)編輯 收藏

          節(jié)省使用httpsession(此文引用于Effective Enterprise java:39)

              基于html/http的應(yīng)用中,為了維護(hù)代表客戶端的瞬時(shí)狀態(tài),servlet容器提供了一種稱為會(huì)話空間的設(shè)施,被表示為HttpSession接口。這個(gè)思想本身是簡(jiǎn)單而直接的,servlet程序員可以將任意的可序列化對(duì)象置于會(huì)話空間,而下一次,同一個(gè)用戶對(duì)同一個(gè)Web應(yīng)用的任何部分發(fā)出請(qǐng)求時(shí),servlet容器將確保同樣的對(duì)象會(huì)處在HttpSession對(duì)象中。這使得servlet開(kāi)發(fā)者可以為在服務(wù)器上的Web應(yīng)用在多個(gè)HTTP請(qǐng)求之間維護(hù)每個(gè)客戶端的狀態(tài)信息;

              遺憾的是,這種機(jī)制并非完全免費(fèi)的。首先,在服務(wù)器端為每個(gè)客戶端存儲(chǔ)數(shù)據(jù)將會(huì)減少該服務(wù)器上的可用資源,這意味著服務(wù)器的最大負(fù)載能力會(huì)成比例下降。這個(gè)算式很簡(jiǎn)單:在會(huì)話空間中保存越多的數(shù)據(jù),機(jī)器能夠處理的會(huì)話就越少。由此推導(dǎo)出,為了令給定的機(jī)器能夠支持盡可能多的客戶端,必須將會(huì)話的存儲(chǔ)量保持在最小。實(shí)際上,對(duì)于真正具備可擴(kuò)展性的系統(tǒng)而言,無(wú)論何時(shí)都應(yīng)該避免使用會(huì)話。如果在服務(wù)器端可以不產(chǎn)生任何為每個(gè)客戶端進(jìn)行處理的開(kāi)銷(xiāo),那么機(jī)器的負(fù)載能力(在理論上)可以到達(dá)無(wú)限,能夠支持任意多連接到它的客戶端。

          posted @ 2007-12-17 10:04 田亮 閱讀(1357) | 評(píng)論 (4)編輯 收藏

          eclipse plugin

          Jodeclipse 是Jode的Eclipse插件,JadClipse是Jad的Eclipse插件,它們都是非常好的反編譯插件。

          Jode Eclipse Plugin 1.0.5 for Eclipse version 3.1 / 3.2

          安裝方法

          (1)從如下地址下載:

          http://sourceforge.net/projects/jodeeclipse

          把下載下來(lái)的文件jodeplugin_1.0.5.zip直接解壓到eclipse的plugins目錄下。

          (2)啟動(dòng)eclipse,help -> Software Updates-> Find and Install... -> Search for new features to install,單擊"New Remote Site..." 在URL欄輸入 http://www.technoetic.com/eclipse/update然后下一步,就可以看到“jode decompiler plugin *.*”,選上安裝就可以了。安裝好后可以看到Window -> Preferences...-> Java -> Jode Decompiler選項(xiàng)卡,okay,安裝成功了。


          配置:Window-> Preferences... -> General -> Editors -> File Associations找到"*.class"在"Associated editors"里面可以看到"Jode class file viewer"選中它再單擊Default按鈕.


          JadClipse Eclipse Plugin for Eclipse version 3.1 / 3.2/3.3

          一、下載:
          下載插件:
          下載jadclipse_3.1.0.jar版本,該版本支持eclipse3.1M6~3.2M2
          下載jadclipse_3.2.0.jar版本,該版本支持eclipse3.2M3和eclipse3.2M4.
          下載jadclipse_3.2.4.jar版本,該版本支持eclipse3.2M5~3.3M5

          下載jadclipse_3.3.0.jar版本,該版本支持eclipse3.3M6以上版本

          下載Jad反編譯工具:
          http://www.kpdus.com/jad.html#download,在該頁(yè)中找到適合自己操作系統(tǒng)平臺(tái)的jad下載。下載后解壓,然后將解壓后的jad.exe文件復(fù)制到%JAVA_HOME%\bin目錄下面(可以將jad.exe放到任意位置,只要記住其存放路徑就好,下面要用到)。

          二、安裝:

          Eclipse中的插件安裝可以參考:Eclipse使用技巧(三)Eclipse中插件的安裝
               方法1、直接將jadclipse_x.x.x.jar(x.x.x.代表版本號(hào))復(fù)制到%ECLIPSE_HOME%\plugins目錄下。

          方法2、使用link方式安裝,建立D:\Myplugins\jadclipse3.2.4\eclipse\plugins的目錄結(jié)構(gòu),將jadclipse_3.2.4.jar放到plugins目錄下面(注:其中D:\Myplugins為你自己定義的一個(gè)專門(mén)放置插件的目錄)。再在%ECLIPSE_HOME%\links目錄下面建立一個(gè)jadclipse3.2.4.link文件(該文件名隨便取)。文件里面內(nèi)容為:path=D:/Myplugins/jadclipse3.2.4.

          常見(jiàn)問(wèn)題及解決:

          (一)啟動(dòng)eclipse,打開(kāi)Window->Preferences->Java->JadClipse,如果沒(méi)有找到JadClipse,即JadClipse插件沒(méi)有激活。

          (1)檢查插件安裝的版本是否與你安裝的eclipse版本對(duì)應(yīng)

          (2)使用 –clean參數(shù)來(lái)啟動(dòng)eclipse

             (二)在使用JadClipse插件反編譯class文件時(shí)出現(xiàn)如下類似錯(cuò)誤:

          /*jadclipse*/



          /*

                          DECOMPILATION REPORT



                          Decompiled from: D:\Program Files\Java\jdk1.5.0_06\jre\lib\rt.jar

                          Total time: 16 ms

                          Jad reported messages/errors:

                          Exit status: 0

                          Caught exceptions:

          java.io.IOException: CreateProcess: (...)



          請(qǐng)確保你的Jad路徑在eclipse中正確制定。
               啟動(dòng)eclipse,打開(kāi):Window->Preferences->Java->JadClipse.
          1、Path to decompiler,這里設(shè)置反編譯工具jad的全路徑名,比如:%JAVA_HOME%\bin\jad.exe.
          2、Directory for temporary files,這里設(shè)置臨時(shí)文件路徑。

          至于Window->Preferences->Java->JadClipse目錄下的Debug,Directives,F(xiàn)ormatting,Misc目錄中的參數(shù)設(shè)置,就不再羅嗦了。

          (三)安裝完成后,eclipse沒(méi)有自動(dòng)將JadClipse Class File Viewer設(shè)置成class文件的缺省打開(kāi)方式。

          如果沒(méi)有默認(rèn),可以在Eclipse的Windows—> Perference—>General->Editors->File Associations中修改“*.class”默認(rèn)關(guān)聯(lián)的編輯器為“JadClipse Class File Viewer”。設(shè)置完成后,雙擊*.class文件,eclipse將自動(dòng)反編譯。

          posted @ 2007-11-29 14:12 田亮 閱讀(976) | 評(píng)論 (0)編輯 收藏

          J2EE總結(jié)---JNDI技術(shù) 我的所有隨筆屬于個(gè)人總結(jié),有不足之處請(qǐng)回復(fù)指出

           

          1.       什么是JNDIJava Naming and Directory Interface

          JNDI是用于訪問(wèn)不同命名和目錄服務(wù)的統(tǒng)一API接口;

          2.       JNDI的架構(gòu)和原理

                1.       架構(gòu):

                   第一層:java代碼,是訪問(wèn)JNDI的代碼;

                   第二層:JNDI API:統(tǒng)一的命名和目錄服務(wù)接口

                   第三層:JNDI Naming ManagerJNDI管理器

                   第四層:JNDI SPI:用于構(gòu)建JNDI實(shí)現(xiàn)的框架,能夠動(dòng)態(tài)的插入命名和目錄服務(wù)提供商的產(chǎn)品;

                   第五層:命名和目錄服務(wù)提供商的產(chǎn)品;

                   命名和目錄服務(wù)提供商的產(chǎn)品,例如:DNS,LDAP,NIS,NDS……..;因?yàn)檫@些產(chǎn)品都是不同的提供商提供的產(chǎn)品,所以他們的命名和目錄服務(wù)的標(biāo)準(zhǔn)不一致,各個(gè)目錄服務(wù)采用的訪問(wèn)協(xié)議也是不一樣的,所以,要是直接訪問(wèn)他們的話,就要編寫(xiě)不同的java代碼來(lái)訪問(wèn)他們;因此,JNDI SPI就解決了這個(gè)問(wèn)題,它能動(dòng)態(tài)的插入這些命名和目錄服務(wù),能夠?qū)⑵鋮f(xié)議專屬的目錄產(chǎn)品集成到系統(tǒng)中,使得我們能只需要調(diào)用一個(gè)統(tǒng)一的javaAPI就能夠訪問(wèn)插入的產(chǎn)品了;

                   2.原理:

                         JNDI其實(shí)很好理解,他就是一個(gè)樹(shù)狀的結(jié)構(gòu),它的最頂是一個(gè)initialContext節(jié)點(diǎn),然后它的下面就是綁定的一些對(duì)象或是一些subContext,用JNDI樹(shù)就能夠查找到樹(shù)中每一個(gè)綁定上的節(jié)點(diǎn)上的對(duì)象的引用;

          3.怎樣連接到JNDI上?

                            Environment environment = new Environment() ;//創(chuàng)建一個(gè)環(huán)境對(duì)象

                             environment.setProviderurl(“t3://www.aygfsteel.com”) ;

                             environment.setSecurityPrincipal(“todd”) ;//認(rèn)證的用戶名

                             environment.setSecurityCredentials(“841026”) ;//密碼

                             Context context = environment.getInitialContext() ;

                   //創(chuàng)建一個(gè)subContext并綁定一個(gè)對(duì)象:

                             Context subContext = context.createSubcontext(“subContext”) ;

                             subContext.rebind(“newObject”,object) ;//綁定的對(duì)象必須是可序列化的

                             subContext.close() ;

                             context.close() ;

          4.如何通過(guò)JNDI查找bind的對(duì)象?

                   Object object = context.lookup(“User”) ;

                   //user窄化到原型

                   User user = (User)javax.rmi.PortableRemoteObject.narrow(object, User.class) ;

                   context.close() ;

          posted @ 2007-04-09 08:16 田亮 閱讀(3295) | 評(píng)論 (4)編輯 收藏

          J2EE總結(jié)--Servlet技術(shù) 我的所有隨筆屬于個(gè)人總結(jié),有不足之處請(qǐng)回復(fù)指出

           

          Servlet技術(shù):

          1.       什么是servlet

          Servlet是一個(gè)java類,是一個(gè)提供基于協(xié)議請(qǐng)求和響應(yīng)的java類;

          2.       它的生命周期

                1.       啟動(dòng)服務(wù)器時(shí)就會(huì)實(shí)例化并加載servlet實(shí)例;

                2.       進(jìn)行初始化:自動(dòng)調(diào)用initServletConfig servletConfig)方法;

                3.       Servlet就緒:調(diào)用serviceHttpServletRequest requestHttpServletResponse response)方法(其   中     service   就是dopost()或doget()方法),這是客戶提交時(shí),自動(dòng)調(diào)用的;

                4.       Servlet銷(xiāo)毀:自動(dòng)調(diào)用調(diào)用distory()

             注意:在實(shí)例化并加載servlet后,步驟二和四只調(diào)用一次,而步驟三,是在每次客戶端發(fā)出請(qǐng)求時(shí)都調(diào)用;

          3.       怎樣部署一個(gè)servlet

          Servlet類是必須在web.xml中注冊(cè)才能使用的,例如,我有一個(gè)MyServlet類:

          必須在web.xml中注冊(cè):

          <web-app>

          //-----------------------Servlet聲明----------------------

                     <servlet>

                           <servlet-name>myServlet</servlet-name>

                           <servlet-class>servletPakage.MyServlet</servlet-class>

                </servlet>

          //------------------------Servlet注冊(cè)(鏡像)---------------

                     <servlet-mapping>

                           <servlet-name>myServlet</servlet-name>

                           <url-pattern>myServletURL</ url-pattern >

                </servlet-mapping>

          </web-app>

          這樣你在提交時(shí)的Url地址就是/myServletURL了;

          4.       什么是serviceHttpServletRequest requestHttpServletResponse response)方法?

          其中serviceHttpServletRequest requestHttpServletResponse response)方法包括兩種:

                1.       dogetHttpServletRequest requestHttpServletResponse response)方法:

                這種方法被稱為顯式提交方法,主要原因是它的得到的參數(shù)放在url中,可以被看到,所以稱為顯示提      交;

                例如:有個(gè)表單:

                <form action=”/myServletURL?name=todd” method=”get”>

                </form>

                這種方法其request獲得的參數(shù)就是你看到的name=todd

                例如:String s=request.getParameter(“name”);

                      其結(jié)果s=”todd”;

                2.       dopostHttpServletRequest requestHttpServletResponse response)方法:

                   這種方法被稱為隱式提交方法,它的參數(shù)不會(huì)在url里得到,而是在請(qǐng)求數(shù)據(jù)體得到參數(shù);

                   例如:有個(gè)表單:

                      <form action=”/myServletURL” method=”post”>

                               <input type=”text” name=”name” value=”todd”>

                   </form>

                這種方法其request獲得的參數(shù)就是表單體的name=todd

                      例如:String s=request.getParameter(“name”);

                      其結(jié)果s=”todd”;

          5.       什么是ServletContext?

                   ServletContext是一個(gè)接口,是WebApplication的視圖,它的作用域時(shí)Application,它能訪問(wèn)Application中的初始化參數(shù)和屬性,它不局限域一個(gè)Servlet,它屬于整個(gè)Application

          ServletContext的初始化參數(shù):

          web.xml中:

          <web-app>

              <context-param>

          <param-name>myBlog</param-name>

          <param-value>www.aygfsteel.com/todd841026</param-value>

          </context-param>

          </web-app>

           這樣在application中任意一個(gè)Servlet中可以得到這個(gè)參數(shù),

          例如:ServletContext sc = getServletContext ();

                    String s = sc.getInitParameter(“myBlog”);

          那么結(jié)果s就是”www.aygfsteel.com/todd841026”

          6.       什么是ServletConfig

          是單獨(dú)的Servlet初始化配置;

          例如:在web.xml

          <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>

          在這個(gè)Servlet中:ServletConfig sc = getServletConfig();

                                      String s = sc.getInitParameter(“cache”);

          那么結(jié)果s就是off”;

          7.       Servlet怎樣處理多線程

          在默認(rèn)的情況下,單個(gè)Servlet實(shí)例是可以處理多個(gè)并發(fā)請(qǐng)求的,所以要考慮到多線程的共享同一對(duì)象的問(wèn)題,例如:

          //做個(gè)Servlet中產(chǎn)生了多少個(gè)object對(duì)象一個(gè)變量的例子

          Private int count = 0 ;

          Public void dopost(HttpServletRequest request,HttpServletResponse response){

                     Object object = new Object() ;

                     count++ ;

                     System.out.println(“count = ” + count) ;

          }

          當(dāng)有5個(gè)用戶提交數(shù)據(jù)時(shí),因?yàn)?/span>Servlet是處理多線程的,所以可能出現(xiàn),第四個(gè)用戶的程序已經(jīng)執(zhí)行了count++,而第五個(gè)用戶剛執(zhí)行完Object object = new Object() ,就會(huì)出現(xiàn)數(shù)據(jù)不一致性,因?yàn)楫?dāng)前有5個(gè)object對(duì)象,但是count卻是4

          解決方案一:

          Private boolean flag = false

          Private int count = 0 ;

          Public void dopost(HttpServletRequest request,HttpServletResponse response){

                     synchronized(flag){

                              Object object = new Object() ;

                              count++ ;

          }                

                     System.out.println(“count = ” + count) ;

          }

          用同步程序塊解決多線程的問(wèn)題,這樣在同一時(shí)刻就只能有一個(gè)訪問(wèn)該程序塊了;

          解決方案二:

          Private int count = 0 ;

          Public void dopost(HttpServletRequest request,HttpServletResponse response)

          Implements SingleThreadModel{

                     Object object = new Object() ;

                     count++ ;

                     System.out.println(“count = ” + count) ;

          }

          實(shí)現(xiàn)SingleThreadModel接口,可以解決多線程問(wèn)題;

          8.       什么是servlet過(guò)濾器?

          也是一個(gè)java類,只是它實(shí)現(xiàn)了Filter這個(gè)接口;

          9.       servlet過(guò)濾器的生命周期;

          初始化:自動(dòng)調(diào)用init(FilterConfig config)方法

          執(zhí)行:自動(dòng)調(diào)用doFilter()方法;

          銷(xiāo)毀:自動(dòng)調(diào)用destory()方法;

          10.   servlet過(guò)濾器有什么用途?

                個(gè)人認(rèn)為目前自己用到的Servlet過(guò)濾器的主要用途:是安全性檢查

                   當(dāng)然過(guò)濾器在Servlet之前也可以修改請(qǐng)求,要是在Servlet之后,也可以修改響應(yīng); 

          11.   servlet過(guò)濾器怎樣部署?

          web.xml中:

          <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>

          這樣就是說(shuō)要訪問(wèn)WEB-INF下的Todd包下的jspServlet的話,就必須要先通過(guò)myFilter這個(gè)類;

          posted @ 2007-04-08 13:31 田亮 閱讀(4451) | 評(píng)論 (6)編輯 收藏

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          MyHome

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 衡阳县| 彰武县| 昌乐县| 双流县| 延边| 崇仁县| 米林县| 罗定市| 蒲江县| 灵璧县| 乌苏市| 永兴县| 台南市| 桓台县| 裕民县| 淅川县| 历史| 枣庄市| 剑阁县| 桦南县| 思南县| 陆川县| 龙山县| 扎鲁特旗| 浦北县| 怀安县| 灌云县| 阳西县| 涞水县| 虹口区| 南城县| 株洲县| 信宜市| 疏附县| 鄯善县| 犍为县| 潼南县| 偃师市| 秦皇岛市| 上蔡县| 岱山县|